汇编语言:基于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 实现了对无大小限制数的加减法操作。
相关推荐
摆烂z2 小时前
多模态大模型微调笔记
笔记
胡二拉二胡2 小时前
抗遗忘单词表深度评测:FSRS 算法与学练考闭环实测
经验分享·笔记
用户14036058193832 小时前
Phase A · Step 2:预训练权重与 Pipeline 验证准备
笔记
旖旎夜光4 小时前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控
金色光环5 小时前
概率论笔记:连续型随机变量函数的分布与尺度变换 连续型随机变量函数的分布:定义法与公式法推导
笔记·概率论
维克兜率天6 小时前
【维克】均值回归:跌多了会涨,涨多了会跌
开发语言·笔记·python·算法·均值算法·回归·量化
zhangrelay6 小时前
ROS2 Lyrical实验5导航Nav2
linux·笔记·学习·ubuntu·机器人
yi0116 小时前
DAY 14: LeetCode 394. 字符串解码|递归和栈到底怎么处理嵌套?
数据结构·笔记·python·算法·leetcode
小刘在重生~7 小时前
CSS 零基础完整学习笔记|选择器|盒子模型|布局
css·笔记·学习
浩瀚地学7 小时前
deepagents学习打卡day07
经验分享·笔记·python·学习·agent