汇编语言:基于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 实现了对无大小限制数的加减法操作。
相关推荐
love530love2 小时前
【笔记】AutoClaw NSIS 安装器卡死、进程杀不掉、目录删不了?我是这么解决的
人工智能·windows·笔记·agent
谙弆悕博士5 小时前
系统集成项目管理工程师教程(第3版)笔记——第2章:信息技术发展
笔记·计算机网络·信息安全·学习方法·业界资讯·软考·系统分析师
吃着火锅x唱着歌5 小时前
Effective C++ 学习笔记 条款37 绝不重新定义继承而来的缺省参数值
c++·笔记·学习
风曦Kisaki6 小时前
# Linux笔记:操作系统优化与资源管理
linux·运维·服务器·笔记
阿米亚波6 小时前
【C++】流式数据输入处理(不完全整理)
开发语言·c++·笔记
zhangrelay8 小时前
笔记本轻量高品质延寿工具完整分系统清单
运维·笔记·学习
巴巴媛6668 小时前
STM32学习笔记【38.DHT11实验】
笔记·stm32·学习
caimouse8 小时前
MM 学习笔记 01:miarm.h 核心头文件分析
笔记·学习·reactos
疯狂打码的少年11 小时前
【软件工程】软件测试阶段:单元测试与集成测试(高频对比考点)
笔记·单元测试·集成测试·软件工程
小秋求学记.11 小时前
第三天笔记
笔记