0%

实验1:汇编指令编程

debug的使用

Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具,使用它,可以查看CPU各种寄存器的内容,内存情况可机器码级跟踪程序的运行。

实验中用到的debug功能:

  • -r 查看、改变CPU寄存器的内容
  • -d 查看内存中的内容
  • -e 改写内存中的内容
  • -u 将内存中的机器指令翻译成汇编指令
  • -t 执行一条机器指令
  • -a 已汇编指令的格式在内存中写入一条机器指令

注意:windows 7 以后就不提供带有debug的commond工具了,这里实验使用MS-DOS虚拟机完成实验。

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

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

注意CS和IP的值,CS=0CA2,IP = 0100, 也就是说,内存0CA2:0100处的指令为当前CPU要读取执行的指令。下方还可以看到其对应的机器码与汇编指令。

② 用R改变寄存器中的内容

用R改变寄存器中的内容

③ 用D来查看内存中的内容

用D来查看内存中的内容

使用“d 段地址:偏移地址”的格式命令将列出从指定单元开始的128个内存单元的内容。 使用“ f ”表示列出一行。

结果显示中,左边的为内存地址,中间为地址对应的值,右边为该值对应的ASCII码。

一些其他查看格式

在使用“d 段地址:偏移地址”的格式命令后,接着使用D命令,可列出后续的内容。

④ 用debug的E来改写内存中的值

用debug的E来改写内存中的值

可以写入数字、字符和字符串,在右边可以看到写入的字符与字符串。

⑤ 用E命令向内存中写入机器码,用U命令查看机器码的含义,用T命令执行内存中的机器码

E U

在执行机器码之前,需要修改CS和IP的值,使其指向当前代码的起始内存位置。

T

⑥ 用A命令以汇编指令的形式在内存中写入机器指令

用A命令以汇编指令的形式在内存中写入机器指令

执行

最后,做一个有趣的实验,向内存块B810:0000写入:

做一个有趣的实验

仔细观察,屏幕上某些地方显示了一些奇怪的字符。这是怎么回事呢?留作大家思考。