前面介绍的算术运算指令都是针对二进制数进行操作的指令,但对绝大多数人来说,十进制是最简单、熟悉的。为了方便按十进制数进行算术运算,指令系统专门提供了一组十进制运算调整指令。
虽然人们会觉得按十进制进行算术运算很自然,但计算机要化更多的时间来完成相应操作。在通常情况下,这组指令很少被程序员运用在实际的程序之中。所以,这组指令的使用率较低,可以根据需要有选择性地学习。
该指令是用于调整AL之值,该值是二个ASCII码字节相加之和。具体的调整规则如下:
指令的格式:AAA
受影响的标志位:AF和CF(OF、PF、SF和ZF等都是无定义)
例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的值即可。