求十进制876的BCD码

蹲一个解答!
例题1-4中,答案两行为什么两个BCD转化结果不一样?

img

BCD码是用二进制码逐位表示十进制数(0~9十个数字);十进制数的二进制码是是所有二进制码连在一起表示一个十进制数。


  第一行是BCD码表示的二进制数;第二行是十进制数的二进码。
  • 原理,请看百科词条截屏图片

    img

  • [876]BCD与876二进制码的区别
    BCD码[876]

    img


    十进制数876的二进码

    img

  • 代码运行效果截屏图片

    img

  • python 代码

#!/sur/bin/nve python
# coding: utf-8


print('\n二进制数1101101100的十进制值是:', int('1101101100', 2))


```

```

1:876 这3个BCD码 8=1000,7=0111,6=0110,[876]BCD=1000_0111_0110
2:876 这个数等于16进制的0x36C = 0011_0110_1100
强调一下 1 中的 876 是3个BCD码,2中的876是一个10进制的数

如有帮助请帮忙采纳,谢谢!
BCD(Binary-Coded Decimal)码是一种二进制编码方式,可以用于表示十进制数。每个十进制数位使用四个二进制位来进行编码,其中最高位的二进制位为 0。

因此,十进制数 876 的 BCD 码可以表示为:

1000 0111 0110

其中,最高位的 1 表示数值 8,接下来的 7 表示数值 7,最后的 6 表示数值 6。注意,BCD 码中的每个十进制数位都使用四个二进制位进行编码,因此总共需要 12 个二进制位来表示三位十进制数。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7611583
  • 你也可以参考下这篇文章:十进制数转换BCD码
  • 除此之外, 这篇博客: 8086/8088指令系统详解-之(1)数据传送指令中的 4,十进制数(BCD码)运算指令 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在微处理器中,没有专用的BCD码运算指令,使用二进制运算指令进行BCD码数的运算后,要用BCD码运算调整指令进行调整,重新得到BCD码的结果。举例如下:
    1、34H+29H 按照二进制加法得到的结果是 5DH
    2、用调整指令DAA调整成BCD码,规则是

    • 低4位>9或AF=1结果加06H;
    • 高4位>9或CF=1结果加60H;

    3、调整以后得到:5DH + 06H = 63H,这是BCD码运算的结果。

    压缩型BCD码的调整指令:

    DAA加法调整
    DAS减法调整

    非压缩格型BCD码的调整指令:

    AAA加法调整
    AAS减法调整
    AAM乘法调整
    AAD除法调整

    这类指令的操作数隐含为AL或AX

    AAA指令的操作为:

    如果  (AL) ∧0FH>9 或 (AF)=1
    则       (AL) ←(AL)+06H      
            (AH) ←(AH)+1
            (AF) ← 1
            (CF) ←(AF)
            (AL) ←((AL) ∧ 0FH)
    否则  (AL) ←((AL) ∧ 0FH)
    

    DAA指令的操作为:

    如果  (AL) ∧0FH>9, (AF)=1
    则       (AL) ←(AL)+06H      
            (AF) ← 1
    如果  (AL) > 9FH 或 (CF)=1
    则       (AL) ←(AL)+60H      
            (CF) ← 1
    

    例]要求计算两个十进制数之和,7+8=?。可用以下指令实现:

    MOV  AX,  0007H     ;(AL)=07H,(AH)=00H
    MOV  BL,  08H       ;(BL)=08H
    ADD  AL,  BL        ;(AL)=0FH
    AAA                 ;(AL)=05H,(AH)=01H
                        ;(CF)=(AF)=1
    
    MOV  AX,  0007H     ;(AL)=07H,(AH)=00H
    MOV  BL,  08H       ;(BL)=08H
    ADD  AL,  BL        ;(AL)=0FH
    DAA                 ;(AL)=15H,(AH)=00H                      
                        ;(CF)=0,(AF)=1

    AAS指令的操作为: (非压缩型BCD码调整)

    如果  (AL) ∧0FH>9 或 (AF)=1
    则       (AL) ←(AL)-06H      
            (AH) ←(AH)-1
            (AF) ← 1
            (CF) ←(AF)
            (AL) ←((AL) ∧ 0FH)
    否则  (AL) ←((AL) ∧ 0FH)
    

    DAS指令的操作为: (压缩型BCD码调整)

    如果  (AL) ∧0FH>9, (AF)=1
    则       (AL) ←(AL)-06H      
            (AF) ← 1
    如果  (AL) > 9FH 或 (CF)=1
    则       (AL) ←(AL)-60H      
            (CF) ← 1
    

    AAM指令的操作为:(将二进制数转换成十进制数)

    (AH)←(AL)/0AH的商;即AL除以10,商送AH
    (AL)←(AL)/0AH的余数;即AL除以10,余数送AL
    

    例:要求进行以下十进制乘法运算:7*9=?

    解:可编程序段如下

    MOV  AL,07H    ;(AL)=07H
    MOV  BL,09H    ;(BL)=09H
    MUL  BL         ;(AX)=07H09H=003FH
    AAM             ;(AH)=06H,(AL)=03H 

    AAD指令的操作为:(将十进制数转换成二进制数)

        (AL)←(AH)0AH+(AL)
        (AH)←0 
    

    例:要进行以下十进制除法运算:73÷2=?

    解:可编程序段如下:

       MOV AH,07H   ;(AH)=07H,(AL)=03H
       MOV AL,03H   ;(AH)=07H,(AL)=03H
       MOV BL,02H   ;(BL)=02H
       AAD           ;(AL)=49H(即十进制数73)
       DIV BL        ;(AL)=24H(商),(AH)=01H(余数)
       AAM           ;(AH)=03H,(AL)=06H
  • 以下回答由chatgpt基于相关博客总结生成:

    根据题目要求,我们需要求出十进制数876的BCD码,并解释为什么例题1-4中的两个BCD转化结果不一样。

    BCD码是二进制编码,用于表示十进制数。每个十进制数使用四位二进制数来进行编码。在BCD码中,每个十进制数的范围是0000到1001,它的对应关系是:

    0 -> 0000 1 -> 0001 2 -> 0010 3 -> 0011 4 -> 0100 5 -> 0101 6 -> 0110 7 -> 0111 8 -> 1000 9 -> 1001

    因此,我们可以将十进制数876转化为BCD码的过程如下:

    1. 取出876的各个数字,即8、7和6。
    2. 将每个数字转化为对应的BCD码。例如,8转为1000,7转为0111,6转为0110。
    3. 将三个BCD码拼接起来,即1000 + 0111 + 0110,得到最终的BCD码是100001110110。

    至于为什么例题1-4中的两个BCD转化结果不一样,可能是因为例题中使用了压缩型BCD码的调整指令和非压缩型BCD码的调整指令,导致处理方式不同。具体的解释需要参考例题中的指令和相关规则,而题目并未提供这些信息,因此无法给出确切的解释。

    综上所述,十进制数876的BCD码是100001110110。对于例题中的BCD转化结果不一样的情况,需要参考具体的指令和规则进行解释。