用emu8086编写程序设计,设从BUF开始存放有若干无/带符号字节数,将它们相加并将结果(超过一个字节范围)存放到字单元SUM中。
时间: 2024-05-08 19:16:17 浏览: 151
以下是使用emu8086编写的程序,实现将BUF中的字节相加,并将结果存储在SUM中。
```
.model small
.stack 100h
.data
BUF db 4, -6, 10, -2, 8, -3, 6, -1
SUM dw ?
.code
main proc
mov ax, @data
mov ds, ax
mov si, offset BUF ; 将si指向BUF开始
mov cx, 8 ; BUF中有8个字节需要相加
mov bx, 0 ; 将bx初始化为0,用于存储和值
sum_loop:
mov al, [si] ; 将当前字节的值加载到al
add bx, al ; 将当前字节的值加到bx中
inc si ; 指向BUF中的下一个字节
loop sum_loop ; 循环执行,相加所有字节
mov ax, bx ; 将和值存储到ax中
mov [SUM], ax ; 将和值存储到SUM中
mov ah, 4ch ; 终止程序
int 21h
main endp
end main
```
解释:
1. 首先,我们定义了BUF的初始值和SUM的存储单元。
2. 在程序的main过程中,我们将DS寄存器设置为数据段的基地址。
3. 我们使用SI寄存器来指向BUF的开始,并将CX寄存器设置为BUF中需要相加的字节数。
4. 我们使用BX寄存器来存储和值,并将其初始化为0。
5. 在sum_loop标签下,我们使用AL寄存器来加载当前字节的值,并将其加到BX寄存器中。
6. 我们使用INC指令将SI寄存器指向BUF中的下一个字节,并使用LOOP指令循环执行sum_loop标签下的代码,直到相加所有字节。
7. 在执行完循环后,我们将和值存储到AX寄存器中,并将其存储到SUM中。
8. 最后,我们使用INT 21h指令调用DOS系统中的终止程序来结束程序的执行。
注意:当和值超过一个字节范围时,只有低字节会存储在SUM中。如果需要处理高字节,需要使用16位寄存器。
阅读全文