汇编debug中的常用指令,以及一些常用寄存器的使用方法整理,仅一些笔记,不喜勿喷

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41550842/article/details/78945789
r命令:
查看各寄存器的设置情况


D命令:
查看内存中的内容


E命令:
改写内存中的内容


u命令:
查看其它指令的执行情况,将内存中的机器指令翻译成汇编指令


t命令:
单步执行程序中的每一条指令,并观察每条指令的执行结果


p命令:
到了int 21h时程序要返回,用此命令


q命令:
退出debug




8086计算机中的CPU的寄存器有14个:AX , BX , CX , DX , SI , DI 
SP , BP , IP , CS ,DS ,ES , SS , PSW
所有寄存器都是16位的
AX , BX ,CX ,DX 存放一般性数据,是通用寄存器


8086CPU的AX ,BX ,CX , DX这4个寄存器都可分为两个可独立使用的8位寄存器来使用:
AX 可分为 AH 和 AL
BX 可分为 BH 和 BL
CX,DX同理


8086CPU有4个段寄存器:CS , DS , ES ,SS
CS为代码段寄存器,IP为指令指针寄存器
转移指令jmp可以修改CS,IP
如jmp 2AE3:0003,执行后:CS = 2AE3H , IP = 0003H ,CPU将从2AE33H处读取指令
若想修改IP的内容,可用“jmp 某一合法寄存器”的指令完成:
如 jmp ax,指令执行前:ax = 1000H , CS=2000H,IP = 0003H
      执行后:ax = 1000H , CS=2000H,IP = 1000H
DS寄存器,通常用来存放要访问数据的段地址
8086不支持直接将数据传入段寄存器,所以要将某个数据的段地址传入ds,一般要通过另一个寄存器中转,如bx


8086计算机常用的寄存器
AX , BX , CX , DX ,SP, BP , SI , DI
DS , ES , SS


CX中存放的是程序的长度
DS中存放程序所在内存区的段地址
CS:pc命令的段地址
IP: pc命令的偏移地址


地址传送指令:lea
如:LEA BX,BLOCK;将BLOCK的有效地址传送到BX中(16位)




跳转指令:jmp,jz,jnz......
jmp:无条件跳转
jz:为0则跳转
JNZ :不为零则跳转


*******************************************************************************
test属于逻辑运算指令
功能: 执行BIT与BIT之间的逻辑运算
     测试(两操作数作与运算,仅修改标志位,不回送结果). 
Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。TEST AX,BX 与 AND AX,BX 命令有相同效果
语法: TEST r/m,r/m/data
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0)
运用举例:
1.Test用来测试一个位,例如寄存器:
test eax, 100b;          b后缀意为二进制
jnz  ******;             如果eax右数第三个位为1,jnz将会跳转
我是这样想的,jnz跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置位,即逻辑与结果为1.
2.Test的一个非常普遍的用法是用来测试一方寄存器是否为空:
test ecx, ecx
jz somewhere
如果ecx为零,设置ZF零标志为1,Jz跳转
*******************************************************************************



猜你喜欢

转载自blog.csdn.net/qq_41550842/article/details/78945789