CE 的常用汇编语句

  1. 1. 常用
  2. 2. 跳转
  3. 3. 赋值
  4. 4. 运算
  5. 5. 逻辑运算

常用

1
2
3
4
5
6
7
8
9
10
11
mov 复制数据
cmp 比较数据
jmp 直接跳转
je 如果相等就跳转
jne 如果不相等就跳转
还有各种 j** 条件跳转指令
fld 把浮点数推进fpu栈
fstp 把fpu栈顶端数据弹出并保存在指定地址
xor 异或运算,一般用来把常用寄存器数值清零,当然 mov xxx,0也是一样的效果
xorps 同上但只适用于xmm寄存器
movss 同mov,但是是用于xmm寄存器

跳转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
je/jz:    标志寄存器的标志的逻辑含义为相等,则强制跳转 

jne/jnz: 标志为不相等,则强制跳转

(注:接下来会出现符号的概念,一般游戏不会有负数,所以有符号可以不看)

ja: 无符号,其标志为大于,则跳转

jg: 有符号,其标志为大于,则跳转

jna: 无符号,其标志为不大于,则跳转

jng: 有符号,其标志为不大于,则跳转

jb: 无符号,其标志为小于,则跳转

jl: 有符号,其标志为小于,则跳转

jnb: 无符号,其标志为不小于,则跳转

jnl: 有符号,其标志为不小于,则跳转

jae: 无符号,其标志为大于等于,则跳转

jge: 有符号,其标志为大于等于,则跳转

jnae: 无符号,其标志为不大于等于,则跳转

jnge: 有符号,其标志为不大于等于,则跳转

// 无条件跳转
JMP 无条件转移指令
CALL 过程调用
RET/RETF 过程返回.

// 有条件跳转


赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
MOV      送字或字节.  

MOVSX 先符号扩展,再传送.

MOVZX 先零扩展,再传送.

PUSH 把字压入堆栈.

POP 把字弹出堆栈.

PUSHA 把 AX,CX,DX,BX,SP,BP,SI,DI 依次压入堆栈.

POPA 把 DI,SI,BP,SP,BX,DX,CX,AX 依次弹出堆栈.

PUSHAD 把 EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 依次压入堆栈.

POPAD 把 EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 依次弹出堆栈.

BSWAP 交换32位寄存器里字节的顺序

XCHG 交换字或字节.(至少有一个操作数为寄存器,段寄存器不可作为操作数)

CMPXCHG 比较并交换操作数.(第二个操作数必须为累加器 AL/AX/EAX)

XADD 先交换再累加.(结果在第一个操作数里)

XLAT 字节查表转换.{BX 指向一张 256 字节的表的起点,AL 为表的索引值(0-255,即 0-FFH);返回 AL 为查表结果.([BX+AL]->AL) }

运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
ADD     加法.  

ADC 带进位加法.

INC 加 1.

AAA 加法的 ASCII 码调整.

DAA 加法的十进制调整.

SUB 减法.

SBB 带借位减法.

DEC 减 1.

NEG 求反(以 0 减之).

CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).

AAS 减法的 ASCII 码调整.

DAS 减法的十进制调整.

MUL 无符号乘法.结果回送 AH 和 AL(字节运算),或 DX 和 AX(字运算),

IMUL 整数乘法.结果回送 AH 和 AL(字节运算),或 DX 和 AX(字运算),

AAM 乘法的 ASCII 码调整.

DIV 无符号除法.结果回送:商回送 AL,余数回送 AH, (字节运算);或 商回送 AX,余数

回送 DX, (字运算).

IDIV 整数除法.结果回送:商回送 AL,余数回送 AH, (字节运算);或 商回送 AX,余数回

送 DX, (字运算).

AAD 除法的 ASCII 码调整.

CBW 字节转换为字. (把AL中字节的符号扩展到AH 中去)

CWD 字转换为双字. (把AX 中的字的符号扩展到DX中去)

CWDE 字转换为双字. (把 AX 中的字符号扩展到 EAX中去)

CDQ 双字扩展. (把 EAX 中的字的符号扩展到 EDX 中去)

逻辑运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
AND     与运算.  

OR 或运算.

XOR 异或运算.

NOT 取反.

TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).

SHL 逻辑左移.

SAL 算术左移.(=SHL)

SHR 逻辑右移.

SAR 算术右移.(=SHR)

ROL 循环左移.

ROR 循环右移.

RCL 通过进位的循环左移.

RCR 通过进位的循环右移.

以上八种移位指令,其移位次数可达255次.

移位一次时, 可直接用操作码. 如 SHL AX,1.

移位>1次时, 则由寄存器CL给出移位次数.

如 MOV CL,04 SHL AX,CL