经典汇编语言教程:5.2.12-ASCII-BCD调整指令

5.2.12-ASCII-BCD调整指令

前面介绍的算术运算指令都是针对二进制数进行操作的指令,但对绝大多数人来说,十进制是最简单、熟悉的。为了方便按十进制数进行算术运算,指令系统专门提供了一组十进制运算调整指令。

虽然人们会觉得按十进制进行算术运算很自然,但计算机要化更多的时间来完成相应操作。在通常情况下,这组指令很少被程序员运用在实际的程序之中。所以,这组指令的使用率较低,可以根据需要有选择性地学习。

1、ASCII码加调整指令AAA(AsciiAdjust After Addition)

该指令是用于调整AL之值,该值是二个ASCII码字节相加之和。具体的调整规则如下:

◆、若AL的低四位大于9,或标志位AF=1,则,AH=AH+1,AL=AL+6,并置AF和CF为1,否则,只置AF和CF为0;
◆、清除AL的高四位。

图5.20 AAA指令执行过程示意图

指令的格式:AAA
受影响的标志位:AF和CF(OF、PF、SF和ZF等都是无定义)

例5.21编写一段程序,完成二个15位十进制数X和Y之和,并把计算结果存入X之中。假设数据X和Y都是以字符串形式表示的。

解:
Xdb "456407983123186";任意假设二个15位的大数
Ydb "326676709587211"
CLC
MOVSI, 14;用变址寄存器SI来从字符串的后面向前访问
MOVCX, 15;因为它们是二个15位十进制数
loop1:MOVAL, X[SI]
ADCAL, Y[SI];把被加数加上
AAA
MOVX[SI], AL
DECSI
LOOPloop1;15位十进制数相加完毕
LEABX, X;下面5条指令是把X中的数据变成对应的字符
MOVCX, 15
loop2:ADDbyte ptr [BX], '0'
INCBX
LOOPloop2

从上例可以看出,其实任意位的十进制数也都是可以的,只要改变CX的值即可。

2、ASCII码减调整指令AAS(AsciiAdjust After Subtraction)

该指令是用于调整AL之值,该值是二个ASCII码字节相减之差。具体的调整规则如下:

◆、若AL的低四位大于9,或标志位CF=1,则,AH=AH-1,AL=AL-6,并置AF和CF为1,否则,只置AF和CF为0;
◆、清除AL的高四位。

指令的格式:AAS
受影响的标志位:AF和CF(OF、PF、SF和ZF等都是无定义)

图5.21 AAS指令执行过程示意图

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号