原题
(5)程序如下,编写code段中的代码,将a段和b段中的数据依次相加,将结果存到c段中。
```
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:
?
code ends
end start
```
思路:
因为使用db申请的内存空间,所以1到8这8个数每个占一个字节,所以a段共有八个字节。
同理,b和c段也是8个字节的内存空间。
a段和b段依次相加放到c段,所以要用循环,每次将相加的结果放到c段里。
因为a段和b段的每个内存单元数据一样,个数也一样,所以我们只使用一个段里的数据让每个内存单 元的数据自加就可以了。
代码如下
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start: mov ax,a #将a段的地址 赋值给ax
mov ds,ax #将ds指向a段
mov ax,c #将c段的地址 赋值给ax
mov es,ax #将es指向c段
mov ax,0 # 初始化
mov bx,0
mov cx,8
s: mov al,ds:[bx] #依次拿到a段的每一个内存单元里的数据 1,2,3,4,5,6,7,8 注意数据是一个字节,要使用al
add ax,ax #依次相加 ,考虑到如果内存单元的值最大不是8加完溢出所以我用了ax,这道题用al也可以
mov es:[bx],al #将每一次相加的结果放入c段的每一个内存单元
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
执行结果