社区
汇编语言
帖子详情
[理解语句]压缩型BCD码的问题
kartik
2010-11-21 02:05:01
MOV AL, 43H
MOV BL, 29H
ADD AL, BL ;AL=6BH,其不是压缩型的BCD码,因为低四位'B'不是BCD码
DAA ;调整后,AL=72H,这是压缩型的BCD码,也有:43+29=72
第三行AL=6BH是怎么得到的?
执行DAA指令后,又是怎么调整的?
...全文
232
6
打赏
收藏
[理解语句]压缩型BCD码的问题
MOV AL, 43H MOV BL, 29H ADD AL, BL ;AL=6BH,其不是压缩型的BCD码,因为低四位'B'不是BCD码 DAA ;调整后,AL=72H,这是压缩型的BCD码,也有:43+29=72 第三行AL=6BH是怎么得到的? 执行DAA指令后,又是怎么调整的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shzhfu
2010-11-21
打赏
举报
回复
它比加法调整简单些,因为不借位就不会产生超过9的数字。但借位后它是当16用的,而做为BCD码我们希望它仅当10用,所以要退回多用的6.
Step 1:调整个位数。
若个位数产生借位了(辅助进位标志AF=1),则个位减去多用的6(比如43H-29H=1AH,此时AF=1所以才产生了个位的A,让它减去6剩下4)。
若个位数没借位(AF=0),个位就不用调整成了。
Step 2:调整十位数。
若十位数产生借位了(辅助进位标志CF=1),则十位减去多用的6。
若十位数没借位(CF=0),个位就不用调整成了。
43H-29H时,没产生CF,所以十位数不动,因此最后结果十位是1,个位是4,得到14H.
kartik
2010-11-21
打赏
举报
回复
[Quote=引用 4 楼 shzhfu 的回复:]
刚才回贴时我没计算,把你的结果抄过来,就直接写成6B了。写调整过程时,发现了6B的错误,但忘记了前面还有,就没改前面的。
[/Quote]
应该是书上出错了。
那43H-29H 的非压缩BCD码呢
shzhfu
2010-11-21
打赏
举报
回复
刚才回贴时我没计算,把你的结果抄过来,就直接写成6B了。写调整过程时,发现了6B的错误,但忘记了前面还有,就没改前面的。
shzhfu
2010-11-21
打赏
举报
回复
如果你这个例子是从书上抄下来的,那就是书上写错了。
kartik
2010-11-21
打赏
举报
回复
[Quote=引用 1 楼 shzhfu 的回复:]
ADD做普通加法,它不把43H和29H看成BCD码,所以得到的和是6BH。转换成十进制表示72,但计算机内只能保存二进制形式,写成对应的十六进制就是6BH.
因为你自己要把两个加数看做BCD码,所以需要做加法调整:DAA.
DAA调整分两步进行:
Step 1:调整个位数。
若个位数产生进位了(辅助进位标志AF=1),即低4位向高4位进位了,那它是逢十六才进一。当BCD……
[/Quote]
我也觉得应该是6C啊,会不会出错了?
shzhfu
2010-11-21
打赏
举报
回复
ADD做普通加法,它不把43H和29H看成BCD码,所以得到的和是6BH。转换成十进制表示72,但计算机内只能保存二进制形式,写成对应的十六进制就是6BH.
因为你自己要把两个加数看做BCD码,所以需要做加法调整:DAA.
DAA调整分两步进行:
Step 1:调整个位数。
若个位数产生进位了(辅助进位标志AF=1),即低4位向高4位进位了,那它是逢十六才进一。当BCD码看时应该逢十进一,所以此时的进位把个位多用了一个6(比如9+9=12H,它是从和18中取出16进到十位数,所以个位只留下2)。这种情况下,要给个位补会一个6.
若个位数没进位(AF=0),但其值超过了9(是A-F),此时作为十六进制还不需要进位,但作为BCD码,已经需要了,所以调整时,把A-F中的10进到前一位,个位保留它减去10后的余数。(如你例子中BCD码的个位B【应该是C吧】,减掉10,个位余下2,十位加上1,于是就调整成了72H)
否则(AF=0且低4位不超过9),个位数(即低4位)不动。
Step 2:调整十位数。
与调整个位数的做法完全相同,只是判断CF是否为1和高4位是否超过9. 需要调整时,产生的进位放在CF中。
演示文稿微机原理第八章微
型
计算机的程序设计.ppt
5. **
BCD码
**:二进制编码的十进制数,分为
压缩
BCD码
和非
压缩
BCD码
。
压缩
BCD码
用4位二进制表示1位十进制,一个字节能表示2位十进制;非
压缩
BCD码
每个字节仅表示1位十进制,高4位固定为0。 6. **BCD数的加法调整指令...
2022汇编语言选择题及填空题复习部分已填写答案的定义.pdf
4. **
压缩
型
BCD码
操作**:
BCD码
是一种用于表示十进制数的二进制编码方式。在AL寄存器中进行
压缩
型
BCD码
减1操作时,可以使用SUB AL,1 AAS或DAS指令序列。 5. **负数转换**:将AX中的负数-15转换为正数15,可以使用...
汇编语言符号和教材符号汇总
- 在执行除法操作前,利用AAD指令将非
压缩
型
BCD码
表示的数转换成二进制数送AL。 - 步骤包括将被除数的高位数(AH中的内容)乘以10,然后加到AL的低位数中,并将AH清零。 - **AAM(ASCII Adjust After Multiply)*...
汇编语言 期末复习试题
16. **十六进制数表示**:88H可以表示无符号十进制136,
压缩
型
BCD码
88,但不能表示-120或8位二进制-8的补码。 17. **指令指针寄存器**:IP寄存器存储下一条待执行指令的偏移地址。 18. **汇编语言名字项规定**:...
汇编语言期末复习题
十六进制数 88H 可以表示成无符号十进制数 136、带符号十进制数-120、
压缩
型
BCD 码十进制数 88 等形式。 指令指针寄存器是 IP。汇编语言
语句
格式中对名字项的规定是名字的第一个字符可以是大写英文字母及小写英文...
汇编语言
21,496
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章