汇编指令

由 ssnhy13 发布

汇编指令

NOP

表示 No Operation,机器码为 0x90,没有操作数,执行这条指令时 CPU 什么事都不干。

PUSH

PUSH 指令将数据压入栈中。
指令格式为 push x。
x 可取 imm8,imm16,imm32,r/m16,r/m32,r/m64。
栈指针寄存器 ESP(RSP) 自动递减

POP

POP 指令从栈中弹数据。
指令格式为 pop x。
x 可取 r/m16, r/m32, r/m64。
栈指针寄存器 ESP(RSP) 自动递增。

MOV

MOV 指令将数据从源操作数移动到目的操作数。
指令格式为 mov x1, x2。意为从 x2 移动数据到 x1。
x1, x2 可以是:
寄存器到寄存器
内存到寄存器,寄存器到内存
立即数到寄存器,立即数到内存
不能从内存直接到内存。

LEA

LEA 指令用于载入有效地址。
指令格式为 lea x1, x2。
x1 可以是 r16/32/64,x2 是内存地址,常用 [] 语法形式,意为引用求值。
常用于指针运算,有时用于数值计算。

ADD

ADD 指令计算加法操作。
指令格式为 add x1, x2。
x1,x2 可以是 r/m16,r/m32,r/m64,x2 还可以是立即数,但二者不能同时是内存操作数。
指令的计算结果将影响 eflags 寄存器,修改 OF, SF, ZF, AF, PF, CF 标志位。

SUB

SUB 指令计算减法操作。
指令格式为 sub x1, x2。
x1,x2 可以是 r/m16,r/m32,r/m64,x2 还可以是立即数,但二者不能同时是内存操作数。
指令的计算结果将影响 eflags 寄存器,修改 OF, SF, ZF, AF, PF, CF 标志位。

IML/MUL

IMUL 指令用于实现有符号数的乘法运算。
三种指令格式:
imul r/m32 ; edx:eax = eax r/m32
imul reg, r/m32 ; reg = reg
r/m32
imul reg, r/m32, imm ; reg = r/m32 * imm
MUL 指令是无符号乘法。

IDIV/DIV

DIV 指令用于实现无符号数的除法运算。
两种指令格式:
无符号除法,div ax, r/m8 ; ax 除以 r/m8,al 是商,ah 是余数
无符号除法,div eax, r/m32 ; edx:eax 除以 r/m32,eax 是商,edx 是余数
若被除数是 DWORD,在指令执行前 edx 被置为 0。
若除数是 0,则抛出除零异常。

AND

AND 指令实现操作数的逻辑与运算。
指令格式为 and x1, x2。
x1, x2 可以是 r/m16, r/m32, r/m64, x2 还可以是立即数,但二者不能同时是内存操作数。

OR

OR 指令实现操作数的逻辑或运算。
指令格式为 or x1, x2。
x1, x2 可以是 r/m16, r/m32, r/m64, x2 还可以是立即数,但二者不能同时是内存操作数。

XOR

XOR 指令实现操作数的异或运算。
指令格式为 xor x1, x2。
x1, x2 可以是 r/m16, r/m32, r/m64, x2 还可以是立即数,但二者不能同时是内存操作数。

NOT

NOT指令实现操作数的逻辑非运算


0条评论

评论已关闭