汇编基础1.2——常用汇编指令

MOV指令

将逗号右边的值赋给逗号左边

//r:通用寄存器,r8表示8位通用寄存器
//m:内存,m8表示8位内存
//imm:立即数,imm8表示8位立即数

MOV r/m8,r8			//将逗号右边 8位通用寄存器 赋值给逗号左边的 8位通用寄存器 或 内存
MOV r/m16,r16
MOV r/m32,r32

MOV r8,m/imm8		//将逗号右边 8位内存 或 立即数 赋值给逗号左边的 8位通用寄存器
MOV r16,m/imm16
MOV r32,m/imm32

注:指令用法可在Inter白皮书查阅

ADD指令

将逗号两边的值相加后,赋值给逗号左边

SUB指令

将逗号两边的值相减后,赋值给逗号左边

AND指令

与运算

OR指令

或运算

XOR指令

异或运算

//r:通用寄存器,r8表示8位通用寄存器
//m:内存,m8表示8位内存
//imm:立即数,imm8表示8位立即数

XOR r/m8,r/imm8		//将逗号右边 8位通用寄存器或立即数 和逗号左边的 8位通用寄存器或内存 做异或运算
XOR r/m16,r/imm16
XOR r/m32,r/imm32

XOR r/m16,imm8		//将逗号右边 8位立即数 和逗号左边的 16位通用寄存器或内存 做异或运算
XOR r/m32,imm8

XOR r8,r/m8			//将逗号右边 8位通用寄存器或内存 和逗号左边的 8位通用寄存器 做异或运算
XOR r16,r/m16
XOR r32,r/m32

NOT指令

非运算

NOT r/m8
NOT r/m16
NOT r/m32

MOVS指令

将数据从内存移动到内存

//BYTE = unsigned char		1字节
//WORD = unsigned short		2字节
//DWORD = unsigned long		4字节

MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]	//缩写 MOVSB
MOVS WORD PTR ES:[EDI],BYTE PTR DS:[ESI]	//缩写 MOVSW
MOVS DWORD PTR ES:[EDI],BYTE PTR DS:[ESI]	//缩写 MOVSD

//例:
MOV EDI,12FFD8
MOV ESI,12FFD0
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]

注:EFL(标志寄存器)以二进制表示时的编号第10位(DF位):
为0时:MOVS每执行一次,EDI,ESI各 + {1,2,4}
为1时:MOVS每执行一次,EDI,ESI各 - {1,2,4}

STOS指令

将 AL/ AX/ EAX 的值储存到 [EDI] 指定的内存单元

STOS BYTE PTR ES:[EDI]		//缩写 STOSB
STOS WORD PTR ES:[EDI]		//缩写 STOSW
STOS DWORD PTR ES:[EDI]		//缩写 STOSD

注:EFL(标志寄存器)以二进制表示时的编号第10位(DF位):
为0时:MOVS每执行一次,EDI + {1,2,4}
为1时:MOVS每执行一次,EDI - {1,2,4}

REP指令

按ECX(计数寄存器)中指定的次数重复执行字符串指令

//例:
MOV ECX,10	//16进制
REP MOVSD	//重复执行MOVSD指令16次
REP STOSD	//重复执行STOSD指令16次

注:每执行一次REP指令,ECX - 1

猜你喜欢

转载自blog.csdn.net/Dugege007/article/details/107138991
今日推荐