汇编idiv带符合除法指令。。。。
汇编基础一日一学习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带符合除法指令。。。。相关推荐
- 汇编总结:无符号除法,有符号除法,取余,无符号乘法,有符号乘法指令
2019独角兽企业重金招聘Python工程师标准>>> 本文分为3个模块. 示例---该指令的示例 解释---为指令不好理解的地方 练习---为了更熟悉该指令 1.1 有符号除法指令 ...
- 8086除法指令DIV,IDIV
无符号除法指令DIV(DIVision) DIV OPRD ;除数OPRD决定是8位除法还是16位除法;OPRD=8位,则被除数默认在AX中,AX除以OPRD的商保存在AL中,余数保存在AH中;OPR ...
- c语言中被3除 余数为2,五年级奥数题:带余数除法(B)
一.填空题1.除107 后,余数为2 的两位数有_____. 2. 27()= ()-- 3.上式()里填入适当的数,使等式成立,共有_____ 种不同的填法. 3.四位数8 □98能同时被17和19 ...
- 汇编quad_ARM汇编(2)(指令)
一,ARM汇编语言立即数的表示方法 十六进制:前缀:0x 十进制:无前缀 二制:前缀:0b 二,常用的ARM指令(标准的ARM语法,GNU的ARM语法) 1.@M开头系列 MOV R0, #12 @R ...
- 汇编语言乘法和除法指令
文章目录 1.乘法指令MUL/IMUL 2.除法指令DIV/IDIV 3.其他运算指令 乘法和除法指令 IA-32 处理器的乘法和除法指令需要区别无符号数和有符号数, 并隐含便用丁 EAX (和EDX ...
- Oracle 用Drapper进行like模糊传参查询需要在参数值前后带%符合
Oracle 用Drapper进行like模糊传参查询需要在参数值前后带%符合 string sqlstr="select * from tblname where name like :n ...
- 汇编语言 乘法和除法指令
除法指令 DVI无符号数除法指令 指令格式:DIV 源 指令功能:对两个无符号二进制数进行除法操作.源操作数可以是字或字节. 如果源操作数为字节,16位被除数必须放在AX中,8位除数为源操作数,它可以 ...
- 汇编 DA A 十进制调整指令
[转载]小伙伴们求同去<汇编 DA A十进制调整指令>, 一起来围观吧 https://blog.csdn.net/m0_58836581/article/details/12152571 ...
- ARM汇编:MRS和MSR指令
ARM汇编:MRS和MSR指令 ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 一:下面先来说说状态寄存器 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下 ...
最新文章
- 有三AI小程序上线,把你的代码show给世界
- OpenGL 绘制彩色三角形的实例
- 皁新哪学计算机好,北京科技大学计算机基础模拟AB .doc
- iOS之高德地图定位偏移以及经纬度之间的转换
- Android Studio 安装具体步骤(配图)
- Beetl学习总结(1)——新一代java模板引擎典范 Beetl入门
- linux网络子系统分析(三)—— 设备无关层
- 【牛腩】发布 牛腩新闻发布系统
- 新中大如何修改服务器地址,新中大GE10.0安装配置手册
- MFC中SetTimer函数
- Springboot 基础6 - Redis实战
- 上位机软件系统开发工具简介
- ACCESS sql语句数据类型转换 文本类型转换为数字类型
- 【VR】(四)VR设备盘点
- LiveNVR安防监控直播中无插件web直播方案中实现快照抓取的功能
- 记用Fiddler抓包爬取pc端微信公众号文章
- typora 配置 smms 图床
- (十四)redis过期策略
- Type-C强光手电快充方案
- 让手机1秒打开健康码 ,任何机型!
热门文章
- 【知识兔】Excel查找替换的6大典型用法
- 计算机东北大学与兰州大学哪个好,东北大学和兰州大学如何选择?上哪个比较好?...
- 【金融项目】尚融宝项目(九)
- 项目经理人才培养专题︱优秀项目经理能力建设(一)
- 九龙证券|大宗商品集体下挫,黄金一枝独秀,纳指领跑全球股市
- python之pycharm添加环境变量
- tp link拨号失败 服务器无响应,【求救】K2提示“等待PPP客户端连接”拨号失败...
- 自用备份 Unity 获取 两个点的中心点
- 如何对接身份证实名认证?
- linux下kegg注释软件,科学网—生物信息——kegg分析的kobas软件的安装与使用 - 孙朋川的博文...