实验5 编写、调试具有多个段的程序

这个实验开始的填空题我就不写了,想看的引入别人的文章:点击打开链接


解释一下三个填空题目的区别:

1和2的区别就是无论你的段申请够不够16个字节,计算机都会帮你直接申请够一行,也就是16个字节。

所以第2题最后一个填空题答案为((n/16)+1)*16    其中(n/16)就是判断你申请的有木有超过一行,因为会去掉小数,所以要加上1,最后乘回16就是答案


2和3的却别就是你定义的段在不同位置,他们开始的段地址也会不同


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:
	mov ax,a 
	mov ds,ax	;将ds指向a数据段
	
	mov ax,b
	mov ss,ax	;将ss指向b数据段
	
	mov ax,c 
	mov es,ax	;es指向c的数据段
	mov bx,0
	
	mov cx,8
s0:	mov ax,ds:[bx]
	add ax,ss:[bx]
	mov es:[bx],ax
	inc bx
	loop s0
	

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

只需要将a、b、c段分给三个不同的段寄存器,然后循环8次相加就行,注意的是要用寄存器来写入内存,不能直接写入。


6、程序如下,编写code段总的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中。

assume cs:code
a segment
	dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
	dw 0,0,0,0,0,0,0,0
b ends

code segment

start:
	mov ax,a 
	mov ds,ax
	mov bx,0

	mov ax,b
	mov ss,ax
	mov sp,10h
	
	mov cx,8
s:	push [bx]
	add bx,2
	loop s 
	
	mov ax,4c00h
	int 21h

code ends

end	start

分析:这个实验跟上一个实验是一样的想法,就是先定好段寄存器。然后push就ok了

猜你喜欢

转载自blog.csdn.net/a673953508/article/details/80714996
今日推荐