预备知识 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:将指令直接汇编成机器码输入到内存中

 

posted @ 2021-11-11 16:48  棋庙  阅读(385)  评论(0)    收藏  举报