常见X86架构汇编指令

数据传输指令

  • 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值