【微機原理】實驗四 內存塊移動實驗

一、實驗要求

​ 利用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個字節數據。在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章