汇编语言学习(一)win7下debug以及查看CPU和内存、用机器指令和汇编指令编程

该学习以**《汇编语言》(王爽第三版)**为主要参考教材。

则以书中为例,进行8086PC机的相关汇编实验。

一、win7下debug:

首先,需要了解debug是什么?
debug是DOS、WINDOWS等系统都提供实模式(8086方式)程序的调试工具。

使用debug我们能进行什么操作?
我们可以通过debug程序来查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。

然后,来进行实机操作(此处以windows环境为例且只对win7重点介绍)
在windows系统“开始-运行”,然后输入command,进入dos系统
然后在命令行中敲入debug,如果使用的是windows2000等系统,则会直接进入debug模式。
但是在win7环境下键入command会提示无该程序。
网络搜索后得到一篇很好的文章:https://blog.csdn.net/chengzandu0107/article/details/100913301
win7没有安装dos系统,而且debug这一命令需要在dos环境下才能使用的。
而王爽老师的汇编语言环境使用的是dos系统,我们现在一般不会装dos系统,为了模拟dos环境的debug,可以使用DosBox这一软件配上再debug.exe来模拟王爽老师的书籍实验效果。
下载的DosBox是一个安装软件,点击安装。调整安装路径,并记住安装路径。安装完成之后将下载的debug.exe放在DosBox根目录下,然后打开DosBox这一应用程序。
(注意在window下不区分大小写,所以以下命令使用大小写,作用是一样的)
输入MOUNT C +DosBox根目录路径,之后再输入C:并回车,如下图:

windows7下的DOS模拟
其中MOUNT C + 文件路径这一命令是将文件路径挂载在C这个盘符上,这个盘符你可以随便写,不一定要是C。
然后下一个命令C:的意思是切换到C这个盘符,即实际是切换到E:\DOSBOX-0.74这个目录下。然后你可以输入debug进行汇编语言的学习了。
为了避免我们一打开就要输入这个挂载的命令,我们可以双击查看DOSBox安装目录下的DOSBox 0.74-2 Manual…txt,这相当于是一个帮助文档,里面有一条信息对我们很有帮助,如下图:
在这里插入图片描述
这说明在DOSBox中的配置文件可以设置一个类似脚本的命令,我们一打开程序就执行这一命令,这就避免我们输入这些命令了。DOSBox的配置文件在安装根目录下,DOSBox 0.74-2 Options这个文件就是配置文件,可以看到它是一个windows批处理文件,双击它,在文件的末尾我们可以找到[autoexec]开头的信息,添加上我们需要让程序一开始就执行的命令,如下图:
在这里插入图片描述
这样就能愉快地进行debug了。(此处不对其他系统进行介绍,有兴趣者可以自行查阅)

二、debug命令介绍

debug命令较多,共有20多个,但是有七个命令是和汇编密切相关的,此处先介绍其中六个,剩下的P命令留作未来介绍。

R,用以查看、改变CPU寄存器的内容

当只输入r时用以查看CPU寄存器当前状态
在这里插入图片描述
通过《汇编语言》一书前两章的学习,我们知道AX BX CX DX(前四个均为合法寄存器) CS(代码段寄存器) IP(指令指针寄存器,个人感觉和PC自动累加器类似)寄存器,实际上DS SS ES 也是段地址寄存器,此处不过多赘述。
073F:0100表示当前CPU要读取执行的指令,并且列出当前内存单元所存放的机器码 00 00 ,对应的汇编指令为 ADD [BX+SI],AL

当输入r+某一寄存器时可以修改该寄存器中的值
在这里插入图片描述
可以看到在输入r ax后出现了ax当前所存数据的提示,当我输入200时提示错误,是因为我前面多输入一个空格,当我输入0200时则正确,实际上不用如此,直接输入200即可。
修改完毕后再次使用r来查看,发现AX中的值已经改变。
若我们修改CS:IP的值使得内存地址改变并导致机器码改变,则如下图:
在这里插入图片描述
可以看见机器码变为20 20 ,并且对应汇编语言也进行了改变。

D,用来查看内存中的内容
在这里插入图片描述
可以看到,若直接使用-d则是输出debug预设地址的内容,而d+内存单元才会显示指定内存内容。
每行中间有个—用以帮助区分前八个数和后八个单元。
每行开头都是起始地址。
右边是每个内存单元对应可显示的ASCII码字符,则34H代表4。
若再次使用d,则会显示连续内存单元的内容。
也可以就某个范围类的内存单元进行查看,方法如下:(查看的是10001~10009的内容)
在这里插入图片描述

E,用来改写内存中的内容
可以指定初始地址后改写其中的内容,如图:
在这里插入图片描述
改写后查看:
在这里插入图片描述
也可以用一问一回答的方式来改写:直接用e+初始地址
在这里插入图片描述
如图,则会出现01.,则.之后代表你需要改变1000:00的值(01代表未修改前的内容),输入后按空格结束当前修改自动跳转到1000:02,若不需要修改则直接空格即可,修改完成需要回车确认。

也可以修改为字符和字符串,如图:
在这里插入图片描述
则,我们也可以将机器码写入内存,而不同CPU有不同的汇编指令集,如何查看机器码对应的汇编指令呢?这就需要U命令。

U,将内存中的机器指令翻译成汇编指令

如图:
在这里插入图片描述
则可以看到机器码与对应的汇编指令

T,执行一条机器指令

需要注意,想使用T命令,需要先让CS:IP指向需要执行的内存单元(r命令修改CS:IP)。
而执行完当前指令后,可以再使用t继续执行下一条机器指令。
在这里插入图片描述

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

通过之前的学习,我们注意到,若是通过e来输入汇编语言会十分不方便,这便需要A命令来帮助我们。
同理:a+cs:ip
在这里插入图片描述
若需要结束,则在某指令开始回车即可。

三、实验任务:

(1)
在这里插入图片描述
利用其得到2的8次方
在这里插入图片描述
(2)
主板rom上的生产日期在内存FFF00H~FFFFFH中,找出。
在这里插入图片描述

发布了21 篇原创文章 · 获赞 1 · 访问量 1564

猜你喜欢

转载自blog.csdn.net/qq_33566628/article/details/103986304