数据传输指令
- MOV: 将数据从源操作数传输到目的操作数
示例:MOV AX, BX
(将 BX 寄存器的值传输到 AX 寄存器) - PUSH: 将数据压入堆栈
示例:PUSH AX
(将 AX 寄存器的值压入堆栈) - POP: 将堆栈顶的数据弹出
示例:POP AX
(将堆栈顶的值弹出到 AX 寄存器) - XCHG: 交换两个操作数的值
示例:XCHG AX, BX
(交换 AX 和 BX 寄存器的值)
算术运算指令
- ADD: 执行加法
示例:ADD AX, BX
(将 AX 和 BX 的值相加,结果存入 AX) - SUB: 执行减法
示例:SUB AX, BX
(将 BX 从 AX 中减去,结果存入 AX) - MUL: 无符号乘法
示例:MUL BX
(AX 乘以 BX,结果存入 AX) - DIV: 无符号除法
示例:DIV BX
(AX 除以 BX,商存入 AX,余数存入 DX) - INC: 将操作数加 1
示例:INC AX
(AX 的值加 1) - DEC: 将操作数减 1
示例:DEC AX
(AX 的值减 1)
逻辑运算指令
- AND: 按位与
示例:AND AX, BX
(将 AX 和 BX 按位与,结果存入 AX) - OR: 按位或
示例:OR AX, BX
(将 AX 和 BX 按位或,结果存入 AX) - XOR: 按位异或
示例:XOR AX, BX
(将 AX 和 BX 按位异或,结果存入 AX) - NOT: 按位取反
示例:NOT AX
(将 AX 的值按位取反)
比较和跳转指令
- CMP: 比较两个操作数
示例:CMP AX, BX
(比较 AX 和 BX,结果影响标志位) - JMP: 无条件跳转到指定位置
示例:JMP LABEL
(跳转到标签LABEL
所指向的位置) - JE/JZ: 等于时跳转(等价于零标志位被置位)
示例:JE LABEL
(如果相等,跳转到LABEL
) - JNE/JNZ: 不等时跳转(零标志位未置位)
示例:JNE LABEL
(如果不等,跳转到LABEL
) - JG/JNLE: 大于时跳转
示例:JG LABEL
(如果大于,跳转到LABEL
) - JL/JNGE: 小于时跳转
示例:JL LABEL
(如果小于,跳转到LABEL
)
数据转换指令
-
CBW: 字节转换为字
示例:CBW
(将 AL 寄存器的符号扩展到 AX) -
CWD: 字转换为双字
示例:CWD
(将 AX 寄存器的符号扩展到 DX) -
CDQ: 双字转换为四字
示例:CDQ
(将 EAX 的符号扩展到 EDX)
位移指令
- SHL: 左移位
示例:SHL AX, 1
(AX 左移 1 位) - SHR: 右移位(无符号)
示例:SHR AX, 1
(AX 右移 1 位) - SAR: 算术右移(保留符号位)
示例:SAR AX, 1
(AX 算术右移 1 位)
系统指令
- NOP: 空指令(不做任何操作)
示例:NOP
- INT: 软中断指令
示例:INT 21H
(调用 DOS 中断 21H)
扩展算术运算指令
- ADC: 带进位的加法
示例:ADC AX, BX
(AX 和 BX 相加,并加上进位标志位的值) - SBB: 带借位的减法
示例:SBB AX, BX
(AX 和 BX 相减,并减去借位标志位的值) - NEG: 取反运算
示例:NEG AX
(将 AX 的值取反)
位操作指令
- ROL: 循环左移
示例:ROL AX, 1
(AX 循环左移 1 位) - ROR: 循环右移
示例:ROR AX, 1
(AX 循环右移 1 位) - RCL: 带进位的循环左移
示例:RCL AX, 1
(AX 循环左移 1 位,并考虑进位标志位) - RCR: 带进位的循环右移
示例:RCR AX, 1
(AX 循环右移 1 位,并考虑进位标志位)
字符串操作指令
-
MOVSB: 将字节从源字符串复制到目标字符串
示例:MOVSB
(将 DS指向的字节复制到 ES指向的字节)
-
MOVSW: 将字从源字符串复制到目标字符串
示例:MOVSW
(将 DS指向的字复制到 ES
指向的字)
-
STOSB: 将 AL 中的字节存储到 ES
指向的位置
示例:
STOSB
(将 AL 中的字节存储到 ES)
-
STOSW: 将 AX 中的字存储到 ES
指向的位置
示例:
STOSW
(将 AX 中的字存储到 ES)
-
LODSB: 将 DS
指向的字节加载到 AL
示例:
LODSB
(将 DS指向的字节加载到 AL)
-
LODSW: 将 DS
指向的字加载到 AX
示例:
LODSW
(将 DS指向的字加载到 AX)
-
CMPSB: 比较两个字节字符串
示例:CMPSB
(比较 DS和 ES指向的字节) -
CMPSW: 比较两个字字符串
示例:CMPSW
(比较 DS和 ES指向的字) -
SCASB: 扫描字符串寻找 AL 中的字节
示例:SCASB
(扫描 ES,寻找与 AL 相等的字节) -
SCASW: 扫描字符串寻找 AX 中的字
示例:SCASW
(扫描 ES,寻找与 AX 相等的字)
控制流指令
- CALL: 调用子程序
示例:CALL SUBROUTINE
(调用子程序,跳转到标签SUBROUTINE
) - RET: 从子程序返回
示例:RET
(从子程序返回到调用点) - LOOP: 循环指令,CX 计数器为 0 时退出
示例:LOOP LABEL
(CX 减 1,若不为 0 则跳转到LABEL
) - LOOPE: 条件循环,当 CX 不为 0 且零标志位被置位时跳转
示例:LOOPE LABEL
(CX 减 1,若不为 0 且 ZF=1 则跳转到LABEL
) - LOOPNE: 条件循环,当 CX 不为 0 且零标志位未置位时跳转
示例:LOOPNE LABEL
(CX 减 1,若不为 0 且 ZF=0 则跳转到LABEL
)
中断与处理器控制指令
- CLI: 清除中断标志位(禁用中断)
示例:CLI
(关闭硬件中断) - STI: 设置中断标志位(允许中断)
示例:STI
(开启硬件中断) - HLT: 停机指令,停止 CPU 执行,直到下一个中断到来
示例:HLT
- WAIT: 等待指令,暂停 CPU 直到硬件条件满足
示例:WAIT
- NOP: 空指令,不做任何操作
示例:NOP
条件跳转指令
- JA/JNBE: 大于时跳转
示例:JA LABEL
(如果上次比较结果大于,跳转到LABEL
) - JAE/JNB: 大于等于时跳转
示例:JAE LABEL
(如果上次比较结果大于等于,跳转到LABEL
) - JB/JNAE: 小于时跳转
示例:JB LABEL
(如果上次比较结果小于,跳转到LABEL
) - JBE/JNA: 小于等于时跳转
示例:JBE LABEL
(如果上次比较结果小于等于,跳转到LABEL
)
专用寄存器访问指令
- IN: 从 I/O 端口输入数据
示例:IN AL, DX
(从端口 DX 读取一个字节到 AL) - OUT: 向 I/O 端口输出数据
示例:OUT DX, AL
(将 AL 中的数据输出到端口 DX) - LGDT: 加载全局描述符表寄存器
示例:LGDT [MEMORY_ADDRESS]
(加载内存中的全局描述符表到 GDTR) - LIDT: 加载中断描述符表寄存器
示例:LIDT [MEMORY_ADDRESS]
(加载内存中的中断描述符表到 IDTR)