汇编基础一日一学习33 
         
         大家好,今天我们来学习下有符号整数除法指令 IDIV,此指令进行有符号的除法运算,使用的操作数格式与DIV指令格式相同。 在进行8位除法之前,被除数(AX)必须进行符号扩展,余数的符号和被除数总是相同。

那么符号扩展顾名思义其实就是将它的符号位进行扩展,那么符号扩展有无相关的指令呢? 当然有, 那就是CBW CWD CDQ 指令。   
         
     首先看CBW指令,CBW指令是将(字节扩展至字)。我们从它后面的两个后缀就可以看的出来。B =byte   -   W = word 。 这个指令将扩展al的符号位至ah中。 
         
     接着CWD指令, 是将字符号扩展至双字。W = WORD , D = DWORD   。 这样我们就不需要去记。 看下就OK了。 这个指令将扩展ax的符号位至dx中。

CDQ指令 将双字符号扩展至8字节, 指的是扩展eax的符号位至edx寄存器中。 
         
         
         
         1.举个例子 10进制 -66。 
         -66 = -42h     ;十六进制 
         去反码后 = 0BEh 
         mov al, -66 
         cbw 
         
         那么此刻al = 0BEh ,此刻执行cbw, 刚刚说了cbw是将字节扩展至字。   这个指令将al的符号为扩展至ah中。

大家猜测下cbw指令执行完, ax等于多少。。

我想大家不约而同会说等于FFBEh 。   就是将我们的al符号位扩展至ah寄存器中。

2.         
         同样cwd也是一样的。只是cwd是将ax的符号位扩展至dx中。 
         举例 
         mov ax, 0FFEBh 
         cwd 
         此刻cwd质量将我们ax寄存器的符号位扩展至dx寄存器中,所以此刻执行完后。 dx = FFFFh   ax= FFBEh

我就不举例cdq指令,很简单,大家自己想一下,就是将eax的符号位扩展至edx寄存器中。

介绍了上面的符号扩展我们现在来学习IDIV有符号除法指令,我们在进行有符号整数除法指令运算时候,一定要记得被除数进行符号扩展。余数的符号和被除数的符号相同。 
                 
         1.举个例子 
         
         mov al, -66 
         cbw 
         mov   bl, 5 
         idiv bl 
         很明显执行第一句指令的时候al = 0EBh, 此刻执行cbw扩展指令,此刻我们的ax = 0FFEBh,然后此刻我们进行给bl传送立即数5,然后通过idiv 指令进行除法,大家是否还记得div指令操作8位除数的时候,商和除数保存在那里呢?   呵呵 商保存在al中,余数保存在ah中。

那么大家想象最后执行完后 al =?   ah = ? 
         
         注意商和余数是正数还是负数,由于我们除后,我们的商还是负数 ,注意看上面说的,不管怎么样我们的余数的符号位和被除数的符号位是相同的,所以此时余数也是负数。

我们来计算下, al = -13 = -0dh   ,ah = -01h 
         
         我们求反码。 
         -0d 
         15 - 0 = F 
         15 - D = 2 
         +1 = F3h 
         很明显al = F3h 
         
         -01 
         15 - 0 = F 
         15 - 1 = E 
           +1 
         ah = FF 
           
         最终我们可以计算出来ah = 0FFh 
                             al = 0F3h 
         
         
           2. 
         mov ax, -6000 
         cwd 
         mov bx, 300 
         idiv bx 
         
         -6000 = -1770h 
         我们求反码 
         15 - 1 = E 
         15 - 7 = 8 
         15 - 7 = 8 
         15 - 0 = F 
         +1 
         = E890h 
         此刻ax = E890h 
         
         执行cwd指令后,我们的字扩展双字,ax = E890h dx = FFFFh 
         
         然后执行mov bx, 300 
         300转换16进制 
         bx = 012ch 
         此刻我们在通过idiv指令进行除法运算。   16位我们的商是存在ax寄存器,余数在dx寄存器中。 
         
         我们计算下: 
         ax = -20 
           = -14h 
         我们取反码 
         15 - 1 = E 
         15 - 4 = B 
         EB + 1 = ECh 
         
         那么我们的ax =? 等于00EC? 当然不是了, 因为我们要保留符号位的,所以此刻ax = FFECh 。

余数由于是0,所以dx= 0000h 。

转自:http://hi.baidu.com/txuqbajotfnstvr/item/33f8249c3b6d1cb4cd80e5f7

这个博客里面的一些文章也可以都看一看,还不错

汇编idiv带符合除法指令。。。。相关推荐

  1. 汇编总结:无符号除法,有符号除法,取余,无符号乘法,有符号乘法指令

    2019独角兽企业重金招聘Python工程师标准>>> 本文分为3个模块. 示例---该指令的示例 解释---为指令不好理解的地方 练习---为了更熟悉该指令 1.1 有符号除法指令 ...

  2. 8086除法指令DIV,IDIV

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

  3. c语言中被3除 余数为2,五年级奥数题:带余数除法(B)

    一.填空题1.除107 后,余数为2 的两位数有_____. 2. 27()= ()-- 3.上式()里填入适当的数,使等式成立,共有_____ 种不同的填法. 3.四位数8 □98能同时被17和19 ...

  4. 汇编quad_ARM汇编(2)(指令)

    一,ARM汇编语言立即数的表示方法 十六进制:前缀:0x 十进制:无前缀 二制:前缀:0b 二,常用的ARM指令(标准的ARM语法,GNU的ARM语法) 1.@M开头系列 MOV R0, #12 @R ...

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

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

  6. Oracle 用Drapper进行like模糊传参查询需要在参数值前后带%符合

    Oracle 用Drapper进行like模糊传参查询需要在参数值前后带%符合 string sqlstr="select * from tblname where name like :n ...

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

    除法指令 DVI无符号数除法指令 指令格式:DIV 源 指令功能:对两个无符号二进制数进行除法操作.源操作数可以是字或字节. 如果源操作数为字节,16位被除数必须放在AX中,8位除数为源操作数,它可以 ...

  8. 汇编 DA A 十进制调整指令

    [转载]小伙伴们求同去<汇编 DA A十进制调整指令>, 一起来围观吧 https://blog.csdn.net/m0_58836581/article/details/12152571 ...

  9. ARM汇编:MRS和MSR指令

    ARM汇编:MRS和MSR指令 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 一:下面先来说说状态寄存器 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下 ...

最新文章

  1. 有三AI小程序上线,把你的代码show给世界
  2. OpenGL 绘制彩色三角形的实例
  3. 皁新哪学计算机好,北京科技大学计算机基础模拟AB .doc
  4. iOS之高德地图定位偏移以及经纬度之间的转换
  5. Android Studio 安装具体步骤(配图)
  6. Beetl学习总结(1)——新一代java模板引擎典范 Beetl入门
  7. linux网络子系统分析(三)—— 设备无关层
  8. 【牛腩】发布 牛腩新闻发布系统
  9. 新中大如何修改服务器地址,新中大GE10.0安装配置手册
  10. MFC中SetTimer函数
  11. Springboot 基础6 - Redis实战
  12. 上位机软件系统开发工具简介
  13. ACCESS sql语句数据类型转换 文本类型转换为数字类型
  14. 【VR】(四)VR设备盘点
  15. LiveNVR安防监控直播中无插件web直播方案中实现快照抓取的功能
  16. 记用Fiddler抓包爬取pc端微信公众号文章
  17. typora 配置 smms 图床
  18. (十四)redis过期策略
  19. Type-C强光手电快充方案
  20. 让手机1秒打开健康码 ,任何机型!

热门文章

  1. 【知识兔】Excel查找替换的6大典型用法
  2. 计算机东北大学与兰州大学哪个好,东北大学和兰州大学如何选择?上哪个比较好?...
  3. 【金融项目】尚融宝项目(九)
  4. 项目经理人才培养专题︱优秀项目经理能力建设(一)
  5. 九龙证券|大宗商品集体下挫,黄金一枝独秀,纳指领跑全球股市
  6. python之pycharm添加环境变量
  7. tp link拨号失败 服务器无响应,【求救】K2提示“等待PPP客户端连接”拨号失败...
  8. 自用备份 Unity 获取 两个点的中心点
  9. 如何对接身份证实名认证?
  10. linux下kegg注释软件,科学网—生物信息——kegg分析的kobas软件的安装与使用 - 孙朋川的博文...