ASCII--BCD码运算调整指令
这组指令的使用率较低,可以根据需要有选择性地学习
例5.21 编写一段程序,完成二个15位十进制数X和Y之和,并把计算结果存入X之中。假设数据X和Y都是以字符串形式表示的。
|
解: |
|
|
|
|
|
… |
|
|
|
|
X |
db "456407983123186" |
;任意假设二个15位的大数 |
|
|
Y |
db "326676709587211" |
|
|
|
… |
|
|
|
|
CLC |
|
|
|
|
MOV |
SI, 14 |
;用变址寄存器SI来从字符串的后面向前访问 |
|
|
MOV |
CX, 15 |
;因为它们是二个15位十进制数 |
|
loop1: |
MOV |
AL, X[SI] |
|
|
|
ADC |
AL, Y[SI] |
;把被加数加上 |
|
|
AAA |
|
|
|
|
MOV |
X[SI], AL |
|
|
|
DEC |
SI |
|
|
|
LOOP |
loop1 |
;15位十进制数相加完毕 |
|
|
LEA |
BX, X |
;下面5条指令是把X中的数据变成对应的字符 |
|
|
MOV |
CX, 15 |
|
|
loop2: |
ADD |
byte ptr [BX], '0' |
|
|
|
INC |
BX |
|
|
|
LOOP |
loop2 |
|
|
|
… |
|
|
从上例可以看出,其实任意位的十进制数也都是可以的,只要改变CX的值即可。