汇编语言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 格式或非压缩十进制格式,但是乘除法只能使用非压缩十进制数。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频