预备知识 debug
什么是debug?
debug 是DOS、windows都提供的实模拟程序的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行
用到的debug功能
常用:
1 R:查看、改变CPU寄存器的内容 2 D:查看内存中的内容 3 E:改写内存中的内容 4 U:将内存中的机器指令翻译成汇编指令 5 T:执行一条机器指令 6 A:以汇编指令的格式在内存中写入一条机器指令
注意:这里关注的是内存单元而非单元中的内容。打个比方:一堆各色的小球要放到对应颜色的房子里,在把小球拿到房子里之前要先查找房子的位置,这里不能拿着小球去找房子,找到房子之后把小球拿过去。还有小球中可以存放字条,字条上可以写入内容等其余的操作还在学习。
所有
百度百科中可以查到更详细的解释
R:查看、改变CPU寄存器的内容

注意CS和IP的值,CS=073F,IP=0100,也就是内存073F:0100处的指令为CPU当前要读取、执行的指令。在所有寄存器的下方,debug还列出了CS:IP所指向的内存单元处所存放的机器码,并将它翻译成为汇编指令。可以看到,CS:IP所指向的内存单元为073F:0100,此处存放的机器码为0000,对应的汇编指令为add [BX+SI],AL
D:查看内存中的内容
查看内存5000H处的内容,可以使用【d 段地址:偏移地址】 ,debug将列出从指定内存单元开始的128个内存单元的内容
注:我们看到的内存中的内容,在不同的计算机中是不一样的,也可能每次用debug看到的内容都不相同,因为我们用debug看到的都是原来就在内存中的内容,这些内容受随时都有可能变化的系统环境的影响,当然也可以改变内存、寄存器中的内容

输出的三部分内容
一、左
每行的起始地址
二、中
从指定地址开始128个内存单元的内容,用十六进制格式输出,每行输出16的整数倍的地址开始,最多输出16个单元的内容。从图中我可以知道,内存500:0单元中的内容是06H,内存500:20单元中的内容是07H
每行中的【-】是用来分割的,前后分为各8个单元
三、右
每个内存单元中的数据对应的可显示的ASCII码字符,没有对应的ASCII字符时,debug会用【.】来代替
E:修改内存单元的内容
使用e命令修改单元的内容
一、e 1000:0 5 1 2 3 4 5 修改一段
二、e 1000:0 单个修改
单个修改的时候单击回车修改结束,单击空格修改下一个
三、e 1000:0 5 E 'E' 'E' E E 向内存中写入字符

U:将内存中的机器码转换为汇编指令
u 1000:0 从1000:0开始转换为汇编指令

输出分为3个部分,每一条机器指令的地址、机器指令、机器指令所对应的汇编指令
机器指令的地址 机器指令 机器指令对应的汇编指令
T:逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容
可以通过e命令写入指令太麻烦了懒得细看,跳过
通过t可以执行写入的指令
A:将指令直接汇编成机器码输入到内存中

浙公网安备 33010602011771号