在装完DosBox环境之后,就可以用debug模式进行汇编指令的编程了。
- 实验内容:
首先用a指令进行数据的储存,然后用t命令进行调试。
可以发现ax,bx在不同的命令下发生了改变,cs的地址和指令是相同的,ip的值也是根据输入指令的长度而不断的增加。
(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
先观察一下实验要求,执行完第一步后ax= 1,第二步后ax = 2,执行add 1次 2*2,执行2次,就是2*2*2就是2的3次方,那么2的8次方 就 add 执行 7次。
执行之前先将指令指向add语句 这样就会重复执行 add语句,用jmp 指令更改CS、IP寄存器的值,从而控制CPU执行目标指令。之后,就可执行我们写的汇编指令了,我们要先使用r指令改变 cs 和ip的指向,cs为代码段寄存器,ip为指针寄存器。在任意时刻,CPU将cs:ip指向的内容当做指令执行。
关于执行命令t的执行次数:执行第一二步执行需 2个t,那么执行第三步的t的时候实际上只是改变cs:ip的指向,并没执行cs:ip指向内容的机器指令,后面的7个jmp 每个需要执行2个t才能执行add方法。所以共需要执行t 16次才能计算出2的8次方。
第一次t命令:
最后一次t命令:(最后短线位置的t手抖了)
(3)查看内存中的内容。
PC机主板上的ROM中有一个生产日期,在内存FFF00H-FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。
、
尝试修改:
发现无法修改。
(4)向内存从B8100H开始的单元中填写数据,如:
-e B8100:0000 01 01 02 02 03 03 04 04
请读者先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。
可以看到,向B8100H单元中输入这些数据后,可以观察到界面上出现了一些彩色的图案,黄方框标识。
接着在相同的地址内填写不同的数据,可以看到出现了完全不同的图案。
下面改变输入数据的地址,可以看到显示的内容不变,位置改变了。
说实话,我也不知道这是怎么回事。我就去查了查,度娘告诉我:这一段内存为显存,是RAM,可以改变其值在屏幕上的显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII码,后一个(高)为要显示的颜色。
实验总结:
(1)首先得理解并且熟练操作的一些指令。
在debug模式下常用的命令:
R命令:查看、改变CPU寄存器的内容;
D命令:查看内存中的内容;
E命令:改写内存中的内容;
U命令:将内存中的机器指令翻译成汇编指令;
T命令:执行一条机器指令;
A命令:以汇编指针的格式在内存中写入一条机器指令。
(2)通过这次实验,对debug的一些基本操作有了基本了解,如何写入机器代码和汇编代码,查看所需要的内容,并且知道了某些内存中存储的内容,以及它们中的内容是否可变等知识。
如果有什么错误的话,还希望各位大佬指出。谢谢!