欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实验四 内存块移动实验

程序员文章站 2022-03-15 14:52:43
...

一、实验要求

​ 利用PROTEUS平台,建立8086 的内存块移动的例子。

二、实验目的

1.熟悉实验系统的编程和使用。

2.了解内存的移动方法。

3.加深对存储器读写的认识。

三、实验说明

程序要求把内存中一数据区(称为源数据块)传送到内存另一数据区(称为目的数据块)。源数据块和目的数据块在存贮中可能有三种情况,如下图所示。

实验四 内存块移动实验

对于两个数据块分离的情况,如图(a),数据的传送从据块的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。

可以得出如下结论:当源数据块首址大于目的块首址时,从数据块首地址开始传送数据。当源数据块首址小于目的块首址时,从数据块末址开始传送数据。

四、实验程序流程图

实验四 内存块移动实验

五、实验步骤

a.仿真代码

CODE SEGMENT 
       ASSUME  CS:CODE
START:  
			MOV SI,1000H;源内存
			MOV CX,100;准备存储的字节区
			MOV AL,1;初始化AL,作为被存储的数据
PU_IN:	MOV [SI],AL ;先存入1000H开始的100个字节数据为1到100
			INC AL  ;数字加一
			INC SI;指向下一个空白字节
			LOOP PU_IN
			
			MOV CX,100  ;准备移动的内存大小(字节单位)
        	MOV SI,1000H;源内存地址
        	MOV DI,1100H ;目标内存地址

FADR:  MOV AL,[SI]			;将[si]的数据存入[di]
			MOV [DI],AL		;由于禁止内存间数据直接传输,故需要AL作为中介
        	INC SI
        	INC DI
        	DEC CX			;表示已处理完一个字节
        	JNE FADR		;当CX=0时跳出循环
        	JMP $
CODE   ENDS
       		END START

b.调试、验证

在执行第一段循环后从1000H开始的内存中存储了从1H到64H共100字节的数据。
实验四 内存块移动实验
执行了内存块移动部分的代码后发现从1100H开始的地址内存了那100字节数据,且源数据不变。这说明内存块移动实验成功

实验四 内存块移动实验

六. 实验结果和体会

以上即为实验结果。由于源内存块与目的内存块没有交集,复制顺序随意。这里采用从头开始移动数据的方法。这段程序采用了两种循环方式,一种是使用LOOP,一种是DEC CX后判断JNE。

七. 扩展题目程序和实验结果

要求:将1000H开始的10个字节转存到1005H开始的10个字节。注意内存块之间有重叠哦。

;MOV RAM:1000H开始的10个字节
;转存到  1005H开始的10个字节
CODE SEGMENT
       ASSUME  CS:CODE
START:  
	MOV SI,1000H
	MOV CX,10
	MOV AL,0
PU_IN:	
	MOV [SI],AL	;先存入1000H开始的100个字节数据为0到9H
	INC AL
	INC SI
	LOOP PU_IN  ;直到存储满10个字节到1000H那片内存
	MOV CX,10	
    MOV SI,1009H	;源内存的尾地址
    MOV DI,100EH	;目标内存的尾地址1005H+9H=100EH

FADR:   
	MOV AL,[SI]		;从后向前进行复制
	MOV [DI],AL
    DEC SI			;将SI、DI指向前一块内存
    DEC DI
    DEC CX
    JNE FADR
    JMP $
CODE   ENDS
        END START

实验开始前从1000H开始的内存存储着0到9共10个数据。

实验四 内存块移动实验

实验结束后可以看到从1005H开始的内存被覆盖,而出现了新的0到9共10个字节数据。实验四 内存块移动实验