查看CPU和内存,用机器指令和汇编指令编程
debug的使用
安装DOSBOX进行实验
R命令查看改变CPU寄存器内容
![](https://img-blog.csdnimg.cn/img_convert/4c6fcea0d1ee1a0e1685f20b67e45264.png)
在所有寄存器的下方,debug还列出了CS:IP所指向的内存单元处所存放的机器码,并将它翻译为机器指令。
此处CS:IP所指向的内存单元为073F:0100.此处存放的及机器码为 0000 ,对应的汇编指令为 ADD [BX+SI],AL。
还可以利用R指令修改寄存器中的内容
![](https://img-blog.csdnimg.cn/img_convert/c7d853c22973233907bcf5f7bb1cb3cd.png)
D命令查看内存中的内容
d 段地址:偏移地址
![](https://img-blog.csdnimg.cn/img_convert/6bca87bc795a15c58a49205af96f966e.png)
debug将列出从指定内存单元往后128个内存单元的内容(1000:0~1000:F)
也可以指定查看的范围 d 段地址:起始偏移地址 结尾偏移地址
用D命令改写内存内容
e 起始地址 数据 数据 数据 数据...
![](https://img-blog.csdnimg.cn/img_convert/4e676209cd0b168607aaa844318e043d.png)
也可以采用提问的方式来逐个的修改内存的内容
用E命令向内存中写入机器码,用U命令查看内存中机器码的含义,用T命令执行内存中的机器码
写入机器码
mov ax,0001
mov cx,0002
add ax,cx
![](https://img-blog.csdnimg.cn/img_convert/8cb4fa8e276e28bbdf09dcd6ad8d1fdd.png)
使用U命令翻译
![](https://img-blog.csdnimg.cn/img_convert/e9c73b4cee2037516ce48adf18650e1b.png)
简单的使用T命令可以执行CS:IP指向的指令
若要用T命令控制CPU执行某个指令,必须先让CS:IP指向该指令
可用R命令修改CS:IP中的内容,使CS:IP指向指定的内容
![](https://img-blog.csdnimg.cn/img_convert/d10924c87e3e09c6131a0e671c9dabae.png)
再使用T命令执行指令
注意,指令执行后,AX中的内容被改写为1,IP改变为IP+3,CS:IP指向下一条指令
A命令以汇编指令的形式在内存中写入机器指令
![](https://img-blog.csdnimg.cn/img_convert/1ba1ddc308b075579e3ae93bb0d95380.png)
本次实验中需要用到的命令
查看修改CPU寄存器的内容:R命令
查看内存中的内容:D命令
修改内存中的内容:E命令(可以写入数据指令)
将内存中的内容解释为机器指令和对应的汇编指令:U命令
执行CS:IP指向的内存单元处的指令:T命令
以汇编指令的形式向内存中写入指令:A命令
实验任务
(1)使用debug,将下面的程序写入内存,逐条执行,观察每条指令(此处指令省略)执行后CPU中相关寄存器中内容的变化。
提示:可用E命令和A命令以两种方式将指令写入内存
(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
(3)查看内存中的内容
(4)向内存从B8100H开始的单元中填写数据
实验过程
(1)使用debug,将下面的程序写入内存,逐条执行,观察每条指令(此处指令省略)执行后CPU中相关寄存器中内容的变化。
![](https://img-blog.csdnimg.cn/img_convert/e52c99dcf414b342575f340ba00576ec.png)
(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
![](https://img-blog.csdnimg.cn/img_convert/8c235a36b1c40cab47bf34705664809a.png)
![](https://img-blog.csdnimg.cn/img_convert/740d9ffa658c986223fd3b2675158dce.png)
执行八次即可得到2的8次方