在BUFI和BUF2两个数据区中,各定义有10个带符号字节数据,试编制完整的源程序,求它们对应项的和,并将和数存入以SUM为首址的数据区中考虑求和的溢出)。 DATA SEGMENT BUFI DB -5,24,16,-8,56,.….. BUF2DB 4,-23,12,45,-25,…… SUM DB 10 DUP(0) DATA ENDS
时间: 2023-09-19 18:11:38 浏览: 119
下面是一个汇编程序,可以实现上述功能:
```
ASSUME CS:CODE, DS:DATA
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX ; 初始化数据段寄存器
MOV CX, 10 ; 循环计数器
MOV SI, 0 ; 指向BUFI数组的偏移量
MOV DI, 0 ; 指向BUF2数组的偏移量
MOV BL, 0 ; 进位标志
LOOP_START:
; 计算当前项的和
MOV AL, BUFI[SI]
ADD AL, BUF2[DI]
ADC BL, 0 ; 加上进位标志
MOV SUM[SI], AL ; 存储到SUM数组中
; 更新偏移量
INC SI
INC DI
; 判断是否需要进位
CMP BL, 0
JE NO_CARRY
ADD SUM[SI], 1
MOV BL, 0
NO_CARRY:
LOOP LOOP_START
; 程序结束
MOV AH, 4CH
INT 21H
CODE ENDS
DATA SEGMENT
BUFI DB -5, 24, 16, -8, 56, -2, 10, -15, 3, 7
BUF2 DB 4, -23, 12, 45, -25, 17, -9, 6, -11, 20
SUM DB 10 DUP(0)
DATA ENDS
```
程序的基本思路是:使用 CX 寄存器作为循环计数器,依次计算 BUFI 和 BUF2 数组中对应项的和,并将结果存储到 SUM 数组中。由于每个字节都是带符号的,所以需要考虑溢出的情况。为了判断是否需要进位,使用 BL 寄存器作为进位标志。
在程序执行完毕后,SUM 数组的前 10 个字节中存储的就是 BUFI 和 BUF2 数组对应项的和。注意,由于 SUM 数组也只有 10 个字节,所以如果相加的结果超过了一个字节能够表示的范围,就会产生溢出,这个时候需要丢弃高位,只保留低位部分。
阅读全文