【第六章】实验5 编写、调试具有多个段的程序

1.PNG

我的答案:运用段寄存器,对单字节进行操作

assume cs:code,ds:a,ss:b,es:c

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
	mov ds,ax
	
	mov ax,b
	mov ss,ax
	mov sp,0000

	mov ax,c
	mov es,ax

	mov cx,8
	mov bx,0
s:	pop ax
	dec sp ;pop一次sp+2,我们想操作单字节,需要将pop-1
	mov es:[bx],al  ;低位存储的是低地址的数据

	mov ax,ds:[bx]
	add es:[bx],al
	inc bx
	loop s

	mov ax,4c00h
	int 21h
code ends
end start

官方答案:

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
	mov ds,ax
	
	mov cx,8
	mov bx,0
s:
	;每次虽然加上一个字的数据,但是更新后并不影响
	mov ax,ds:[bx]
	add bx,20h
	mov ds:[bx],ax
	sub bx,10h
	mov ax,ds:[bx]
	add bx,10h
	add ax,ds:[bx]
	mov ds:[bx],ax
	sub bx,20h
	
	inc bx
	loop s
code ends

end start

更简洁的写法:

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
	mov ds,ax
	
	mov cx,8
	mov bx,0
s:
	
	mov ax,ds:[bx]
	mov ds:20h[bx],ax
	mov ax,ds:10h[bx]
	add ax,ds:20h[bx]
	mov ds:20h[bx],ax
	
	inc bx
	loop s
code ends

end start
————————————————
版权声明:本文为CSDN博主「ChenyangDu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:<https://blog.csdn.net/happy_Du/article/details/107395870>