汇编语言实验5 第(5)题

本文介绍了一个使用8086汇编语言实现的循环相加程序,该程序将两个预定义的数据段中的元素逐一相加,并将结果存储在第三个数据段中。通过详细解析代码,展示了如何利用寄存器和循环指令来完成这一任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题
(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

执行结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值