卖向日葵的 发表于 2012-11-29 21:05:21

汇编菜鸟级问题

1、谁能解释一下十进制调整指令,上课没听懂。简单点~~~~{:5_109:}

谢谢了

守夜人 发表于 2012-11-29 21:12:22

没搞明白楼主的意思

2012507507 发表于 2012-11-29 21:32:18

本帖最后由 2012507507 于 2012-11-29 22:24 编辑

LZ说的是用BCD码表示的十进制数吧??   
以下是用压缩后的BCD码表示的二位十进制数,

非压缩的BCD码以及二位以上十进制数的BCD码就让LZ思考下了,原理相同。
先说下BCD码与8086的存储形式的关系

BCD码中 4位2进制表示十进制中的一个位(高位对应高位,低位对应低位)
比如: 十进制的10BCD码就是00010000B   在AL中存储是 10H
            十进制的09BCD码就是0000 1001B   在AL中存储是09H
            十进制的15BCD码就是0001 0101B   在AL中存储是15H
遵循2进制转10进制的常规方法(加和权的运算)
单个字节的BCD码存储范围是从0000 0000B(00)~1001 1001B(99),

而8086中是通过16进制进行 存储和计算的。
所以上面3个例子在8086的存储形式如下:
            十进制的10   转为2进制0000 1010BAL存储为0AH
            十进制的09   转为2进制0000 1001BAL存储为09H
            十进制的15   转为2进制0000 1111BAL存储形0FH   


1位十进制数,BCD码与16进制相同
2位十进制数,BCD码和16进制相差 06H

接着说下压缩的BCD码的调整指令

压缩的BCD码指令有 DAA(加法调整)和DAS(减法调整)
执行如下运算 AL+BL;(AL)=9   (BL)=11,结果保存至AL
BCD码加法:指令为 DAA AL,BL
                     09+11=20BCD码表示为 0000 1001B+ 0001 0001B=0010 0000B
                     AL存储是 20H

常规加法中:指令为ADD AL,BL
                     09+11=20 则表示为09H+0BH=14H 结果转为2进制 0001 0100B
                     AL存储是 14H


即DAA AL,BL相当于执行了
(1) ADD AL,BL
(2) ADD AL,06H
2步操作。DAS同理。




ai979520253 发表于 2012-12-1 17:59:07

楼上正解。。。。。支持一下

志华 发表于 2012-12-1 22:11:48

这是什么东西呀

脆弱 发表于 2012-12-2 05:11:51

==一二三四五六七八九十:lol
页: [1]
查看完整版本: 汇编菜鸟级问题