IA-32汇编语言笔记(14)—— IA32汇编指令小结

  • 记录汇编语言课笔记,可能有不正确的地方,欢迎指出
  • 教材《新概念汇编语言》—— 杨季文
  • 这篇文章是书前四章的所有指令的总结,基本涉及到所有逻辑处理所需的指令,掌握这些之后就可以写各种嵌入式汇编程序了,这里不包括bios函数调用或者中断之类的指令

文章目录

〇、思维导图

在这里插入图片描述

一、数据传输指令组

1. 传送指令

(1)MOV(普通传送指令)

在这里插入图片描述

2. 交换指令

(1)XCHG(交换指令)

在这里插入图片描述

3. 堆栈相关指令

(1)PUSH(进栈)

  • 8086汇编中,push/pop的一律是字,寄存器/存储单元/立即数参数可以直接写而不加word ptr前缀
  • 386之后支持了双字的push/pop,如果汇编程序中加了.386伪指令,就会默认push/pop双字。对于存储单元/立即数最好加word ptr/dword ptr前缀

在这里插入图片描述

(2)POP(出栈)

在这里插入图片描述

(3)PUSHA(16位通用寄存器全进栈指令)

在这里插入图片描述

(4)POPA(16位通用寄存器全出栈指令)

在这里插入图片描述

(5)PUSHAD(32位通用寄存器全进栈指令)

在这里插入图片描述

(6)POPAD(32位通用寄存器全出栈指令)

在这里插入图片描述

4. 符号扩展相关指令

(1)CBW(字节转换为字指令)

在这里插入图片描述

(2)CWD(字转换为双字指令)

在这里插入图片描述

(3)CWDE(字转换为双字指令)

在这里插入图片描述

(4)CDQ(双字转换为四字指令)

在这里插入图片描述

5. 扩展传送相关指令

(1)MOVSX(符号扩展传送)

在这里插入图片描述

(2)MOVZX(零扩展传送)

在这里插入图片描述

二、算数运算指令组

1. NEG(取负数指令)

2. CMP(比较指令)

在这里插入图片描述

3. 加法相关指令

(1)ADD(加法指令)

在这里插入图片描述

(2)ADC(带进位加)

在这里插入图片描述

4. 减法

(1)SUB(减法指令)

在这里插入图片描述

(2)SBB (带借位减)

在这里插入图片描述

5. 乘法

(1)无符号数乘法

1. MUL(无符号乘法指令)

在这里插入图片描述

(2)有符号数乘法

1. IMUL(单操作数乘法指令)

在这里插入图片描述

2. IMUL(双操作数乘法指令)
  • 双操作数和三操作数的结果可能溢出,若溢出就截掉高位

在这里插入图片描述

3. IMUL(三操作数乘法指令)
  • 双操作数和三操作数的结果可能溢出,若溢出就截掉高位

在这里插入图片描述

6. 除法

(1)DIV(无符号数除法指令)

在这里插入图片描述

(2)IDIV(有符号数除法指令)

在这里插入图片描述

7. 加一减一

(1)INC(加1指令)

在这里插入图片描述

(2)DEC(减1指令)

在这里插入图片描述

三、逻辑运算指令

1. NOT(否运算指令)

在这里插入图片描述

2. AND(与运算指令)

在这里插入图片描述

3. OR(或运算指令)

  • 常用OR EAX,EAX这样的方法判断是否为0
    在这里插入图片描述

4. XOR(异或运算指令)

在这里插入图片描述

5. TEST(按位测试指令)

  • test指令一般用来检测指定位上字符是否都为0
    在这里插入图片描述

四、移位指令组

1. SAL / SHL / SAR / SHR(一般移位指令)

在这里插入图片描述
在这里插入图片描述

2. ROR / ROL / RCR / RCL((带进位)循环移位指令)

在这里插入图片描述
在这里插入图片描述

3. SHLD / SHRD (双精度移位指令)

在这里插入图片描述
在这里插入图片描述

五、转移指令组

1. JMP(无条件转移)

在这里插入图片描述
在这里插入图片描述

2. Jcc(条件转移)

在这里插入图片描述

3. 循环相关指令

(1)LOOP(计数循环指令)

在这里插入图片描述

(2)LOOPE/LOOPZ(等于/全零循环指令)

在这里插入图片描述

(3)LOOPNE/LOOPNZ(不等于/全1循环指令)

  • 先减一比0,再比ZF。把ecx设-1,退出时not ecx值会比预期的小1。比如,用这个来算字符串长度,用 ‘\0’ 判断退出循环,长度会把 ‘\0’ 也算上

在这里插入图片描述

(4)JECXZ/JCXZ(计数器转移指令)

在这里插入图片描述

4. CALL(过程调用指令)

在这里插入图片描述

在这里插入图片描述

5. RET(返回指令)

在这里插入图片描述
在这里插入图片描述

六、字符串操作指令组

  1. 串地址:
    1. DS:ESI指向源串
    2. ES:EDI指向目的串
  2. 操作方向:
    1. DF=0,低地址 → 高地址
    2. DF=1,高地址 → 低地址

1. LODSB/LODSW/LODSD(字符串装入指令)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. STOSB/STOSW/STOSD(字符串存储指令)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. MOVSB/MOVSW/MOVSD(字符串传送指令)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. SCASB / SCASW / SCASD(字符串扫描指令)

在这里插入图片描述

5. CMPSB/ CMPSW/ CMPSD(字符串比较指令)

在这里插入图片描述

6. REP/REPE(REPZ)/REPNE(REPNZ)(重复操作前缀)

在这里插入图片描述

  • REPE(REPZ) / REPNE(REPNZ)的退出时机:以下这两组指令,当以ZF为基准退出时,会把最后使ZF改变的那次比较也计数(因为这次比较后ZF才改变)。比如,用这个来算字符串长度,用 ‘\0’ 判断退出循环,长度会把 ‘\0’ 也算上

在这里插入图片描述
在这里插入图片描述

七、位操作指令组

1. 位测试指令组

(1)BT(位测试指令)

在这里插入图片描述

(2)BTC(位测试并取反指令)

在这里插入图片描述

(3)BTR(位测试并复位指令)

在这里插入图片描述

(4)BTS(位测试并置位指令)

在这里插入图片描述

2. BSF / BSR (顺向/逆向位扫描指令)

在这里插入图片描述

八、条件设置指令组

1. SETcc(条件设置字节指令)

在这里插入图片描述

  • cc的取值如下
    在这里插入图片描述

九、其他指令

1. LEA(取有效地址指令)

在这里插入图片描述

2. LAHF/SAHF(状态标志操作指令)

在这里插入图片描述

3. CLC / STC / CMC(进位标志CF设置指令)

在这里插入图片描述

4. CLD /STD(方向标志DF操作指令)

在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云端FFF

所有博文免费阅读,求打赏鼓励~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值