当前文档版本为 v0.4.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

BCD加法

示例使用压缩BCD码,使用4个比特表示一位十进制数,例如十进制12345表示为BCD码为0x00012345

BCD码的运算需要da/daf指令进行配合。 以下为BCD码的加法示例,其减法类似。BCD码乘除法可以到网上自行学习。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#define X_VAL   0x123456
#define Y_VAL   0x456789

        dseg
        byte    x[4]
        byte    y[4]
        byte    z[4]
        
        cseg
main:   mov     A, #X_VAL & 0xff
        mov     x + 0, A
        mov     A, #(X_VAL >> 8) & 0xff
        mov     x + 1, A
        mov     A, #(X_VAL >> 16) & 0xff
        mov     x + 2, A
        mov     A, #(X_VAL >> 24) & 0xff
        mov     x + 3, A
        mov     A, #Y_VAL & 0xff
        mov     y + 0, A
        mov     A, #(Y_VAL >> 8) & 0xff
        mov     y + 1, A
        mov     A, #(Y_VAL >> 16) & 0xff
        mov     y + 2, A
        mov     A, #(Y_VAL >> 24) & 0xff
        mov     y + 3, A
        //执行BCD加法 z = x + y
        mov     A, x + 0
        add     A, y + 0
        da      z + 0, A
        mov     A, x + 1
        addc    A, y + 1
        da      z + 1, A
        mov     A, x + 2
        addc    A, y + 2
        da      z + 2, A
        mov     A, x + 3
        addc    A, y + 3
        da      z + 3, A
        //z = 0x00580245