汇编语言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 格式或非压缩十进制格式,但是乘除法只能使用非压缩十进制数。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算