Debug的使用:
Debug 是DOS和Windows 实模式 (8086方式)的调试器,可以查看修改寄存器内容以及内存内容,机器码级别
Debug命令:
1)R命令:显示或修改寄存器内容
-r 显示所有寄存器及内容,且在末尾显示当前CS:IP指向的内存单元的指令
-r ax 修改ax寄存器值,会出现:提示输入
注意修改CS和IP可以使用r命令,与汇编指令区别开(汇编jmp,debug -r)
2)D命令:显示内存内容
-d 无参数显示当前CS:IP地址开始128个内存单元数值及对应ASCII码
-d 1000:0 显示1000H:0H地址开始128个内存单元数值及对应ASCII码
-d 1000:0 F 显示1000H:0H地址开始F个内存单元数值及对应ASCII码
3)E命令:修改内存内容
-e 1000:0 1 2 3 ....从1000H:0H地址开始每个内存单元依次是0,1,2...要改多少就写多少
-e 1000:0 以提问方式依次写入各个单元内容,输入此命令之后显示1000H:0H的数值并且显示一个 . ,在点之后输入新的数值
按空格跳到下一个内存单元, . 后不输入数值按空格表示不修改该内存单元数值,回车键结束命令
-e 1000:0 1 'a' 2 'b' 输入字符, 对应内存单元数值为: 01 61 02 62 61十进制是91表示小写字母a
-e 1000:0 1 "a+b" 2 "nihao" 输入字符串
对内存来说数据和指令都是二进制没有区别的,所以用E命令也可以把指令写入内存
1. mov ax,0001指令对应的机器码是b80100
2. -e 1000:0 b8 01 00 把指令的机器码写入内存
3. -r cs :1000 -r ip :0 设置CS:IP使下个指令指向我们覆盖的内存
4.-t 运行一次指令
4)U命令:将内存中的机器码翻译成汇编指令并显示
1. -e 1000:0 b8 01 00 把指令的机器码写入内存
2. -u 1000:0 从1000:0内存开始把内存中数值翻译成汇编指令
结果 : 1000:0000 B80100 MOV AX,0001
1000:0003 ...
5)T命令:执行当前CS:IP指向的指令,执行完自动显示寄存器内容
6)A命令:以字符串方式把指令写入内存
-a 1000:0 回车后自动显示1000:0000
输入mov ax,1之后自动显示1000:0003 再输入其他指令,输入结束回车
实验:
1.计算2的N次方:
从1000:0初开始输入指令
mov ax,1
add ax,ax
jmp 1000:0003 :跳转到add指令
2.查看PC主机ROM内存上的生产日期,地址位于FFF00H到FFFFFH
-d FFF0:0 查看从FFF00H开始的128内存单元
-d 查看接下来的128内存单元
用-e修改是不可以的,ROM只读的