汇编 | 8086 DEBUG调试学习笔记

在8086汇编中DEBUG是个非常实用的工具,并且可以非常明了的查看每一步指令每一个段的相对状态,有利于学习。下面列举一下DEBUG的一些使用方法:

  1. -A:可以开始在相应位置编写代码,其中后面可以接一个地址,表示写的位置;从下图可以看到,A后加参数2000,即从段偏移2000的位置开始存放代码。

  2. -C

    -c [add1]L[length] [add2] 是将add1和add2开始的length个数据显示出来,进行比较;

    下图键入:-C 50L20 100 第二列显示的是0050-006F的数据内容,第三列显示的是0010-011F的数据内容,而长度为20。非常直观的显示了数据。

  3. -D:显示存储空间中的内容。

    如上所示,0200中本来是空的,通过a命令写进代码后再次查看可以发现里面存放了新的操作码。

    另外还可以通过指示明确段和偏移直接查询特定位置的内容。(如CS:200

  4. -E:修改特定存储空间中的内容

    -E 100
    073F:0100 B8.12
    

    也可以通过连续输入的方式更改连续的一片内容:

  5. -F:用于填充一段存储单元,但是要注意他的格式把段地址和段偏移要写清楚

    如下图所示,L10表示填充的长度是10 后面加填充的内容,通过两个命令可以发现,如果填充的内容我只写了 \(n\) 个而填充的长度我写了\(m\)个(\(n<m\) )则会顺序循环的自动填充。

  6. -G:这个命令使用不当会导致系统崩溃使用方法为:G[=address],代表从当前 \(cs:ip\)​ 所指的位置执行到address处.

    技巧:先用 -U 查看部分指令内容,然后用 -G 快速执行内容

  7. -H: 这个选项比较简单,即输入两个参数,对这两个参数进行加减运算,把想加的结果显示在第一列,相减的结果放在第二列,其中我们可以看到,当减为负数时候是以补码的形式表示的。

  8. -I: 从某一端口输入并显示一个字节,后面的参数接端口号。

  9. -L: 发现L命令并不能使用,查阅了资料,dos下运行debug时,涉及到直接写硬盘扇区的操作都是被禁止的,这是windows的保护功能。如果想要运行全部debug命令,必须在实模式dos下运行。

  10. -M:把 \(cs\) 中的一段内容移动到内存单元中,这里默认指的就是 \(DS\) 段。

  11. -N:用于对文件命名,-n[name]。

  12. -O: 用于给端口发送数据,

    ; 向2F8端口发送数据4F
    -O 2F8 4F
    
  13. -Q :使用Q命令来退出debug调试

  14. -R:R命令是个非常方便的命令,它可以查看和修改8086中寄存器的值。使用-R可以直接查看所有的寄存器,使用 -R+[指定寄存器] 可以实现对某个寄存器的修改,如上图所示,已经成功修改了AX中的值。其中使用-R F可以查看标志寄存器的状态如图所示,它不是单纯的0和1不太好记,可以查实验书来对照,可以看到当前寄存器属于:未溢出、方向正、允许中断、符号为正、不是0、没有辅助进位、奇、没有进位的状态。

  15. -F:用于搜索指定位置中的字符,返回的是精确的地址

  16. -T:单步调试

  17. -U:反汇编指令,可以将存在内存中的机器码反编译成汇编语言,其中一个参数是起始地址

  18. -W:一直没调试成功,原因应该和L命令相同,windows为了保护硬盘,并不允许在这种情况下使用此命令。

通过学习可以发现立即数在使用时候默认为 \(16\) 进制,并且不需要加H,末尾加H反而会报错,并且debug中并不区分大小写。

emu8086也是一个非常好的调试软件,操作简单方便网上就可以下载。。
debug在CMD中打不开是因为windows版本过高,可以下载 Dosbox 在其中运行调试


Tips:时间会解决一切
原文地址:https://www.cnblogs.com/RioTian/p/15549059.html