往期回顾
CPU的“三条”总线
物理地址是怎么确定的?以8086为例

前面两节简单地阐述了CPU和内存如何通信以及物理地址的确定方法。今天开始实战演练下如何操纵寄存器和内存,因为岛主是基于8086来学习的汇编,先不谈Linux,这里我们借助一款神器来通透的观察寄存器和内存——DosBox。

DosBox

体验一个裸机的环境,在一个没有操作系统的环境中直接对硬件编程是很酷的一件事情。学习汇编需要使用debug来帮助我们更好地了解计算机系统。王爽老师的《汇编语言》上级环境使用的是dos系统,我们现在一般不会装dos系统,为了模拟dos环境的debug,可以使用DosBox这一软件再配合相应的编译器masm、链接器link和调试器debug来展开汇编的学习。关于软件的下载和相应工具岛主已经打包上传,后台回复汇编,即可获取。

闲言少叙,书归正传。

今天主要介绍debug的常用命令。

dosbox安装后的界面如图所示。

在电脑上任意一个位置新建个目录作为工作区。岛主在e盘建立了dos文件夹。每次进入软件都需要对工作区的路径进行挂载:

 mount c  e:\dos

为了免我们一打开就要输入这个挂载的命令,我们找到DOSBox安装根目录下的DOSBox 0.74-3 Options.bat这个配置文件,可以看到它是一个windows批处理文件,双击它在文件的末尾我们可以找到[autoexec]开头的信息,添加上我们需要让程序一开始就执行的命令,最后保存就行了,下一次打开DOSBox程序后,程序就自动运行我们在配置文件中写好的命令了。

 [autoexec] # Lines in this section will be run at startup. # You can put your MOUNT lines here.  mount C E:\dos C:

8086CPU共有14个寄存器:

  • 通用寄存器:ax,bx,cx,dx
  • 变址寄存器:ci,di
  • 指针寄存器:sp,bp
  • 指令指针寄存器:ip
  • 段寄存器:cs,ds,ss,es
  • 标志寄存器:psw

注意,寄存器不区分大小写

在掌握上了上述14个寄存器的含义后我们用debug工具简单做下演示。

debug最常用的六个指令,写成两个单词比较好记忆:red uat(红色的uat测试)。

首先输入:debug,进入调试模式。

r:查看或改变CPU寄存器的内容

直接输入r可以查看所有寄存器的值以及下一条执行的指令

输入r + 寄存器即可改变寄存器的值。如下图所示。

d:命令查看内存中的内容

直接输入d可以查看debug预设的内存值。输入CS:IP加上偏移量可以查看任意你想观察的内存值。

e命令:改写内存中的内容

e和d相结合即可查看改写后的内容。

u:将内存中的机器指令翻译成汇编指令

汇编指令:

 mov ax, 0123 mov bx,3 mov ax,bx add ax,bx

对应机器码:

 B8 23 01 BB 03 00 89 D8 01 D8

我们通过e命令将上述机器码写入内存,然后执行u即可看到机器指令被翻译成了汇编指令,且一一对应。

a:以汇编指令的格式在内存中写入一条机器指令

相比u命令,我们更常用a命令,毕竟我们是编写汇编,不是写机器码。我们将上述的汇编指令写入3000:0,然后执行u查看,没有问题,依然一一对应。

t:执行一条机器指令

该命令就相当于vs中的单步运行语句。我们用r命令将cs和ip修改为上述操作的3000:0地址段,单步执行t观察寄存器的变化。

总结

  • 本文介绍了dos环境下debug调试汇编程序的方法,常用的命令为reduat;
  • 后台回复 汇编 即可获取软件安装包及相应工具。

一款练习汇编的神器——DosBox相关推荐

  1. 推荐一款万能抓包神器:Fiddler Everywhere

    搞IT技术的同行,相信没有几个人是不会抓包这项技能的(如果很不幸你中枪了,那希望这篇文章给你一些动力),市面上的抓包工具也有很多,常用的有:Charles.Fiddler.Burpsuite.Wire ...

  2. 推荐一款接口 API 设计神器!

    今天栈长给大家推荐一款接口 API 设计神器,传说中的,牛逼哄洪的 Swagger,它到底是什么?今天为大家揭开谜底! Swagger是什么? 官网:https://swagger.io/ Swagg ...

  3. 分享一款程序员起名神器,让你从此起名不再头秃

    大家好,我是大目.最近偶然发现一款程序员起名神器,非常好用,推荐给大家. 素材发到视频号了,新号成立,欢迎点赞.收藏.关注.讨论.

  4. 推荐一款全能测试开发神器!1分钟快速上手!

    关注上方"测试开发技术",选择星标, 干货技术,第一时间送达! 1. 说一下背景 在日常开发或者测试工作中,经常会因为下游服务不可用或者不稳定时,通过工具或者技术手段去模拟一个HT ...

  5. 四款职场效率神器,飞速提高你的工作效率

    不少初入职场的新人,误认为职场之中奉行结果论,上司.boss只看重成绩,只要成绩单漂亮,顺利完成工作指标就可以高枕无忧.殊不知,领导对下属的工作要求,看效果,还看效率.同样的成绩单,别人用1星期,你用 ...

  6. 简单实用,聊聊我常用的 4 款 Pandas 自动数据分析神器

    我们做数据分析,在第一次拿到数据集的时候,一般会用统计学或可视化方法来了解原始数据. 了解列数.行数.取值分布.缺失值.列之间的相关关系等等,这个过程叫做 EDA(Exploratory Data A ...

  7. android 触控优化,太滑手了,安卓这款触控优化神器要逆天!

    原标题: 太滑手了,安卓这款触控优化神器要逆天! 最近国外一款很火的优化工具"Super Touch" 中文名[超级触控],它可以提升触控反应速度,手感媲美iPhone,令人惊讶的 ...

  8. 一款网盘搜索神器 + 某度网盘不限速下载软件

    众所周知,大家都是爱好学习的优秀青年,经常需要去各大网盘倒腾一些学习资料,但是市面上网盘众多,导致大家不能在第一时间找到所需的学习资料,以至心灰意冷,失去了学习的动力,放弃美好人生.作为一个负责任的博 ...

  9. 低代码开发,推荐一款Web 端自动化神器:Automa!

    1. Automa介绍 又到了优秀工具推荐的时候了,今天给大家分享一款前端自动化操作神器: Automa. 首先了解一下Automa是什么?Automa它定位是一款 Chrome 插件,也就意味着,它 ...

最新文章

  1. 每日一皮:学PHP的不容易...
  2. CSS 详细解读定位属性 position 以及参数
  3. vb.net2019-多线程并行计算(1)
  4. FreeRTOS 之二 Tracealyzer for FreeRTOS(FreeRTOS+Trace) 详解(源码解析+移植)
  5. Ryu oslo学习总结
  6. Div+CSS布局入门教程(四) 页面顶部制作之二
  7. GridView 配合模板实现 合并单元格(多列)
  8. Oracle“钱夹”的使用
  9. Python学习笔记:利用sorted()函数对序列排序
  10. 超越苹果! 雷军愿望达成:小米,世界第三!
  11. Python中re(正则表达式)模块学习
  12. flask使用sqlit3的两种方式
  13. 116. cURL 简介(2)
  14. Python 3.5安装JPype
  15. 基于特征点匹配的车辆跟踪
  16. 15.网络协议-Radius协议
  17. 发送邮件 显示对方服务器未响应,邮件对方服务器未响应
  18. 2022-3-26JavaSE试卷-答案
  19. windows10系统自带linux子系统(WSL)的安装目录
  20. 免安装PortableGit配置 + TortoiseGit安装

热门文章

  1. 计算机应用基础1010转换为10进制,大学计算机应用基础期末考试试题及答案
  2. 农业工程与信息技术是计算机类吗,中国海洋大学农业工程与信息技术概论2020考研复试大纲...
  3. Android的壁纸放在哪?
  4. drawboard pdf拆分文件_请收藏!这是一份最全的PDF问题解决方案。
  5. 2022-2028年中国草炭行业市场深度分析及发展趋向分析报告
  6. 中国软考2006年各地报名方式和咨询地址
  7. 选矿的元宇宙,工艺的3D场景再现
  8. 计算机中用于汉字处理的是什么意思,用于汉字输出的是什么编码
  9. 【渝粤教育】国家开放大学2018年春季 8599-22T人际关系学 参考试题
  10. 服务器系统wlanapi,wlanapi.dll