汇编语言 将a段和b段中的数据依次相加,结果存放在c段中

题目要求

将a段和b段中的数据依次相加,结果存放在c段中

思路

先将asg的数据放进csg中
把bsg的数据与csg中的数据相加,存到csg中

注意

db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1

dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2

dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4

易错:本题中用db定义,所以用ax接收时应该接收到al中,向csg中存放时,用al存放进去。如果直接将整个ax16位存进csg中,会导致溢出,csg中的下一个数据单元被ax的高8位字节覆盖

注释写的很详细,细节写在注释里了

执行过程记录

循环执行前
汇编语言 将a段和b段中的数据依次相加,结果存放在c段中
p指令执行完第一个循环s1
汇编语言 将a段和b段中的数据依次相加,结果存放在c段中
p指令执行完第二个循环s2
汇编语言 将a段和b段中的数据依次相加,结果存放在c段中

代码

汇编语言 将a段和b段中的数据依次相加,结果存放在c段中

;将a段和b段中的数据依次相加,结果存放在c段中

assume cs:code,ds:asg,ds:bsg,ds:csg

asg segment
	db 1,2,3,4,5,6,7,8	;注意:db每个操作数占一个字节
asg ends

bsg segment
	db 1,2,3,4,5,6,7,8
bsg ends

csg segment
	db 0,0,0,0,0,0,0,0
csg ends

code segment

start:	
		;把asg的数据放进csg中
		mov ax,asg	;asg地址放在ax中
		mov dx,csg	;csg地址放在dx中
		
		mov ds,ax	;asg地址放在ds中
		mov ss,dx	;csg地址放在ss中
		mov bx,0	;偏移地址
		mov cx,8	;循环8次
		
s1:		mov al,ds:[bx]	;把asg数据复制到al中
		mov ss:[bx],al	;把al数据复制到csg中
		inc bx			;偏移++
		loop s1
		
		
		;把bsg的数据加到csg中
		mov ax,bsg	;bsg地址放在ax中
		mov ds,ax	;bsg地址放在ds中
		
		mov bx,0	;控制偏移地址
		mov cx,8	;循环8次
		
s2:		mov al,ds:[bx]	;把bsg数据复制到al中
		mov ah,0h		;高位补0
		mov dl,ss:[bx]	;把csg数据复制到dl中
		mov dh,0h		;高位补0
		add ax,dx		;把dx数据加上ax数据存在ax中
		mov ss:[bx],al	;把al数据复制到csg中(注意不要用ax,否则溢出覆盖后面的数据)
		inc bx
		loop s2
		
		mov ax,4c00h
		int 21h
		
code ends
end start