当前位置:首页 > 汇编教程 - debug
这节是DEBUG,QQ你不是说好玩嘛,那咱就玩玩
在内存中你看到的内容也许和我的不一样,不怕,在不同的计算机中是不一样的,也可能每次用DEBUG看到的内容不一样,因为用DEBUG看到的都是原来就在内存中的内容,这些内容受随时都可能变化的系统环境影响。当然 也可以改变内存、寄存器中的内容。 Debug有N多命令,大部分都没用,只说有用的这几个 1、 进入:开始—>运行—>cmd—>debug 2、 命令:R、T、A、U
R:查看、改变CPU寄存器的内容
红框内的是标志寄存器的内容,还记得标志寄存器不?重新回忆一下: 15 1 0 14 13 12 11 溢出 10 方向 9 中断 IF DI 8 跟踪 TF 7 符号 SF PL 6 零 ZF 5 4 AF 3 2 奇偶 PF PE 1 0 进位 CF CY NC OF DF NV UP OV DN EI NG ZR NZ AC NA PO 白框内的东西是CS和IP在内存中的内容,注意:CS=1376,IP=0100,也就是说,内存1376:0100处的指令为CPU当前要读取、执行的指令。在所有寄存器的下方,debug还列出了CS:IP所指向的内存单元处所存放的机器码,并将它翻译为汇编指令。可以看到,CS:IP所只想的内存单元为1376:0100,此处存放的机器码为0000,对应的汇编指令为 ADD [BX+SI],AL(这条指令什么意思?不知道) DEBUG 输出的右下角还有个信息:“DS:0000=CD”,啥意思?不知道 还可以用R改变寄存器中的内容 看清了,上面AX=0000,改变之
首先输入“R AX”回车,会显示AX寄存器中的内容,再回车有个“:”后面输入你想改变的值,我输的是“4444”,再来个R看看什么结果。
D查看内存中的内容(D的格式很多,只介绍几个)
想知道内存10000H处的内容,可以用“D 段地址:偏移地址”的格式来查看,DEBUG将
列出从指定内存单元开始的128个内存单元的内容,在使用D:1000:0后,DEBUG列出了从1000:0~1000:7F中的内容。
中间白框内是从指定地址开始的128个内存单元的内容,用十六禁止的格式输出,每行的输出从16的整数倍地址开始,最多输出16个单元的内容,从图中我们可以知道,内存1000:0单元中的内容是17H,1000:1单元中的内容是4AH,注意黄框框中的“-”,他是将每行输出分为两部分,这样便于查看。前面是前8个单元,后面是后8个单元。右边红框是每个单元中数据对应的可显示的ASCII码字符,例如前3个中存放的是17H,4AH,B8H,他们对应的ASCII码字符分别是“.”“J”“.”,没有对应的可显示ASCII码,DEBUG就用“.”来显示。在使用“D 段地址:偏移地址”命令后,接着使用D命令,可列出后续的内容。 也可以用指定D命令的查看范围,此时采用“D 段地址:起始偏移地址 结尾偏移地址”的格式。比如要看“1000:0~1000:9”的内容,可采用“D 1000:0 9”
如果想看内存单元10000H中的内容,可使用下面的任何一种方法看到,因为下面的所有“段
地址:偏移地址”都表示10000H这一物理地址。
E命令改写内存中的内容
比如,将内存1000:0~1000:9单元中的内容分别写为0 1 2 3 4 5 6 7 8 9 可以用“E 起始地址 数据 数据 数据 数据 数据 ….”的格式来进行
先用D命令查看1000:0~1000:F单元的内容,再用E命令修改从1000:0开始的10个单元的内容,最后用D命令查看1000:0~1000:F中内容的变化。
A命令以汇编指令的形式在内存中写入机器指令
首先用A命令,以汇编语言从1000:0开始的内存单元中写入了几条指令,然后用D命令查看A命令的执行结果。可以看到,在使用A命令写入指令时,我们输入的是汇编指令,DEBUG将这些汇编指令翻译为对应的机器指令,将它们的机器码写入内存,使用A命令写入汇编指令时,在给出起始地址后直接回车就表示操作结束。
E命令向内存中写入机器码,用U命令查看内存中机器码的含义,用T命令执行内存中的机器码。
比如:要从内存1000:0单元开始写入这样的一段机器码: 机器码 对应的汇编指令 B80100 mov ax,0001 B90200 mov cx,0002 01c8 add ax,cx
先用E写入,然后用D查看,再用U执行,我懒,不写E了,直接D查看
用R修改CS和IP的内容,然后用T命令一条一条的执行
3
、
ASCII
码
表
共分享92篇相关文档