1. 预备知识:Debug的使用
(1)什么是Debug?
Debug是DOS、Windos都提供的实模式(8086方式)程序的调试工具。可以使用它查看CPU各种寄存器中的内容、内存的情况和在机器码级别跟踪程序的运行。
(2)我们用到的Debug功能。
- R命令查看、改变CPU寄存器的内容
- D命令查看内存中的内容
- E命令改写内存中的内容
- U命令将内存中的机器指令翻译成汇编指令
- T命令执行一条机器指令
- A命令以汇编指令的格式在内存中写入一条机器指令
(3)进入Debug
(4)R命令
左下角的073F:0100
表示CS:IP所指向的内存单元,其此处的机器码为0000
,对应的汇编指令为ADD [BX+SI],AL
。右下角指令的含义后续再说。
R命令可以修改寄存器(包括CS:IP)的内容:
(5)D命令
查看内存10000H
出的内容,则可以d 段地址:偏移地址
的格式来查看
(6)E命令
可以用E命令改写内存中的内容
- 一次更改多个
- 提问式更改
- 还可以写入字符,字符串
(7)E命令向内存写入机器码,U命令查看内存中机器码的含义,T命令执行内存中的机器码
- 查看机器码含义
- 将CS:IP指向改为
1000:0
- T命令执行
注意AX,CX
的值和CS:IP
的指向
(8)A命令以汇编指令形式写入
使用U命令查看写入:
2. 实验任务
(1)使用E和A命令写入内存,并用T命令执行,观察寄存器的内容
(2)将以下指令写入内存单元,并计算2的8次方
mov ax,1
add ax,ax
jmp 2000:0003
答:
-
将以上命令写入2000:0的内存单元中,使用U查看:
-
更改
CS:IP
的内容,使其指向2000:0000
:
-
执行过程分析(注意:ax中的值为16进制)
- 第一次T,ax=1
- 第二次T,ax=2
- 第三次T,ax=2,
CS:IP
从2000:0005
变为2000:0003
- 第四次T,ax=4
… - 第16次T,ax=100(10进制表示为256,即2的8次方)
(3)查看主板ROM中的生产日期,并尝试修改
显示为1992年1月1日的原因:使用的DOSBox是一个模拟x86的模拟器,因此该日期也是虚拟的。又因为这是写在ROM中的,所以只读不能改。
(4)向内存中写入以下数据并观察
-e B810:0000 01 01 02 02 03 03 04 04
答:
- 写入数据并查看
因为这段内存是显存,D命令查看内存内容时会刷新显存,因此无法用D命令查看。但是当我们写入数据时,屏幕会发生变化: