常用汇编指令介绍

一、常用寄存器(64位)

寄存器 名称 用途
RAX 累加寄存器(Accumulator) 常用于乘、除法和函数返回值
RBX

基址寄存器

(Base)

常做内存数据的指针,以它为基址来访问内存
RCX 计数器寄存器(Counter) 常做字符串和循环操作中的计数器
RDX 数据寄存器(Data) 常用于乘、除法和I/O指针
RSI 来源索引寄存器(Source Index) 常做内存数据指针和源字符串指针
RDI 目的索引寄存器(Destination Index) 常做内存数据指针和目的字符串指针
RSP 堆栈指针寄存器(Stack Point) 只做堆栈的栈顶指针,不能用于算术运算和数据传送
RBP 基址指针寄存器(Base Point) 只做堆栈指针,可以访问堆栈内任意地址,经常用于中转ESP中的数据,也常以它为基址来访问堆栈,不能用于算术运算与数据传送
RIP 程序指令寄存器(Instruction Point) 指向下一条待执行指令的地址
R8/R9 --- 64位新增加的寄存器,用于函数参数

R10/R11/R12

/R13/R14/R15

--- 64位新增加的寄存器,用于数据存储
//RAX、EAX、AX、AH、AL是同一个寄存器,区别在于表示的范围不一样
//RAX:64位寄存器,EAX:32位寄存器,AX:16位,AH:高8位,AL:低8位
|63..32|31..16|15-8|7-0|        
               |AH.|AL.|
               |AX.....|
       |EAX............|
|RAX...................|

二、数据传送指令

指令 名称 用法 备注
MOV 传送指令 mov dest,src dest = src,传送字或字节

movsx dest,src 先符号扩展,再传送
movzx dest,src 先零扩展,再传送
PUSH 进栈指令 push src 把源操作数src压入堆栈
POP 出栈指令 pop dest 从栈顶弹出字数据到dest
LEA/LDS/LES 地址传送指令 lea reg,oprd 将操作数oprd的有效地址传送到16位寄存器reg,如lea ax,[si+2]
lds reg,oprd 把操作数OPRD存储的32位数据的高16位(段地址)送至DS,低16位(偏移地址)送至16位寄存器REG
les reg,oprd 把操作数OPRD存储的32位数据的高16位(段地址)送至ES,低16位(偏移地址)送至16位寄存器REG

三、算术运算指令

指令 名称 用法 备注
ADD 加法指令 add oprd1,oprd2  oprd1 =  oprd1+oprd2
adc oprd1,oprd2 带进位的加法,oprd1 =  oprd1+oprd2+CF
SUB 减法指令 sub oprd1,oprd2 oprd1 =  oprd1-oprd2
INC 加1操作 inc oprd oprd = oprd+1
DEC 减1操作 dec oprd oprd = oprd-1
NEG 取反指令 neg oprd oprd = -oprd
CMP 比较指令 cmp oprd1,oprd2 计算oprd1-oprd2,结果不传送给oprd1,根据比较结果进行后续的跳转
MUL 乘法指令 mul oprd 无符号乘法,将OPRD与AX(16位)或AL(8位)中的操作数相乘,结果保存在DX:AX(高16位+低16位)中或AX(16位)中

imul oprd

有符号乘法,将OPRD与AX(16位)或AL(8位)中的操作数相乘,结果保存在DX:AX(高16位+低16位)中或AX(16位)中

DIV

除法指令 div oprd 无符号除法,OPRD为除数,被除数为AX(16位)或AL(8位)中的操作数,结果保存在DX:AX(高16位+低16位)中或AX(16位)中
idiv oprd 有符号除法,OPRD为除数,被除数为AX(16位)或AL(8位)中的操作数,结果保存在DX:AX(高16位+低16位)中或AX(16位)中
CBW/CWB 符号扩展指令 cbw 把寄存器AL中的符号位扩展到寄存器AH(8位)
cwb 把寄存器AX中的符号位扩展到寄存器DX(16位)

四、逻辑运算和移位指令

指令 名称 用法 备注
NOT
AND
OR
XOR
TEST
SAL/SHL
SAR/SHR

你可能感兴趣的:(模糊测试,汇编)