汇编语言(Assembly Language)是一种低级编程语言,它直接对应计算机的机器语言,通过指令集(Instruction Set)来描述操作。汇编语言的指令通常以MOV、ADD、SUB、JMP等关键字开头,用于操作寄存器、内存、数据等。
下面是一些常见的汇编语言指令及其用途,以x86架构为例(如MASM、TASM、NASM等汇编器):
✅ 常见汇编语言指令
1. 数据操作指令
-
MOV:移动数据(移动寄存器、内存、寄存器到寄存器)
MOV AX, 1000h ; 将 1000h(即 4096)赋值给寄存器 AX MOV [BX], 1000h ; 将 1000h 写入内存地址 BX MOV DX, 1234h ; 将 1234h 赋值给寄存器 DX -
ADD:加法操作
ADD AX, BX ; AX = AX + BX ADD [SI], CX ; CX 的值加到内存地址 SI 的位置 -
SUB:减法操作
SUB AX, BX ; AX = AX - BX SUB [DI], DX ; DX 的值减到内存地址 DI 的位置 -
AND:按位与
AND AL, 0Fh ; AL = AL & 0Fh -
OR:按位或
OR AH, 0FFh ; AH = AH | 0FFh -
XOR:按位异或
XOR CL, DL ; CL = CL ^ DL -
SHL:左移(乘以 2)
SHL AX, 1 ; AX = AX << 1 -
SHR:右移(除以 2)
SHR BX, 1 ; BX = BX >> 1
2. 控制流指令
-
JMP:跳转
JMP 100h ; 跳转到地址 100h JMP DWORD PTR [BX] ; 跳转到内存地址 BX 的内容 -
CALL:调用子程序
CALL SubProc ; 调用子程序 SubProc -
RET:返回
RET ; 返回到调用者 -
CMP:比较(不改变数据)
CMP AX, BX ; AX 和 BX 相等吗? -
JZ:跳转 if zero
JZ ZeroFlag ; 如果 ZeroFlag 为 1,跳转 -
JNZ:跳转 if not zero
JNZ NonZeroFlag ; 如果 NonZeroFlag 为 1,跳转 -
JA:跳转 if above
JA 100h ; 如果 AX > BX,跳转到 100h
3. 寄存器操作
-
MOV:移动寄存器到寄存器
MOV AL, BL ; AL = BL -
PUSH:压栈
PUSH AX ; 将 AX 压入栈 -
POP:弹栈
POP BX ; 弹出栈顶内容到 BX -
CLI:清除中断标志
CLI ; 清除中断标志位 -
STI:设置中断标志
STI ; 设置中断标志位 -
CLI 和 STI 用于控制中断处理。
4. 内存操作
-
LEA:加载有效地址
LEA SI, [BX + 100h] ; SI = 地址 BX + 100h -
MOV:移动内存内容(与 MOV 类似,但用于内存)
-
MOVSB:移动字节(Memory to Memory)
MOVSB ; 从内存地址 SI 处读取一个字节,存入 DI -
MOVSW:移动字(Memory to Memory)
MOVSW ; 从内存地址 SI 处读取一个字,存入 DI -
MOVSD:移动双字(Memory to Memory)
MOVSD ; 从内存地址 SI 处读取一个双字,存入 DI