Post

汇编基础

汇编基础

汇编语言

条件码

条件码解释描述
CF进位标志最高位产生了进位(可检查无符号的溢出)
ZF零标志结果为0
SF符号标志结果为负数
OF溢出标志补码溢出
  • 比较指令cmp
    • 根据两个操作数之差(sub)来设置条件码,不改变目的寄存器的值
  • 测试指令test
    • 将两个操作数按位与(and)来设置条件码,不改变目的寄存器的值
    • test eax, eax:一般用来判断eax的值是否为0,如果是的话,将ZF标志位置为1

跳转指令

指令解释标志位
jmp无条件跳转
je/jz相等/零ZF=1
jne/jnz不相等/非零ZF=0
js负数SF=1
jns非负数SF=0
jc进位跳转CF=1
jnc无进位跳转CF=0
jo溢出跳转OF=1
jno无溢出跳转OF=0
指令解释(有符号)
jg大于
jge大于等于
jl小于
jle小于等于
指令解释(无符号)
ja大于
jae大于等于
jb小于
jbe小于等于

字节数

字符解释
BYTE1字节
WORD2字节
DWORD4字节
QWORD8字节

存储方式

  • 大端存储
    • 数据的高位字节存储在低地址内存中,低位字节存储在高地址内存中
  • 小端存储
    • 数据的高位字节存储在高地址内存中,低位字节存储在低地址内存中
    • x86架构的处理器(如Intel和AMD)以及ARM架构的处理器通常采用小端存储

函数调用标准

约定类型_cdecl(C规范)pascalstdcallFastcall
参数传递顺序从右到左从左到右从右到左使用寄存器和栈
平衡栈者调用者子程序子程序子程序
允许使用VARARG 

运算优化

整数的加减乘除

  • 使用lea指令进行优化
This post is licensed under CC BY 4.0 by the author.