汇编语言:基于x86处理器考前笔记 | 第七章 整数运算

一、移位与循环移位指令

  1. 指令类型(都会改变 CF)
    • 逻辑移位 :SHL(逻辑左移)、SHR(逻辑右移)。例如,SHL 指令将操作数左移,++最低位补 0++ ,最高位进入进位标志 CF;SHR 指令右移时,++最高位补 0++,最低位进入 CF。
    • 算术移位 :SAL(算术左移)、SAR(算术右移)。与逻辑移位不同在于带符号,算术左移和逻辑左移在二进制位移动上相同,但++算术右移时,负数最高位补 1,正数补 0++,而逻辑右移一律补 0。
    • 循环移位 :ROL(循环左移)、ROR(循环右移)。循环左移时最低位以最高位填充,++最高位传送到 CF++ ;循环右移++反之++ ,且不丢弃数据,可用于将特定位移入 CF。
    • 带进位的循环移位 :RCL(带进位循环左移)、RCR(带进位循环右移)。在循环移位基础上保留 CF 原数据,移动方式类似循环移位。RCL al,3这里 3 是移动位数
      • 以 RCL 为例,数组高位移入 CF,CF 移入低位
    • 双精度移位 :SHLD(双精度左移)、SHRD(双精度右移),用于对双字数据的移位操作。SHLD 目的操作数,源操作数,1(次数)
  1. 应用示例
    • 位元乘除法:SHL 可实现位元乘法,如将 5(00000101)左移 1 位得 10(00001010),相当于乘以 2;SHR 可实现位元除法,如 32(00100000)右移 1 位得 16(00010000)。

二、乘法指令

  1. MUL 指令(无符号数乘法)
    • 操作数规则 :8 位操作数与 AL 寄存器相乘,结果存于 AX;16 位操作数与 AX 相乘,结果存于 DX:AX;32 位操作数与 EAX 相乘,结果存于 EDX:EAX。
    • 8 位:
    • 16 位:
    • 特点 :乘积是被乘数与乘数大小的 2 倍以防止溢出;会用到 CF 标志寄存器,乘积高半部分不为零则 CF 置 1;乘数和被乘数大小相同。例如,mov al,5h,mov bl,10h,mul bl 后 AX = 0050h,CF = 0。
  2. IMUL 指令(有符号数乘法)
    • 与 MUL 区别:保留乘积符号;有三种格式(单、双、三操作数);若乘积高半部分不是低半部分符号扩展,则 CF = 1、OF = 1,可据此忽略高半部分。如 mov al,48,mov imul b1 b1,4 后,ax = 00C0h,OF = 1。

三、除法指令

  1. DIV 指令(无符号数除法指令):被除数为 AX 时,除数为 reg/mem8,商存于 AL,余数存于 AH;被除数为 DX:AX 时,除数为 reg/mem16,商存于 AX,余数存于 DX;被除数为 EDX:EAX 时,除数为 reg/mem32,商存于 EAX,余数存于 EDX。如 mov ax,0083h,mov bl,2,div bl 后 AL = 41h,AH = 01h。
复制代码
- 示例 1(8 位除法):![](https://i-blog.csdnimg.cn/img_convert/1014ae9a3b01c9a4463a00e094fc28d5.png)
- 图示:![](https://i-blog.csdnimg.cn/img_convert/779c1bd7d40f71b0e99f181b9073b363.png)
- 示例 2(16 位除法):![](https://i-blog.csdnimg.cn/img_convert/51a9d2fdb90ad957ecf1d8e5ffae0c99.png)
  1. iDIV 指令(有符号数除法):执行前需进行符号扩展(如 CBW、CWD、CDQ 指令)。如.data wordVal SWORD -101,mov dx,0,mov ax, wordVal,cwd 后再进行除法操作。

四、扩展加减法

  1. ADC 指令 :格式与 ADD 类似,逻辑:目的操作数 = 目的操作数 + 源操作数 + 进位标志位的值,结果存于 2 倍大小的寄存器。如
  2. SBB 指令:目的操作数 = 目的操作数 - 源操作数 - 进位标志位的值。如 mov edx,7,mov eax,1,sub eax,2,sbb edx,0 实现了对无大小限制数的加减法操作。
相关推荐
91刘仁德2 小时前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http
柳鲲鹏4 小时前
老电脑X99安装WIN11 26H2总结、问题解决办法汇总
笔记
sunoo-2297 小时前
【ARM嵌入式学习笔记第十天】i.MX6ULL eLCDIF控制器驱动RGB LCD全解析(硬件原理+寄存器配置+裸机代码)
arm开发·笔记·学习
听风若依8 小时前
数据在内存中的存储-纸面笔记整理
c语言·笔记
xiaominngtongxue8 小时前
从中职技能节看实训教学的组织逻辑
笔记
杨逢昌工厂6S管理9 小时前
109-杨逢昌车间管理负熵循环:三环体系持续输出负熵的机制解析
经验分享·笔记·职场和发展·学习方法
inferno9 小时前
SVN学习笔记(二)
笔记·学习·svn
海绵宝宝转agent10 小时前
leetCode100算法开源笔记分享
笔记·算法
91刘仁德11 小时前
Linux网络编程从入门到实战:UDP/TCP协议与socket编程全解析
linux·网络·笔记·tcp/ip·udp
@Mike@11 小时前
13-数据库学习笔记(查询执行处理模型)
数据库·笔记·学习