实现两个十六位二进制数的加法。要求加数放在FIRST开始单元,被加数放在SECOND开始单元,和数放在SUM单元。
时间: 2024-03-24 20:40:22 浏览: 12
程序如下:
```
ORG 100H
MOV CX, 10 ; 循环10次,即10个16位二进制数
MOV SI, 0 ; FIRST数组的偏移地址
MOV DI, 0 ; SECOND数组的偏移地址
MOV BX, 0 ; 进位变量
ADD_LOOP:
MOV AX, [FIRST + SI] ; 取出第一个加数
MOV DX, [SECOND + DI] ; 取出第二个加数
ADD AX, DX ; 加法运算
ADD AX, BX ; 加上进位
MOV [SUM + SI], AX ; 将结果存入和数组中
MOV BX, 0 ; 清零进位
JC CARRY ; 若有进位,则跳转到CARRY处理
JMP NO_CARRY ; 否则跳转到NO_CARRY处理
CARRY:
INC SI ; 处理下一位
MOV BX, 1 ; 设进位为1
CMP SI, 20H ; 判断是否处理完10个16位二进制数
JE END_LOOP ; 若已经处理完,则跳转到END_LOOP
JMP ADD_LOOP ; 否则继续加法运算
NO_CARRY:
INC SI ; 处理下一位
CMP SI, 20H ; 判断是否处理完10个16位二进制数
JE END_LOOP ; 若已经处理完,则跳转到END_LOOP
JMP ADD_LOOP ; 否则继续加法运算
END_LOOP:
MOV AX, 4C00H ; 程序结束
INT 21H
FIRST DW 1234H, 2345H, 3456H, 4567H, 5678H, 6789H, 7890H, 8901H, 9012H, 0123H
SECOND DW 3210H, 4321H, 5432H, 6543H, 7654H, 8765H, 9876H, 0987H, 1098H, 2109H
SUM DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
```
其中,FIRST数组存放第一个十六位二进制数,SECOND数组存放第二个十六位二进制数,SUM数组存放和数。每次循环从FIRST和SECOND数组中取出一个数进行加法运算,并将结果存入SUM数组中。若有进位,则在下一次加法运算时加上进位。最后将和数存储在SUM数组中。