gpt4 book ai didi

assembly - 二进制到BCD转换

转载 作者:行者123 更新时间:2023-12-02 02:59:55 24 4
gpt4 key购买 nike

我被要求将 8 位二进制转换为 3 位 BCD。

我看到网上有人用DIV,但我完全不明白,为什么要除以#0AH

如果要求我使用 2 对 8 位寄存器减去 16 位乘 16 位,我是否需要使用 CPL+1 将其传输到 2 的 comp或者只使用 SUBB 命令?

R4-7 是寄存器

        MOV A, R5
SUBB A, R7
JNC L1
DEC R4
L1: MOV 20H,A
CLR C
MOV A, R4
SUBB A, R6
MOV 21H,A
END

最佳答案

问题 1:为什么我需要 DIV通过#0AH得到二进制值的BCD?

如今,计算机(微 Controller 就是计算机)中的每个整数值通常都以二进制形式存储。所以这里没有什么特别要做的。如果您需要 BCD(二进制编码的十进制),则需要将百位、十位和个位分别分隔为 4 位。为此,您需要除以 10(并保存余数),这可以编码为 #0AH 。不过,我不会写这个,而是写 #10这更清楚地表明什么是 ment。

假设要转换的数字位于累加器 A 中,并且您希望结果位于寄存器对 R0 (MSByte) 和 R1 (LSByte) 中。您需要多个寄存器,因为您得到的 3 位数字总共为 12 位宽。

DIV将除A通过B ,并给出 A 中的整数商其余的在 B .

    MOV   B,#10
DIV AB ; floor(number / 10) in A, 1s in B
MOV R1,B ; 1s are now in R1 (bits 3 to 0)
MOV B,#10
DIV AB ; floor(number / 100) in A, 10s in B
MOV R0,A ; 100s are now in R0 (bits 3 to 0)
MOV A,B ; 10s are now in ACC (bits 3 to 0)
SWAP A ; 10s are now in bits 7 to 4 in ACC
ORL A,R1
MOV R1,A ; 10s and 1s are now in R1

问题 2:我需要通过 CPL 传输[答案:否定]第二个操作数和 +1 或者我可以只使用 SUBB

不,你只需使用 SUBB 。前一篇SUBB您将清除进位标志。

假设第一个操作数(要减去的“被减数”)位于寄存器对 R0(MSByte)和 R1(LSByte)中,第二个操作数(要减去的“减数”)位于寄存器对中R2 (MSByte) 和 R3 (LSByte)。结果(“差异”)应放入寄存器对 R4(MSByte)和 R5(LSByte)中。

    CLR   C
MOV A,R1
SUBB A,R3
MOV R5,A
MOV A,R0
SUBB A,R2 ; borrow bit from LSByte subtraction is taken into account
MOV R4,A

最后说明:如果您想查看此处未描述的详细信息,请使用模拟器来尝试代码。

关于assembly - 二进制到BCD转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60211452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com