匯編語言程序設計(II)_第1頁
匯編語言程序設計(II)_第2頁
匯編語言程序設計(II)_第3頁
匯編語言程序設計(II)_第4頁
匯編語言程序設計(II)_第5頁
已閱讀5頁,還剩37頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、2022-3-221微型計算機原理與接口技術微型計算機原理與接口技術第四章第四章 匯編語言程序設計(匯編語言程序設計(II)熊旺平熊旺平2022-3-222l 程序設計方法概述程序設計方法概述l 結構化程序設計方法結構化程序設計方法q順序結構q分支結構q循環結構q子程序結構l宏匯編和條件匯編宏匯編和條件匯編2022-3-223 能讀懂匯編語言源程序能讀懂匯編語言源程序 掌握匯編語言程序設計的基本方法掌握匯編語言程序設計的基本方法 能根據給定問題能根據給定問題,進行一般的匯編程序設計進行一般的匯編程序設計2022-3-224一個好的程序須具備如下特點:一個好的程序須具備如下特點:l程序結構模塊化

2、,易讀,易調試及維護。程序結構模塊化,易讀,易調試及維護。l執行速度快。執行速度快。l占用內存空間小。占用內存空間小。2022-3-225n 分析問題,抽象出描述問題的數學模型,并確定實分析問題,抽象出描述問題的數學模型,并確定實現數學模型的算法。現數學模型的算法。n 繪制程序流程圖,先畫各大模塊,再細化各子模塊。繪制程序流程圖,先畫各大模塊,再細化各子模塊。n 分配存儲空間及工作單元。分配數據段、堆棧段、分配存儲空間及工作單元。分配數據段、堆棧段、代碼段各在內存什么位置,各個寄存器主要做什么代碼段各在內存什么位置,各個寄存器主要做什么用。用。n 按流程圖設計編寫程序按流程圖設計編寫程序n 靜

3、態檢查,上機調試。靜態檢查,上機調試。n 程序運行,分析結果。程序運行,分析結果。程序設計的基本步驟程序設計的基本步驟2022-3-226 一方面學習結構化編程,另一方面進一步學一方面學習結構化編程,另一方面進一步學習和掌握匯編語言程序設計的特點和技巧。習和掌握匯編語言程序設計的特點和技巧。n順序結構順序結構n分支結構分支結構n循環結構循環結構1.子程序結構子程序結構2022-3-227微機原理與應用微機原理與應用2022-3-228l教材教材P171 例例4-64lExercises1 說明程序中說明程序中 AND AL,0FH 的的作用作用l友情提示友情提示:從鍵盤輸入值的特點考慮從鍵盤輸

4、入值的特點考慮lExercises2l 用用XLAT表轉換指令完成上述求平方根程序表轉換指令完成上述求平方根程序l友情提示友情提示:可參考教材可參考教材P74 指令指令2022-3-229分支結構分支結構一般分支結構一般分支結構實現方法舉例實現方法舉例多分支結構多分支結構1 直接應用條件轉移實現直接應用條件轉移實現逐個判斷逐個判斷,運行速度慢運行速度慢2 利用跳轉表實現利用跳轉表實現可直接找到入口地址可直接找到入口地址2022-3-2210 內存中有一個字符串其始地址為內存中有一個字符串其始地址為BUF,字符串長,字符串長度度NDH,字母,字母A-Z(41H-5AH)的個數)的個數-DL,其,

5、其余字符的個數余字符的個數=N-DH-DL。 DATA SEGMENT BUF DB N ;數組個數數組個數 DB 01H,32H,43H,49H,41H,54H DB 3 DUP(0) ;留留3個單元個單元存結果存結果DATA ENDSl ASCII09 0011000000111001 AF 010000010100011039H 9 3AH58D A 41H65D 587652022-3-2211CODE MOV CH, N ;字符串長度字符串長度 MOV BX, 1 ;地址基準地址基準 MOV DX, 0 ;DH,DL清零清零LP: MOV AH, BUFBX ;取一字符取一字符 CM

6、P AH, 30H JL NEXT ;9,轉是否為字轉是否為字母母 INC DH ;是數字是數字,個個數加數加1 JMP NEXTABC: CMP AH, 41H ;判斷是否為字母判斷是否為字母 JL NEXT ;Z轉出轉出 INC DL ;字母個數加字母個數加1NEXT:INC BX DEC CH JNZ LP MOV BUFBX, DH MOV BUFBX+1, DL MOV AH,N SUB AH, DH SUB AH, DL MOV BUFBX+2, AH2022-3-2213lExercises1l若要求分別計算出數字若要求分別計算出數字09和字母和字母az和其他符號的個數,應如何修

7、改和其他符號的個數,應如何修改程序?程序?2022-3-2214l最簡單的方法:利用多個條件轉移指令來實最簡單的方法:利用多個條件轉移指令來實現現l速度優化的方法:利用跳轉表來實現速度優化的方法:利用跳轉表來實現q根據表內地址分支l跳轉表中存放了每個分支的入口地址跳轉表中存放了每個分支的入口地址q根據表內指令分支l跳轉表中跳轉表中直接直接存放了轉移指令存放了轉移指令q根據關鍵字分支l跳轉表中存放了關鍵字和入口地址跳轉表中存放了關鍵字和入口地址q關鍵是提供了一種找到分支程序入口地址的方法2022-3-2215l簡單多分支程序示例:簡單多分支程序示例:有有8個加工子程序,入口地址分個加工子程序,入

8、口地址分別為別為P1,P2,P3 P8。編程實現檢測鍵盤輸入命令,。編程實現檢測鍵盤輸入命令,使系統分別轉向使系統分別轉向8個加工程序。個加工程序。MOV AH,1INT21HCMP AL,1JEP1CMP AL,2JEP2CMP AL,8JEP8JMP STP1:P2:P8:ST:HLT請指出程序中的存在的問題請指出程序中的存在的問題2022-3-2216l用跳轉表實現多分支用跳轉表實現多分支P2高位高位P2低位低位P1高位高位P1低位低位BASEBASEBASEBASE2 2P1P1P2P2P2高位高位P2低位低位E9P1高位高位P1低位低位E9BASEBASEJMP P1JMP P1JM

9、P P2JMP P2383231BASEBASE關鍵字值關鍵字值P1P1程序程序入口地址入口地址P2P2程序程序入口地址入口地址P8P8程序程序入口地址入口地址根據表內地址分支根據表內地址分支 根據表內指令分支根據表內指令分支 根據關鍵字分支根據關鍵字分支2022-3-2217l用跳轉表實現多分支用跳轉表實現多分支DATA SEGMENTBASE DB E9,P1低低,P1高高,E9 DB E9E9,P9低低,P9高高DATA ENDSMOV AH,1INT 21HAND AL,0FHMOV AH,0MOV BL,ALADD AL,ALADD AL,BLMOV BX,OFFSET BASEAD

10、D BX,AXJMP BXP2高位高位P2低位低位E9P1高位高位P1低位低位E9BASEBASEJMP P1JMP P1JMP P2JMP P22022-3-2218l設有首地址為設有首地址為BUFFER的數組,已按升序排好,數組長度為的數組,已按升序排好,數組長度為N(10),),在該數組中查找數在該數組中查找數M(80),若找到則從數組中刪除,若找不到將它插),若找到則從數組中刪除,若找不到將它插入正確的排序位置,入正確的排序位置,DX中記錄數組最后的長度。中記錄數組最后的長度。DATA SEGMENTBUFFERDW5,10,32,47,53,77,89,106,115,124NDB1

11、0MEQU80DATA ENDSCODEMOVAX,M;待查數;待查數MOVCX,N;記數;記數MOVDX,NMOVDI,OFFSET BUFFERCLD2022-3-2219REPNESCASW;串掃描查找串掃描查找JEDEL;查到;查到ZF1DECDX;未查到,此數插入正確位置;未查到,此數插入正確位置MOVSI,DX;關鍵字與最后一個數比較;關鍵字與最后一個數比較ADDSI,DX;計算最后一個數的指針計算最后一個數的指針(字字)L1:CMPAX,BUFFERSIJLL2;關鍵字比數組中的某個字小;關鍵字比數組中的某個字小MOVBUFFERSI+2,AX ;否則插在后面;否則插在后面JMP

12、L3L2:MOVBX,BUFFERSI;數組下移一位;數組下移一位MOVBUFFERSI+2,BXSUBSI,2JMPL1L3:ADDDX,2JMPNEXT12022-3-2220DEL:JCXZ NEXT ;找到,刪除此元素;找到,刪除此元素DEL1: MOVBX,DI;其后元素依次前移;其后元素依次前移MOVDI-2,BXADDDI,2LOOP DEL1NEXT: DECDX;改變數組長度;改變數組長度NEXT1: RET2022-3-2221l循環結構的關鍵:循環結構的關鍵:循環控制循環控制循環結構分類循環結構分類先執行,后判斷先執行,后判斷先判斷,后執行先判斷,后執行(1 1)初始化:

13、為循環作準備,設置循環計數器,設置變量初值。)初始化:為循環作準備,設置循環計數器,設置變量初值。(2 2)循環體:循環的核心,包括循環的全部執行指令。)循環體:循環的核心,包括循環的全部執行指令。(3 3)修改參數:修改操作數地址,為下次循環作準備。)修改參數:修改操作數地址,為下次循環作準備。(4 4)循環控制:修改計數器值,判斷循環控制條件,決定是否跳)循環控制:修改計數器值,判斷循環控制條件,決定是否跳 出循環。出循環。u一般的循環控制可以由一般的循環控制可以由LOOPLOOP或條件跳轉語句完成。或條件跳轉語句完成。u若循環中有不同的操作要求,若循環中有不同的操作要求,可以用邏輯尺的方

14、法實現可以用邏輯尺的方法實現2022-3-2222MOVSI,OFFSET BUFMOV CH,4NEXT:MOVCL,4ROLBX,CLMOVAL,BLANDAL,0FHADDAL,30HCMPAL,3AHJLSTOREADDAL,7 STORE:MOVSI,AL MOVAH,2MOVDL,ALINT21HINCSIDECCHJNZNEXTHLT將將BX中的中的16進制數轉換為進制數轉換為ASCII碼,存放到碼,存放到BUF開始的內存單元中去,開始的內存單元中去,并在屏幕上顯示出來。并在屏幕上顯示出來。BX 1001 0100 1111 0111AL 0011 1001ASCII09 001

15、1000000111001 AF 010000010100011039H 9 3AH58D A 41H65D 587652022-3-2223l在循環工程中,有時要求按不同的次序處理兩種函數操作,在循環工程中,有時要求按不同的次序處理兩種函數操作,可用邏輯尺方法完成。可用邏輯尺方法完成。l某個采樣系統,第某個采樣系統,第1,2,5,7,10次采樣時,采用次采樣時,采用FUN1計算公式計算,第計算公式計算,第3,4,6,8,9次采樣時采用次采樣時采用FUN2計算公式計算,試編程完成該任務。計算公式計算,試編程完成該任務。l任務分析:任務分析:q可以設置一個開關位,分別用0(FUN1)或1(FUN

16、2)表示不同的計算公式q在具體實現時可以用位串來表示,每次循環都將位串中的一位左移至CF,用CF來控制不同分支。實現此控制的位串稱為邏輯尺。q根據要求,本例中的位串為 0011 0101 1000 0000 2022-3-2224FUN1=X+5FUN2=X-3DATA SEGMENTLOGRULEQU 0011010110000000B ;邏輯尺邏輯尺COUNTEQU10;循環次數;循環次數BUFDB20DUP(?);采集數據;采集數據BLOCKDB20DUP(?);處理后數據;處理后數據DATA ENDSCODE 2022-3-2225MOVDX,LOGRUL;循環尺;循環尺-DXMOVC

17、X,COUNT;設循環次數設循環次數MOVSI,OFFSET BUFMOVDI,OFFSET BLOCK;設指針地址;設指針地址NEXT: MOVAX,WORD PTR SIROLDX,1;左移一位;左移一位JCFUN2;進位為;進位為1,轉,轉FUN2FUN1: ADDAX,5JMPNEXT1FUN2: SUBAX,3NEXT1:MOVWORD PTR DI,AX;送結果;送結果INCSI;修改指針地址;修改指針地址INCSIINCDIINCDILOOPNEXTMOVAH,4CH;返回;返回DOSINT21HDX 0011 0101 1000 00002022-3-2226l匯編語言中多次使

18、用的程序段可寫成一個相匯編語言中多次使用的程序段可寫成一個相對獨立的程序段對獨立的程序段,將它定義為將它定義為“過程過程”或子程或子程序。序。l使用子程序可使程序結構模塊化,程序清晰使用子程序可使程序結構模塊化,程序清晰易懂,維護方便。易懂,維護方便。l子程序說明通常包括:子程序說明通常包括:q功能描述:子程序的名稱,功能及性能q子程序中用到的寄存器和存儲單元q子程序的入口參數,出口參數q子程序中調用其它子程序的名稱2022-3-2227l子程序說明:子程序說明:;名稱:;名稱:BCD2BIN;功能:將一個字節的;功能:將一個字節的BCD碼轉換成二進制碼碼轉換成二進制碼;所用寄存器:;所用寄存

19、器:CX;入口參數:;入口參數:AL存放兩位存放兩位BCD碼碼;出口參數:;出口參數:AL存放二進制數存放二進制數;調用其它子程序:無;調用其它子程序:無2022-3-2228BCD2BINPROCNEAR(或或FAR)PUSH CXMOV CH,ALAND CH,0FHMOV CL,4SHRAL,CLMOV CL,10MUL CLADD AL,CHPOP CXRETBCD2BINENDPBCD AL 0100 1000BIN AL 0011 00002022-3-2229l保護調用程序的返回地址保護調用程序的返回地址q由CALL指令本身完成,CPU執行CALL指令是會自動將當前斷點的偏移地址

20、IP入棧,若是段間調用,將CS和IP入棧。當子程序返回時,遇到子程序中的RET指令,則自動將當前棧頂值彈出到IP和CS寄存器中。l保護某些寄存器的內容保護某些寄存器的內容q子程序要用到某些寄存器,為了不破壞寄存器中原有的信息,要將需保護的寄存器內容入棧,一般安排在子程序開頭,用一組PUSH指令,在程序結尾用POP依次彈出。l主程序和子程序間參數的傳遞形式主程序和子程序間參數的傳遞形式q用寄存器傳遞參數:適合參數較少的情況,傳遞速度較快。q用存儲器傳遞參數:適合參數較多的情況,需事先在存儲器中建一個參數表。 q用堆棧傳遞參數:適合參數多的情況,尤其是在子程序嵌套與遞歸調用的情況下,比較不容易出錯

21、。 2022-3-2230l數據段定義兩個數組,編程實現數組段數據段定義兩個數組,編程實現數組段分別求和(不計溢出)。分別求和(不計溢出)。主程序:主程序:DATASEGMENTARY1DW100 DUP (?)SUM1DW?ARY2DW100 DUP (?)SUM2DW?DATAENDSLEASI,ARY1MOVCX,LENGTH ARY1CALLSUMLEASI,ARY2MOVCX,LENGTH ARY2CALLSUM子程序:子程序:SUMPROCNEARXORAX,AXL1:ADDAX,WORD PTRSIINCSIINCSILOOPL1MOVWORD PTRSI,AXMOVAH,4CH

22、INT21HRETSUMENDP2022-3-2231 1. 10進制數進制數-2進制數進制數 將鍵盤輸入的將鍵盤輸入的10進制數(進制數(0-65535)轉換成)轉換成2進制數,并存入進制數,并存入BX寄存器中,如鍵入一個非寄存器中,如鍵入一個非10進進制數,則退出。制數,則退出。 分析分析 l先利用先利用1號號DOS功能調用,從鍵盤輸入一數字,并在功能調用,從鍵盤輸入一數字,并在AL中得到它的中得到它的ASCII碼。碼。l再將它轉換成再將它轉換成2進制數(減去進制數(減去30H),并判斷是否為),并判斷是否為數字數字0-9,若不是則退出子程序,若是,則將,若不是則退出子程序,若是,則將2進

23、制進制數數-BX中。中。l再從鍵盤輸入第二個數字,若該數為再從鍵盤輸入第二個數字,若該數為0-9,則將先輸,則將先輸入的數乘以入的數乘以10后再加上后輸入的數,結果存進后再加上后輸入的數,結果存進BX。后面再輸入的數做同樣的處理。后面再輸入的數做同樣的處理。2022-3-2232 10進制數進制數-2進制數進制數 子程序子程序: DEC_BINPROC NEAR MOV BX, 0GET_CHAR: MOV AH, 1 ;鍵入數字鍵入數字 INT 21H SUB AL, 30H JL EXIT ;9,退出退出 JA EXIT ;是數字是數字0-9 CBW ;將將AL中的字節中的字節-字字 XC

24、HG AX, BX MOV CX, 10 ;將先鍵入的數乘將先鍵入的數乘以以10 MUL CX XCHG AX, BX ADD BX, AX ;再加上新鍵入的數再加上新鍵入的數JMP GET_CHAR EXIT: RET DEC_BIN ENDP2022-3-22332. 2進制數進制數-16進制數進制數 將將BX寄存器中的寄存器中的2進制數轉換成進制數轉換成16進制數,進制數,并在并在CTR上顯示出來。上顯示出來。 分析分析 由于每由于每4位位2進制數可用一個進制數可用一個16進制數表示,進制數表示,所以所以BX中的中的2進制數可轉換成進制數可轉換成4個個16進制數字,進制數字,每左移每左移

25、4次可得到一個次可得到一個16進制數,將其轉換成進制數,將其轉換成ASCII碼后,在碼后,在CRT上顯示出來,重復上顯示出來,重復4次,可次,可將將BX中的數以中的數以4個個16進制數字顯示出來。進制數字顯示出來。2022-3-22342進制數進制數-16進制數子程序進制數子程序: BIN_HEXPROC NEAR MOVCH, 4 ;重復重復4次可得到次可得到4個個16進制數進制數ROTATE:MOV CL, 4 ROL BX, CL ;BX左移左移4次次 MOV AL, BL AND AL, 0FH ;截得一個截得一個16進制數字進制數字(4位二位二進制進制) ADD AL, 30H ;轉換成轉換成ASCII碼碼 CMP AL, 3AH JL DISPLAY ADD AL, 7HDISPLAY:MOV DL, AL ;顯示顯示 MOV AH, 2 INT 21H DEC CH ;4個數字都顯示完了?個數字都顯示完了? JNZ ROTATE ;沒有沒有,則

溫馨提示

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

評論

0/150

提交評論