这款神器帮你钻到CPU和内存的肚子里!


大家晚上好。今天是汇编学习的第三弹!前面两节简单地阐述了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;

  • 后台回复 汇编 即可获取软件安装包及相应工具。

你可能感兴趣的:(这款神器帮你钻到CPU和内存的肚子里!)