汇编语言ASCII和非压缩十进制运算
到目前为止,本教程讨论的整数运算处理的都是二进制数。虽然 CPU 用二进制运算,但是也可以执行 ASCII 十进制串的运算。使用后者进行运算,对用户而言既便于输入也便于在控制台窗口显示,因为不用进行二进制转换。
假设程序需要用户输入两个数,并将它们相加。若用户输入 3402 和 1256,则程序输出如下所示:
1) 将两个操作数都转换为二进制,进行二进制加法,再将和数从二进制转换为 ASCII 数字串。
2) 直接进行数字串的加法,按序相加每对 ASCII 数字(2+6、0+5、4+2、3+1)。和数为 ASCII 数字串,因此可以直接显示在屏幕上。
第二种方法需要在执行每对 ASCII 数字相加后,用特殊指令来调整和数。有四类指令用于处理 ASCII 加法、减法、乘法和除法,如下所示:
下面的例子展示了 3402 用这两种类型存放的格式:
尽管 ASCII 运算执行速度比二进制运算要慢很多,但是它有两个明显的优点:
1) 不必在执行运算之前转换串格式。
2) 使用假设的十进制小数点,使得实数操作不会出现浮点运算的舍入误差的危险。
ASCII 加减法运行操作数为 ASCII 格式或非压缩十进制格式,但是乘除法只能使用非压缩十进制数。
假设程序需要用户输入两个数,并将它们相加。若用户输入 3402 和 1256,则程序输出如下所示:
输入第一个数: 3402
输入第二个数: 1256
和数: 4658
1) 将两个操作数都转换为二进制,进行二进制加法,再将和数从二进制转换为 ASCII 数字串。
2) 直接进行数字串的加法,按序相加每对 ASCII 数字(2+6、0+5、4+2、3+1)。和数为 ASCII 数字串,因此可以直接显示在屏幕上。
第二种方法需要在执行每对 ASCII 数字相加后,用特殊指令来调整和数。有四类指令用于处理 ASCII 加法、减法、乘法和除法,如下所示:
AAA | (执行加法后进行 ASCII 调整) | AAM | (执行乘法后进行 ASCII 调整) |
AAS | (执行减法后进行 ASCII 调整) | AAD | (执行除法前进行 ASCII 调整) |
ASCII 十进制数和非压缩十进制数
非压缩十进制整数的高 4 位总是为零,而 ASCII 十进制数的高 4 位则应该等于 0011b。在任何情况下,这两种类型的每个数字都占用一个字节。下面的例子展示了 3402 用这两种类型存放的格式:
尽管 ASCII 运算执行速度比二进制运算要慢很多,但是它有两个明显的优点:
1) 不必在执行运算之前转换串格式。
2) 使用假设的十进制小数点,使得实数操作不会出现浮点运算的舍入误差的危险。
ASCII 加减法运行操作数为 ASCII 格式或非压缩十进制格式,但是乘除法只能使用非压缩十进制数。