汇编语言 将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存放进去。如果直接将整个ax
16位存进csg
中,会导致溢出,csg
中的下一个数据单元被ax
的高8位字节覆盖
注释写的很详细,细节写在注释里了
执行过程记录
循环执行前
p指令执行完第一个循环s1
p指令执行完第二个循环s2
代码
;将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