x86汇编指令总结

汇编语言命令总结

寄存器标志位

标志寄存器标志意义
ZF零标志位记录相关指令执行后,其结果是0,则ZF = 1。
PF奇偶校验位记录相关指令执行后,如果其结果最低有效字节中所有位数中1的个数是否为偶数,如果是偶数PF= 1
SF符号标志位记录相关结果执行后,其结果为负,则 SF= 1
CF进位标志位当进行无符号计算时,记录最高有效位向更高位的进位值,或者错位值
OF溢出标志位是对有符号数而言

跳转指令

指令功能例子原理
je等于则转移cmp eax,0x05h; je address结果为0,相等, ZF=1,则转移
jne不等于则转移cmp eax, 0x05h; jne address结果不为0,不相等 ZF = 0 ,则转移
jz等于0 则转移test eax,eax结果为0, ZF = 1,则转移
jnz不等于0,则转移test eax,ebx结果不为 0, ZF = 1,则转移
jg有符号大于,则转移ZF=0 and SF=OF
jng有符号不大于,则跳转ZF=1 or SF 不等于 OF
jge有符号大于等于,则跳转SF = OF
jnge有符号不大于等于,则跳转SF 不等于 OF
jl有符号小于则跳转SF 不等于 OF
jnl有符号不小于则跳转SF = OF
jle有符号小于等于则跳转ZF=1 or SF 不等于 OF
jnle有符号不小于等于则跳转ZF=0 and SF=OF
Jb无符号小于则跳转CF=1
jnb无符号不小于则跳转CF=1 or ZF=1
jbe无符号小于等于则跳转CF=1 or ZF=1
jnbe无符号不小于等于则跳转CF=0 and ZF=0
Ja无符号大于则跳转CF=0 and ZF=0
jna无符号不大于则跳转CF=1 or ZF=1
jae无符号大于等于则跳转CF=0
jnae无符号不大于等于则跳转CF=1
指令功能例子解释状态值是否改变影响状态位
XOR异或XOR eax,eax清空 eax 值
test测试值是否为空text eax,eaxeax自身进行“与”操作,只执行不保存运算结果0 ==> ZF = 1, 1 ===> ZF = 0
enter维护栈指令enter ==>“push ebp;mov ebp,esp;sub esp,xxx”保存现在的bp寄存器,将当前的sp寄存器值保存到bp中,并获取当前临时变量的空间
leave维护栈指令leave ==> “add esp,XXX;pop ebp”清除子程序中的临时变量,并且恢复ebp寄存器
retn近返回指令retn [reg/立即数]相当于 pop ip; sp = sp + [reg/立即数]
retf远返回指令retf [reg/立即数]相当于 pop ip;pop CS; sp = sp + [reg/立即数]
lea取偏移地址lea ax,[1000H]将源操作数[1000H]的偏移地址1000H送至ax

算数指令

指令功能例子默认取寄存区默认存放寄存器影响标志位是否改变内存值
add进行加法运算add eax,ebx;寄存器或者立即数寄存器或者内存ZF,CF,OF
sub进行减法运算sub eax,ebx;寄存器或者立即数寄存器或者内存ZF,CF,OF,SF
inc自增运算inc eaxOF,CF
dec自减运算dec eaxOF,CF
mul/imul乘法比较复杂看下面
div/idiv乘法比较复杂看下面

DIV (unsigned divide) 无符号数除法

格式:DIV SRC/IDIV SRC

两个指令操作相同,DIV是无符号出发,IDIV是带符号除法:
执行的操作:
  字节操作:16位被除数在AX,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中。表示为

(AL)<-(AX)/(SRC) 的商
   (AH) <-(AX)/(SRC) 的余数

字操作:32位被除数放在DX,AX中。其中DX为高位字,16位除数为源操作数,结果的16位端在AX中,16位余数在DX中。表示为
  (AX)<-(DX,AX)/(SRC) 的商
  (DX)<-(DX,AX)/(SRC) 的余数

双字操作:64位被除数在EDX,EAX中,其中EDX为高位双字,32位除数为源操作数,结果的32位商在EAX中,32位余数在EDX中,表示为
  (EAX)<-(EDX,EAX)/(SRC) 的商
  (EDX)<-(EDX,EAX)/(SRC) 的余数。
商和余数均为无符号数。

参数约定

64位:

参数顺序保存参数位置浮点型保存参数位置
1RCXXMM0
2RDXXMM1
3R8XMM2
4R9XMM3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值