汇编语言程序设计(东北大学信息学院)第10章 算术运算与代码转换
本章节主要介绍了汇编语言程序设计中的算术运算和代码转换,包括多字节加减运算、多字节整数乘除运算、BCD 码运算、浮点数的加减法、二进制定点数与十进制数的ASCII 码串转换等内容。
10.1 多字节加减运算
在汇编语言中,多字节加减运算是指对多字节数据的加减运算。例如,假设我们有两个多字节数据DATA1 和 DATA2,数据长度在 LEGH 单元存放。我们可以编制程序计算两个数据之和并存入 SUM 开始的单元。程序清单如下所示:
DSEG SEGMENT
DATA1 DB 85H, 27H, 4AH ; (4A2785H)
DATA2 DB 93H, 87H, 65H ; (658793H)
LEGH DW 3
SUM DB 3 DUP (0)
DSEG END
CSSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG
START:
MOV AX, DSEG
MOV DS, AX
LEA SI, DATA1
LEA DI, DATA2
LEA BX, SUM
MOV CX, LEGH
CLC
AGAIN:
MOV AL, [SI]
ADC AL, [BX]
MOV [DI], AL
INC SI
INC BX
INC DI
LOOP AGAIN
MOVAH, 4CH
INT 21H
CSSEG END
START 34 ADC
BYTE PTR [DI], 0
10.2 多字节整数乘除运算
多字节整数乘除运算是指对多字节整数的乘除运算。例如,假设我们有两个多字节整数,需要计算它们的乘积。我们可以使用以下算法:
(1)取乘数和被乘数;
(2)中间结果单元清零;
(3)若乘数为零则结束乘法;
(4)乘数逻辑右移一位,最低位移入进位标志 CF 中,如果 CF 为零则转第(6)步;
(5)中间结果加上被乘数;
(6)被乘数左移一位;
(7)重复第 3、4、5、6 步,直到乘完所有位。
我们可以编制一个子程序来实现这个算法,例如:
MUL8 PROC
XOR AH, AH
XOR DX, DX
MUL80:
OR BL, BL
JNZ MUL81
RET
MUL81:
SHR BL, 1
JNC MUL82
ADD DX, AX
MUL82:
SHL AX, 1
JMP MUL80
MUL8 ENDP
这个子程序可以实现两个单字节数据的乘法运算,我们可以根据需要将其修改为多字节整数乘法运算。
10.3 BCD 码运算
BCD 码运算是指对 Binary-Coded Decimal 码的运算。例如,我们可以使用以下算法实现BCD 码的加减运算:
(1)将两个BCD 码相加减,结果存放在第三个BCD 码中;
(2)对结果进行调整,使其符合BCD 码的格式。
10.5 浮点数的加减法
浮点数的加减法是指对浮点数的加减运算。例如,我们可以使用以下算法:
(1)将两个浮点数相加减,结果存放在第三个浮点数中;
(2)对结果进行调整,使其符合浮点数的格式。
10.7 二进制定点数与十进制数的ASCII 码串转换
二进制定点数与十进制数的ASCII 码串转换是指将二进制定点数转换为十进制数的ASCII 码串,或者将十进制数的ASCII 码串转换为二进制定点数。例如,我们可以使用以下算法:
(1)将二进制定点数转换为十进制数的ASCII 码串:
(a)将二进制定点数转换为十进制数;
(b)将十进制数转换为ASCII 码串。
(2)将十进制数的ASCII 码串转换为二进制定点数:
(a)将ASCII 码串转换为十进制数;
(b)将十进制数转换为二进制定点数。
这章节中,我们学习了汇编语言程序设计中的算术运算和代码转换,包括多字节加减运算、多字节整数乘除运算、BCD 码运算、浮点数的加减法、二进制定点数与十进制数的ASCII 码串转换等内容。这些知识点对于编程和计算机科学的学习和研究非常重要。