大家晚上好。今天是汇编学习的第三弹!前面两节简单地阐述了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;
-
后台回复 汇编 即可获取软件安装包及相应工具。
网友评论