一、实验目的
学会怎样进入DOS、Windows提供的实模式程序的调试方式,学会用用机器指令和汇编指令编程,掌握Debug常见指令的使用,以及跟踪程序的运行。
二、实验内容
请完成实验,并回答思考题、完成要求的截图
1:复习:Debug的R命令、D命令、E命令、U命令
2:用Debug的A命令以汇编指令的格式在内存中写入一条机器指令
3:用Debug的T命令执行一条机器指令;
4:小测试1
5:小测试2
6:小测试3
7:小测试4
三、实验过程和结果
注意:debug下默认十六进制
- 1:复习:Debug的R命令、D命令、E命令、U命令、A命令 进入debug模式
- 1>用Debug的R命令查看、改变CPU寄存器的内容;
- 2>用Debug的D命令查看内存中的内容;
- 3>用Debug的E命令改写内存中的内容;
- 4>用Debug的U命令将内存中的机器指令翻译成汇编指令
- 2:用Debug的A命令以汇编指令的格式在内存中写入一条机器指令
思考1:可以指定A命令写入的汇编指令的地址吗?怎么做?(可截图表示)
思考2:可以查看写入的汇编指令对应的机器码吗?怎么做?(可截图表示)
- 3:用Debug的T命令执行一条机器指令
思考3:若写入了多条汇编指令(如mov ax,31 mov bx,ax add ax,bx),怎么执行?每次执行后,ip的增加值相同吗,为什么?
答:根据对应的IP地址执行,如果IP当前值为0103,则开始执行的是mov bx,ax ;IP的增加值不相同,指令的长度不同
思考4:t命令执行的指令跟什么有关系?(如果想不出来,请跟同学讨论,不要继续实验,直到想出来再继续)
和CS和IP有关
- 4:小测试1
请测试下列指令的长度,并将你使用的方法截图
mov ax,0100 长度:3
mov bx,ax 长度:2
mov cx,[0] 长度:2
mov dx,[bx] 长度:2
截图如下:
- 5:小测试2(这道题目如果很顺利,绝对不是好事情)
(1)用e命令在内存中某一段写入自己生日(BCD码)
(2)用mov指令将自己生日(BCD码)放入通用寄存器中(截图, 要有指令写入和执行的过程) 提示:先用a命令写入指令,再用t命令执行写入的指令。
(3)用d命令(上图未展示)和r命令(上图已展示1922年8月29日)查看自己的生日日期。注意:第1>条的工作,不能被第2>条给覆盖了哦。(截图)
思考5:e命令在内存中写入的生日对应的地址是?mov指令写在了哪里?
在内存中写入的生日对应的地址是:075F:0000 然后把第二个 mov指令写在012f:0000
- 6:小测试3
请将下列十六进制机器语言
B8226689C3B812348ED8
翻译成汇编语言:
机器语言 | 汇编语言 |
---|---|
B82266 | mov ax,6622 |
89C3 | mov bx,ax |
B81234 | mov ax,1234 |
8ED8 | mov ds,ax |
思考6:如何运行上面的机器语言?(可截图表示)
- 7:小测试4
(1)用e命令在134f:0100
处写入如下数据
12 34 56 78
(2)用a命令在135f:0110
处写入【将内存134f:0100
处的连续的两个字的数据,读入寄存器ax和bx中】的指令(截图)
(3)执行135f:0110
处你写入的指令(截图),并用r命令查看结果。
【这些题和指令都是我自己写的,有些地方可能错了,希望大家看到了可以告诉我,拜托拜托啦~】