除法(DIV/IDIV)

目录

  • 除法(DIV/IDIV)
    • `DIV`(unsigned divide)无符号数除法
    • `IDIV`(signed divide)有符号数除法

DIV(unsigned divide)无符号数除法

格式:DIV SRC

操作:

  • SRCSRCSRC为字节时,(AL)←(AX)/(SRC)(AL)\gets (AX)/(SRC)(AL)←(AX)/(SRC)的商,(AH)←(AX)/(SRC)(AH)\gets (AX)/(SRC)(AH)←(AX)/(SRC)的余数
  • SRCSRCSRC为字时,(AX)←(DX,AX)/(SRC)(AX)\gets (DX,AX)/(SRC)(AX)←(DX,AX)/(SRC)的商,(DX)←(DX,AX)/(SRC)(DX)\gets (DX,AX)/(SRC)(DX)←(DX,AX)/(SRC)的余数

该指令将参与运算的数据默认为无符号数,则商和余数都是无符号数

除法貌似并不会影响标志位(进位标志CFCFCF和溢出标志OFOFOF)的改变,但通过上述操作可知,被除数位数总是除数的两倍,而相除的商和余数是存储在和除数位数相同的空间里,显然余数是肯定够存的,但是商是有可能存不下的(例如:0300H÷02H=0180H0300H\div 02H=0180H0300H÷02H=0180H,这里商仅依靠字节存储是无法存下的)。商出现溢出时,系统转0号类型中断处理,提示“divide overflow”,并退出程序,返回到操作系统,程序便已经崩溃了。要想避免出现这种情况,必须在作除法前对溢出作出预判

由于商需要更大空间来存储,而字节长度的除数无法满足,因此需要将其扩展为字长度,这样商便有了字长度空间存储

MOV AX, 300H
CWD ;这里书上使用CWD指令进行字到双字的符号扩展(将AX的符号位即最高位填充至DX的所有位),而这里使用的是无符号数除法,当被除数的最高位为1时显然会扩大被除数的大小,我认为应当使用零扩展(即将DX所有位置0),这样便不会改变原数的大小,但我未查询到汇编零扩展的相关指令,或许没有该指令,也许只能自己手动零扩展(MOV DX, 0)
MOV BX, 2
DIV BX ;这里的SRC为字长

这里使用CWD进行符号扩展是因为SRCSRCSRC为字长时,被除数则为(DX,AX)(DX,AX)(DX,AX),因此需将这两寄存器一起看作被除数,于是使用CWD将DXDXDX置0,使其整体等于300H300H300H,这里个人认为因采用类似MOV DX, 0 的指令去处理更为合理

等到的结果商为180H(AX)180H(AX)180H(AX),余数为0H(DX)0H(DX)0H(DX)

IDIV(signed divide)有符号数除法

指令格式和操作与无符号数除法相同,用来作有符号数除法。最终商的符号应是两个操作数符号的异或,而余数的符号和被除数符号一致

这里用FF80H(−128)÷03H(+3)=D6H(−42)⋯⋯FEH(−2)FF80H(-128)\div 03H(+3)=D6H(-42)\cdots \cdots FEH(-2)FF80H(−128)÷03H(+3)=D6H(−42)⋯⋯FEH(−2)举例

【汇编语言】除法(DIV/IDIV)相关推荐

  1. 8086除法指令DIV,IDIV

    无符号除法指令DIV(DIVision) DIV OPRD ;除数OPRD决定是8位除法还是16位除法;OPRD=8位,则被除数默认在AX中,AX除以OPRD的商保存在AL中,余数保存在AH中;OPR ...

  2. Win-MASM64汇编语言-MUL/DIV

    MUL:乘法指令 两个数相乘,其中必须有一个数在ax中,另外一个数可以是寄存器或者内存中,下面是乘法5*5的代码,该代码我在win10 x86下运行,所以是32位,ax使用eax替代,dx使用edx替 ...

  3. 汇编语言的div指令 ax dx bx

    被除数32位,则除数应该是16位. 被除数16位,则除数应该是8位. 防止溢出发生! 1.用到ax dx两个通用寄存器来存储被除数.一般是因为被除数大于65535.使用ax存储低位数据,使用dx存储高 ...

  4. 汇编语言——指令系统小结

    指令系统小结 指令系统小结 一.数据传送 1. 数据传送 ==MOV== ==LEA== ==LDS== ==LES== ==LAHF== ==SAHF== 2. 堆栈操作 ==PUSH== ==PO ...

  5. 汇编Ch.5 Ch.6笔记

    Chapter V: 程序设计 躺雷记录: 关于汇编中大小写的问题: 各条指令不区分大小写 但是用户定义的各个变量, 标号等, 将区分大小写 关于汇编中的中括号: 对于MOV: num dword 2 ...

  6. 汇编idiv带符合除法指令。。。。

    汇编基础一日一学习33                     大家好,今天我们来学习下有符号整数除法指令 IDIV,此指令进行有符号的除法运算,使用的操作数格式与DIV指令格式相同. 在进行8位除法 ...

  7. 汇编语言乘法和除法指令

    文章目录 1.乘法指令MUL/IMUL 2.除法指令DIV/IDIV 3.其他运算指令 乘法和除法指令 IA-32 处理器的乘法和除法指令需要区别无符号数和有符号数, 并隐含便用丁 EAX (和EDX ...

  8. 微机原理——指令系统——算数运算指令(ADD、ADC、SUB、SBB、INC、DEC、NEG、CMP、MUL、IMUL、DIV、IDIV、CBW、CWD、BCD调整)

    博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问. 算数运算指令 1.加减法 ...

  9. matlab符号函数的除法,汇编语言IDICV指令:有符号数除法

    有符号除法几乎与无符号除法相同,只有一个重要的区别:在执行除法之前,必须对被除数进行符号扩展. 符号扩展是指将一个数的最高位复制到包含该数的变量或寄存器的所有高位中.为了说明为何有此必要,让我们先不这 ...

最新文章

  1. winform窗体自由拖拽控件
  2. 香蕉派 banana pi github 最新Linux 代码升级到kernel 4.2.
  3. 使用synchronized修饰静态方法和非静态方法有什么区别
  4. 写在NOIP2018后
  5. 移动端开发高清效果和多屏适配
  6. 引用参考文献_引用参考文献时应注意些什么
  7. WebRTC / Jitsi / 使用 jitsi 官方源安装内网演示环境过程
  8. 蓄水池采样(Reservoir Sampling)
  9. 如何解决文件不存在_传奇微端配置Pak密码文件不存在怎么解决?传奇分享汇
  10. dedecms m view.php,dedecms在php7下的使用方法 织梦dedecsm后台一片空白的解决方法
  11. 计算机科学工程哲学学位,2020年剑桥大学硕士读多久
  12. python 调用海康sdk_Qt调用海康SDK实现摄像头视频播放
  13. 100行python代码实现细胞自动机(康威生命游戏)
  14. Qunee for HTML5的学习与使用笔记(一)
  15. unity使用TUIO协议
  16. 如何在iPhone上禁用Apple CarPlay
  17. 阳历和阴历的互转函数
  18. Android系统设置联系人头像教程
  19. 电子邮件礼仪五大神器 让工作大佬们回复你的邮件 How to get a busy person to respond to your email
  20. Python3 - Docker部署caffe open_nsfw 图片鉴黄

热门文章

  1. css实现鼠标覆盖显示大图
  2. 在Atlas服务器端实现中推荐使用Web Service而不是Page Method
  3. What?一个 Dubbo 服务启动要两个小时!
  4. python高级特性:迭代器与生成器
  5. [Swift]LeetCode682. 棒球比赛 | Baseball Game
  6. [转帖]真TM长的:SQL Server 2008存储结构——GAM和SGAM、PFS结构、IAM结构、DCMBCM
  7. CentOS Vi编辑器
  8. 《软件需求十步走》阅读笔记06
  9. 线性表15|魔术师发牌问题和拉丁方阵 - 数据结构和算法20
  10. html option ajax,Ajax实现简单下拉选项效果【推荐】