微型計算機的程序設計_第1頁
微型計算機的程序設計_第2頁
微型計算機的程序設計_第3頁
微型計算機的程序設計_第4頁
微型計算機的程序設計_第5頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

微型計算機的程序設計第一頁,共二十二頁,2022年,8月28日6.1程序設計步驟匯編語言程序設計的步驟:分析問題,全面理解問題。建立數學模型,確定算法。繪制程序流程圖。內存空間分配:工作區盡可能設在CPU的內部寄存器中。編制程序和靜態檢查程序調試實驗第二頁,共二十二頁,2022年,8月28日6.2簡單程序

程序執行方式為“從頭到尾”逐條執行指令語句,直到程序結束。例6.1:用數學運算命令,對數據段中兩個16位數做加法運算:3281H+2797H。這兩個數從地址10050H開始連續存放,低位在小地址一端,結果放在這兩個數之后。1.分析題目:可用16位寄存器進行運算,一次完成。2.確定方法:采用加法指令實現兩個數相加,采用傳送指令進行存儲。10050H81H32H97H27H

和低8位和高8位

第三頁,共二十二頁,2022年,8月28日6.2簡單程序3.程序流程圖:4.內存空間分配:開始AX被加數+加數(10054)和(10055)單元AX暫停初始化:段地址DS1000H被加數指針SI50H加數指針DI52H和的指針BX54HAX被加數內存地址內容10050H被加數低8位81H10051H被加數高8位32H10052H加數低8位97H10053H加數高8位27H10054H和的低8位10055H和的高8位3281H+2797H第四頁,共二十二頁,2022年,8月28日6.2簡單程序5.編制的程序如下:MOVAX,1000HMOVDS,AX;DS=1000HMOVSI,0050H;被加數地址MOVDI,0052H;加數地址MOVBX,0054H;和的地址CLC;清CFXORAX,AX;清AXMOVAX,[SI];取被加數到AXADDAX,[DI];相加運算,AXAX+[DI]MOV[BX],AX;存一個字到[BX]HLT;暫停為什么用這三個寄存器?為何不把1000H直接賦給DS?這兩條指令是必須有的嗎?在此程序中其他指令不變的情況下,改用ADC可以嗎?第五頁,共二十二頁,2022年,8月28日6.3分支程序利用條件轉移指令,根據條件是否滿足,來改變程序執行的順序。IF…THEN…結構標號:條件滿足?處理NY程序結構:

測試/比較指令(TEST/CMP)

條件轉移指令(Jx標號)

處理體

標號:其他指令

…第六頁,共二十二頁,2022年,8月28日6.3分支程序例6.3:求AX累加器和BX寄存器中兩個無符號數之差的絕對值,結果放在內存數據段(2800H)單元中。1.分析題目:應該先決定哪一個值較大,然后再用大數減去小數,得到絕對值。2.程序流程圖:開始AX-BX>=0?BX

BX-AX內存(2800)和(2801)單元

BX內存(2800)和(2801)單元AX結束YAX

AX-BXN初始化第七頁,共二十二頁,2022年,8月28日6.3分支程序3.編制的程序如下:

CLC;清CFSUBAX,BX;AX

(AX-BX)

JCAA;CF=1轉AA去執行

MOVDI,2800H;結果指針

MOV[DI],AX;結果送到2800H和2801H單元

HLT;暫停AA:SUBBX,AX;BX

(BX-AX)

MOVDI,2800HMOV[DI],BXHLT此指令執行前,AX中的數據是什么?通過這兩條指令能將數據送入[2800H]中嗎?第八頁,共二十二頁,2022年,8月28日6.3分支程序例題6.3程序可編制如下:

MOV DX,0000H MOVDS,DX ;設置段地址

MOVDI,2800H ;結果數據存放地址

CMPAX,BX ;AX-BX,結果影響標志位

JCAA ;若產生借位,則CF=1轉AA SUBAX,BX MOV[DI],AX ;結果送到2800H和2801H單元

HLT ;暫停AA:SUBBX,AX ;BX

(BX-AX)

MOV[DI],BX HLT第九頁,共二十二頁,2022年,8月28日6.3分支程序例:比較AL、BL、CL中帶符號數的大小,將最小數放在AL中。

CMPAL,BL ;AL和BL比較

JNGBBB ;若AL≤BL,則轉BBB XCHGAL,BL ;若AL>BL,則交換BBB: CMPAL,CL ;AL和CL比較

JNGCCC ;若AL≤CL,則轉CCC XCHGAL,CL ;若AL>CL,則交換CCC: HLT第十頁,共二十二頁,2022年,8月28日6.4循環程序循環程序:強制CPU重復執行某一程序段。一般由4部分構成:初始化:建立循環次數計數器,設定數據地址的初值。循環體:要重復執行的程序內容。循環控制:修改變量、修改指針、修改循環計數器。結束處理:分析和存放程序的結果。第十一頁,共二十二頁,2022年,8月28日6.4循環程序循環程序單循環:之有一重循環。多重循環:兩重以上的循環。循環控制計數控制:事先設定循環次數,達到次數停止循環。條件控制:根據是否滿足一定的條件來控制循環。第十二頁,共二十二頁,2022年,8月28日6.4循環程序DO-WHILE結構先執行,再判斷條件。工作部分至少執行一次。初始化循環體循環控制繼續循環?YN第十三頁,共二十二頁,2022年,8月28日6.4循環程序WHILE結構先判斷條件,再執行。工作部分有可能一次都不執行。初始化循環體循環控制繼續循環?YN第十四頁,共二十二頁,2022年,8月28日6.4循環程序例6.5:求兩個多字節數之和,這兩個數在數據段10050H地址開始的內存單元中連續存放,低位在小地址一端,運算結果放在這兩個數之后。設這兩個多字節數均為8個字節長。1.分析題目:86系列指令系統可以進行16位處理,所以,循環次數是4次。2.程序流程圖:3.

編制的程序:開始AXAX+[DI]+CF[BX]AXSISI+2,DIDI+2BX

BX+2,CXCX-1暫停初始化段地址DS=1000H第一個數指針SI=50H第二個數指針DI=58H結果指針BX=60H循環次數CX=4清除進位位CFAX取一個字CX=0?YN第十五頁,共二十二頁,2022年,8月28日START:MOVAX,1000HMOVDS,AX;DS=1000HMOVSI,50H;第一個數指針

MOVDI,58H;第二個數指針

MOVBX,60H;結果指針

MOVCX,4;循環次數CX=4CLC;清CFAA:MOVAX,[SI];取一個字到AXADCAX,[DI];AX<-AX+[DI]+CFMOV[BX],AX;存一個字到[BX]PUSHF

;保護進位位CFADDSI,2;修改第一個數的地址指針

ADDDI,2;修改第二個數的地址指針

ADDBX,2;修改結果指針

POPF

;恢復標志寄存器

LOOPAA;CX減1,若不為0,轉AAHLT;CX為0,暫停為何要保護CF?第十六頁,共二十二頁,2022年,8月28日6.5子程序主程序IP繼續執行主程序執行子程序轉子程序入棧出棧返回主程序主程序IPIP(下)轉子程序1返回主程序IP’執行子程序2轉子程序2返回子程序1IP’(下)執行子程序1繼續執行子程序1(a)主程序調子程序;(b)子程序嵌套示意圖入棧出棧IP(下)繼續執行主程序入棧出棧第十七頁,共二十二頁,2022年,8月28日6.5子程序

子程序調用與返回調用子程序用CALL指令,返回調用程序用RET指令。子程序調用實際是程序的轉移,但是和轉移指令有所不同。子程序調用指令CALL執行時要保護返回地址,而轉移指令不考慮返回問題。每個子程序都由CALL指令負責將返回地址入棧,由RET指令負責把壓入棧區的返回地址出棧,即送到IP或者CS:IP(段間返回),實現子程序返回。第十八頁,共二十二頁,2022年,8月28日6.5子程序

注意的問題:子程序保護與恢復。進入子程序后首先要保護主程序的標志位和使用的寄存器內容,退出子程序前要恢復保護的內容。一般在調用子程序后由子程序前部操作完成現場保護,再由子程序后部完成現場恢復。現場信息可以壓入堆棧,或者傳入不被占用的存儲單元。參數傳遞。調用前要預先確定子程序中要使用哪些寄存器,并定義入口參數和出口參數。參數傳遞可利用寄存器、存儲單元或堆棧。子程序說明。每個子程序應該有必要的使用注釋。第十九頁,共二十二頁,2022年,8月28日6.5子程序例6.8:找出一個數據塊中的最大數。其中,數據塊的長度>1,并且放在內存(2001H)單元中,而數據塊本身是從(2002H)單元開始存放的,最后,把找出的最大數放到(2000H)單元中。假設這段數據塊中的數都是無符號的8位數。1.分析題目:此程序為循環程序,并且在處理部分應該包括判斷分支的環節。2.尋找最大值的方法: 預先把00H放在AL累加器中,依次與數據塊中的數據進行比較,若比AL中的大,則取而代之。3.程序流程圖:圖6-15。第二十頁,共二十二頁,2022年

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論