【微機原理】實驗二 循環程序實驗

一. 實驗要求

利用Proteus平臺,建立8086的循環程序的例子。

二. 實驗目的

  1. 熟悉實驗系統的編程和使用。
  2. 掌握使用LOOP判斷轉移指令試驗循環的方法。
  3. 掌握使用LOOP與CX的組合。

三. 實驗說明

由於本實驗是通過給CX一個數值,再通過LOOP作一個判斷CX-1是否爲0的轉移,實現程序的循環,循環的內容是執行AX+1,所以結果應該爲AX最後大小爲開始時給定CX的大小。

四. 實驗程序流程圖

Created with Raphaël 2.2.0將AX初始化爲0將循環次數賦值給CXAX加1將CX減一,再判斷是否爲0結束yesno

五. 實驗步驟

a.仿真代碼

;改變 CX 循環次數 ,驗證AX 是否加1,加了循環的次數
 CODE SEGMENT
      ASSUME CS:CODE
CON_A EQU  25;這兩行沒用,實驗三才用到
CON_B EQU  12       
START:  
	MOV AX,0     ;對AX清零,用於記錄當前是第幾次循環
	MOV CX,5     ;設置循環次數,不可以用別的寄存器,是LOOP語句指定的
INC_AX:	NOP 	 ;啥也不做,LOOP將會跳轉到該標籤
	INC AX       ;循環一次 AX+1
	LOOP INC_AX  ;CX-1 ?=0 不等於循環至INC_AX處
	JMP $        ;原地無限循環
CODE ENDS
        END START

b.調試、驗證

最初AX初始化爲0,CX賦值爲5
在這裏插入圖片描述
經過AX自增語句及LOOP語句後,跳轉回了NOP語句,發現AX加一,CX減一。此後以此類推。

[外鏈圖片轉存失敗(img-puqWPVbj-1569059277421)(F:\常規課程\大三\大三上\微機原理實驗\實驗2 循環程序實驗\2-02.PNG)]

若是在AX執行後,LOOP執行前暫停,就會發現AX加一,但CX未加。這證明了正是LOOP語句對CX進行了減一的操作。

[外鏈圖片轉存失敗(img-uVInAZeJ-1569059277424)(F:\常規課程\大三\大三上\微機原理實驗\實驗2 循環程序實驗\2-03.PNG)]

六. 實驗結果和體會

經過五次循環後,最終結果如圖,AX等於5,表示循環了5次,而跳出循環後,CX一定爲0。
在這裏插入圖片描述
LOOP語句之所以先減後判斷CX是否爲0,就是爲了CX中的數值能剛好對應循環次數,便於程序員使用。程序中INC AX語句的位置可以替換成任何需要被多次調用的程序。使用INC語句的原因有以下幾點:1.運行速度比ADD快(僅指8086這種古老平臺,在現代計算機中可能不成立)2.代碼所佔內存小(這也不是主要原因)3.INC不改變符號位,而ADD會(這纔是主要的,如果循環體中需要用到CF,可能就會因爲這點出問題)

七. 擴展題目程序和實驗結果

;計算2^12結果
 CODE SEGMENT
      ASSUME CS:CODE
CON_A EQU  25
CON_B EQU  12       
START:  
	MOV AX,1	  ;初始化爲1,用來進行乘法與存放結果
	MOV CX,12     ;設置循環次數
INC_AX:	NOP 
	MOV DX,2      ;每次相乘後DX會被清0,因此要再次設置2作爲乘數
	MUL DX      ;AX與DX相乘,結果存於AX
	LOOP INC_AX  ;CX-1 ?=0 不等於循環
	JMP $        ;原地無限循環
CODE ENDS
        END START

最後的結果是1000H,正確。
在這裏插入圖片描述

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