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 |