![微機系統(tǒng)與接口:第3章 匯編語言程序設計(二)_第1頁](http://file4.renrendoc.com/view/fe536996ad469ec35adc206a16f0363f/fe536996ad469ec35adc206a16f0363f1.gif)
![微機系統(tǒng)與接口:第3章 匯編語言程序設計(二)_第2頁](http://file4.renrendoc.com/view/fe536996ad469ec35adc206a16f0363f/fe536996ad469ec35adc206a16f0363f2.gif)
![微機系統(tǒng)與接口:第3章 匯編語言程序設計(二)_第3頁](http://file4.renrendoc.com/view/fe536996ad469ec35adc206a16f0363f/fe536996ad469ec35adc206a16f0363f3.gif)
![微機系統(tǒng)與接口:第3章 匯編語言程序設計(二)_第4頁](http://file4.renrendoc.com/view/fe536996ad469ec35adc206a16f0363f/fe536996ad469ec35adc206a16f0363f4.gif)
![微機系統(tǒng)與接口:第3章 匯編語言程序設計(二)_第5頁](http://file4.renrendoc.com/view/fe536996ad469ec35adc206a16f0363f/fe536996ad469ec35adc206a16f0363f5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第三章 匯編語言程序設計(二)匯編程序設計設計數(shù)據(jù)結構表示( 變量、指針)設計程序結構:程序流控制(條件、分支、循環(huán))程序設計方法舉例 DOS/BIOS調用 (簡單了解)操作數(shù):標號/變量數(shù)值表達式/地址表達式運算符(算數(shù)、邏輯、關系、分析、合成)格式偽指令1DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HARRAY1 DW 3,4str DB HELLO$合理設計數(shù)據(jù)結構data1data2ARRAY1str2DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HAR
2、RAY1 DW 3,4str DB HELLO$合理設計數(shù)據(jù)結構data1data2ARRAY1strMOV AH,data1 ;AH=03H, 等于MOV AH, 0000HMOV AX,data1 ;AX=0203HMOV AH,data1+1 ;AH=02H 地址表達式。MOV AL,data1+2*2 ;AH=08H 標號或變量加/減某個整型 ;常量時仍表示標號或變量。3DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HARRAY1 DW 3,4str DB HELLO$合理設計數(shù)據(jù)結構data1data2ARRAY1st
3、rINC data2 ;data2所代表的內存單元里的值加1。MOV AL,data2-data1 ;AL=04H。同一段內的兩個標號或變量 ;相減,得到的是數(shù)值。MOV AL, OFFSET data1+2*2 ;OFFSET優(yōu)先級高于+號 ;等于MOV AL, 44DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HARRAY1 DW 3,4str DB HELLO$合理設計數(shù)據(jù)結構data1data2ARRAY1str用變量的偏移地址(字)或全地址(雙字)來初始化存儲器XX DW str;值為str的偏移地址YY DD str
4、;值為str的全地址段基地址(高字)和偏移地址(低字)5DATA SEGMENT AT 8A00Hdata1 DB 03H,02H,01H,00Hdata2 DB 08HARRAY1 DW 3,4str DB HELLO$合成運算符PTRdata1data2ARRAY1strLEA SI, data1MOV WORD PTR SI,4;0004H存入data1的第一個字。 MOV BX,OFFSET data1JMP DWORD PTR BX;跳轉到CS:IP=0001H:0004H。;段間間接轉移。04H00H6DP1 DD PRC1,PRC2DATA ENDSCODE SEGMENT;設C
5、S為8B00H PRC1 PROC FAR;8B00:1000:PRC1 ENDPPRC2 PROC FAR;8B00:2C20:PRC2 ENDP00H10H00H8BH20H2CH00H8BHDP18A00:000FH(PRC1)8B00:1000H合理設計數(shù)據(jù)結構用標號的偏移地址或全地址來初始化存儲器7第三章 匯編語言程序設計(二)匯編程序設計設計數(shù)據(jù)結構表示( 變量、指針)設計程序結構:程序流控制(條件、分支、循環(huán))程序設計方法舉例 DOS/BIOS調用 (簡單了解)操作數(shù):標號/變量數(shù)值表達式/地址表達式運算符(算數(shù)、邏輯、關系、分析、合成)格式偽指令8環(huán)境與代碼運行0000:03F
6、FFFFF:0堆棧段數(shù)據(jù)段代碼段CS:IPDSSS:SP系統(tǒng)起始運行程序中斷向量區(qū)(系統(tǒng)專用)棧頂最多4個活動段分段結構ES9 匯編語言源程序格式(例) STACK1 SEGMENT PARA STACK STACK DB 512 dup(?) ;定義堆棧段STACK1 512字節(jié)STACK1 ENDS DATA SEGMENT ;定義數(shù)據(jù)段DATAMESSAGE DB This A Sample Program,LFCR$ DB 0DH,0AH,$ACHAR DW ?DATA ENDS ;數(shù)據(jù)段DATA結束CODE SEGMENT ;定義代碼段CODE ASSUME CS:CODE,DS:D
7、ATA; 說明匯編程序活動段范圍段名段說明保留字10匯編語言例程 (續(xù)1 )MAIN PROC FAR ;MS-DOS 模板語句START:PUSH DS XOR AX,AX PUSH AX ;保存返回指針 DS:0START1:MOV AX,DATA MOV DS,AX CALL PRINT_A_CHAR RET;返回OSMAIN ENDPPRINT_A_CHAR PROC RETPRINT_A_CHAR ENDPCODE ENDS END START;匯編結束子程序, near11匯編語言例程 (續(xù)1 )如何返回DOS?方法1:MAIN PROC FARSTART:PUSH DS;開始XO
8、R AX,AXPUSH AX方法2:;結尾MOV AH,4CH ;主過程沒有申明為FAR時返回DOS法 INT 21H12匯編語言程序設計方法回顧 設計步驟:分析、建模、算法畫流程圖判斷框 條件?終止框過程/執(zhí)行框起始/準備框 流程圖各框的表示法開發(fā)步驟:分配存儲空間單元、編程、調試(DEBUG版)-發(fā)行(Release)版 設計方法:自頂向下,逐步細化具體小任務; 模塊化程序設計:相對獨立、功能單一、I/O關系明確、便于排障。13匯編語言程序設計指令回顧置位 OR AL, 00001000B; 復位 AND AL,01110111B; 判位0/1:TEST AL, 00001000B; JZ
9、(0)/JNZ(1) 多位判零CMP AL,0 JZAND AL,AL; OR AX,AX; TEST AL,AL ; JZ程序流控制 標志單元計數(shù)器循環(huán)14回顧:條件判斷與程序跳轉控制比較指令(CMP)、測試指令(TEST) 等對標志寄存器中某些位有所改變,判斷之從而控制程序跳轉CMP AX, 0JCNEXT1 TEST AL, 01H JNZNEXT2NEXT2:小于不等15匯編語言程序設計結構(一)質量評估 內存容量(效率)、速度、源代碼(復雜性)、可維護性、可靠性基本結構 (單任務):順序、分支、循環(huán)語句1語句2語句3語句nMOV AX,100MOV BX,200MOV CX,8000
10、ADD BX, CXCMP BX,1000JZ NEXT怎樣寫出高質量的程序?16匯編語言程序設計分支結構基本結構 (單任務):順序、分支、循環(huán)程序段1程序段2條件?NY CMP AL,100 JZ NEXT1 MOV CX, 2000 JMP N100NEXT1: MOV CX, 3000N100: MOV COUNT, CXif(條件) else 17匯編語言程序設計多分支結構基本結構 (單任務):順序、分支、循環(huán).程序段1程序段n程序段2程序段n-1多路條件測試條件:數(shù)據(jù)比較結果散轉:程序入口表程序流變化switch (cv) case v1: case v2: break;18匯編語言
11、程序設計循環(huán)結構基本結構 (單任務):順序、分支、循環(huán)N程序段1結束循環(huán)?Y計數(shù)循環(huán)條件循環(huán)while (.) do . MOV CX,0; CHECK:CMP CX,100; JNC FINISH;CX=100則跳轉 INC CX, JMP CHECK;FINISH: 19匯編語言程序設計循環(huán)結構基本結構 (單任務):順序、分支、循環(huán)循環(huán)體結束?Ndo . while(. )MOV CX,0; CHECK:. INC CX; CMP CX,100, JC CHECK;CX100則跳轉FINISH:20循環(huán)結構嵌套 DELAY1: MOV DX,50000;延時xx msDELAY2: NOP
12、 NOP DEC DX JNZ DELAY2 DEC CX JNZ DELAY1 RET MOV CX,1000 DELAY: PUSH CX PUSH DX MOV CX,1000POP DXPOP CXLOOP DELAY;CX自動減1RET多重循環(huán):延時程序例21程序設計舉例:(1)分支跳轉結構: 根據(jù)X0 給Y賦值-1,0,1MOV AL, XMOV AH, 1CMP AL, 0JG EXIT;如果AL0則跳轉JZ ZEROMOV AH, -1;0JMP EXITZERO: MOV AH, AL;=0EXIT:MOV Y,AH;統(tǒng)一出口22(2)分支:比較測試結構(最大值w) .cod
13、e MOV BX, OFFSET CMPDAT MOV CX, COUNT MOV AX, BX INC BX INC BXCHECK0: CMP AX, BX JNC CHECK1 MOV AX, BX;總是把較大數(shù)存入AXCHECK1:INC BX INC BX LOOP CHECK0EXIT: .dataCMPDAT DW 1,2,3,7,6,5COUNT EQU ($-CMPDAT)/2;個數(shù)23(3)分支表-散轉例題:設有8種產品的產品編號分別為0,1,2,7,各產品的加工子程序名分別為PRO0,PRO1,PRO7。編寫由已知編號INDEX序號轉至相應加工子程序處理的程序。要點:利用
14、查表跳轉簡化多分支結構的設計。24 方法1:利用表內地址分支,表的內容是各分支程序入口的偏移地址。 .DATA BASE DW PRO0, PRO1, PRO2, PRO3, PRO4, PRO5, PRO6, PRO7INDEX DB ?.CODESTART:MOV AX,DATAMOV DS,AXPRO0:;處理子程序JMP EXITPRO1:JMP EXITPRO7:JMP EXIT25MOV BL,INDEX;需要跳轉的分支程序編號MOV BH,0SHL BX,1;BX值乘以2JMP BASEBX;跳轉至相應分支程序 ;基址尋址 EXIT:MOV AX,4C00HINT 21HSTAR
15、T ENDPCODE ENDSEND START26方法2:利用表內指令分支,表的內容是轉向各子程序的指令。 MOVAL,INDEX ;取編號MOVAH,0MOVBL,AL ;編號值乘以3ADDAL,ALADDAL,BLMOVBX,OFFSET BASE;取命令表的基址ADDBX,AXJMPBX ;跳轉到命令表的相應位置BASE:JMPPRO0 ;BASE是命令表(代碼段中),;JMP是3字節(jié)指令JMPPRO7PRO0:;子程序JMPEXIT27例:計算!(N=8 WORD; N=12 DWORD)RESULT DW ?MOV AX, N MOV CX, AXDEC CX;循環(huán)執(zhí)行N-1次LP
16、: MUL CX;默認乘數(shù)AX,積AXLOOP LPMOV RESULT,AX(4)循環(huán)結構28例: 從數(shù)組MYDATA開始的10個內存單元(字節(jié)型)中,找值等于0的單元個數(shù),存入變量COUNT中。 MOV BX, OFFSET MYDATA-1MOV CX,10;循環(huán)次數(shù)MOV COUNT, 0AGAIN:INC BXCMPBX, 0LOOPNZ AGAINJCXZOK;此時有兩種可能性CX=0 或 ZF=1INC COUNTJMP AGAINOK:指令測試條件LOOP 目標標號CX CX-1CX!=0LOOPE/LOOPZ 目標標號CX CX-1ZF=1且CX!=0LOOPNE/LOOPN
17、Z 目標標號CX CX-1ZF=0且CX!=0JCXZ 目標標號 CX=0(5)循環(huán)結構29匯編語言程序設計過程調用過程(子程序)反復使用程序段,簡化設計、減少程序空間開銷、易讀、易維護調試。問題 子程序現(xiàn)場保護/現(xiàn)場恢復;主程序(調用者)完成 PUSH AX PUSH BX CALL SUBRT POP BX POP AX .子程序完成 SUBRT PROCSUNRT: PUSH AX PUSH BX . POP BX POP AX RET 30段內直接/間接調用spsp-2CALL near_proc當前IP壓入堆棧,段內跳轉reg16/mem16RETspsp+2;近過程返回段間直接/間
18、接調用 spsp-4CALL far_proc當前CS(先):IP(后)壓棧,段間跳轉mem32RETspsp+4;遠過程返回匯編語言程序設計過程調用31過程(子程序,函數(shù), 方法)參數(shù)傳遞方法寄存器傳遞;內存單元(全局)傳遞;速度快,但結構差,難維護MOV SI, OFFSET SBuf_head MOV DI, OFFSET Dbuf_head MOV CX,COUNT CALL BLKCHEK堆棧傳遞-POP取/BP?。ㄗ映绦虿捎肦ET n)(多任務)中斷(嵌套):任務通信、協(xié)調 BLKCHEK PROC FAR;入?yún)I、DI、CX,;出參SUMBLKCHEK ENDP匯編語言程序設計
19、過程調用32例:求數(shù)組ARRAY中所有元素之和(假定不溢出)并存于SUM中。.DATAARRAYDB d1,d2,d3,dnCOUNTDB $-ARRAYSUMDB ?.CODELEA SI, ARRAYMOV CX, COUNTCALL SUM1;入?yún)镾I、CX,出參為AXMOV SUM, AXIP堆棧段新棧頂下一條指令的偏移地址call前call后 程序設計舉例(6):過程/子程序調用與參數(shù)傳遞33SUM1 PROC NEARCMPCX, 0JZEXIT;個數(shù)為0MOV AX, 0AGAIN: ADD AL, SIADC AH, 0INC SILOOP AGAINEXIT:RETSUM1
20、ENDP(續(xù))IP堆棧段新棧頂RET后RET前當前IP值;入?yún)镾I、CX,出參為AX34 例: 把內存中某一區(qū)域的數(shù)據(jù)塊傳送到另一區(qū)域中。如果源數(shù)據(jù)區(qū)與目標數(shù)據(jù)區(qū)的一部分地址發(fā)生重疊,應考慮從何處開始傳統(tǒng)以及傳送方向。指令:MOVS 目標,源(DS:SI ES:DI,并根據(jù)DF標志自動修改SI和DI)DS:SI=源串首址 ES:DI=目標首址 CX=串長MOVSB ;字節(jié)串傳送MOVSW ;字串傳送DF=0 增方向DF=1 減方向 程序設計舉例(7):分塊傳送35 須從高地址開始傳,遞減須從低地址開始傳,遞增 程序設計舉例(7):分塊傳送36(續(xù))DATASEGMENTSTRGDB256 D
21、UP(1,2,3)STG1EQU STRG+7 ;源串STG2EQU STRG+27 ;目標串STRSEEQU 50;串長DATAENDSSSTACKSEGMENTSTACKDB256DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAMAIN:.MOVAX,DATAMOVDS,AX假設都在數(shù)據(jù)段中37MOVES,AXMOVCX,STRSE;MOV SI,OFFSET STG1; 源串首址MOV DI,OFFSET STG2;目標首址CLD ;增量方式PUSH SI ADD SI,STRSE-1 ;SI=源串末址 CMP SI,DI
22、POP SI JL OK;不重疊 STD;重疊,按減量 ADD SI,STRSE-1 ;指向串末 ADD DI,STRSE-1OK:REP MOVSB ;按增量CODE ENDSEND MAINSTG1STG2STRSESTG1+STRSE(續(xù))38第三章 匯編語言程序設計(二)匯編程序設計設計數(shù)據(jù)結構表示( 變量、指針)設計程序結構:程序流控制(條件、分支、循環(huán))程序設計方法舉例 DOS/BIOS調用 (簡單了解)學會使用操作數(shù):標號/變量數(shù)值表達式/地址表達式運算符(算數(shù)、邏輯、關系、分析、合成)格式偽指令39用戶程序控制PC機硬件的方式直接IOBIOS:固化在ROM中的一組外設驅動與管理
23、軟件DOS:在BIOS基礎上開發(fā)了一組IO處理程序高級語言DOS和BIOS調用(Disk OS-Basic I&O system)兩組系統(tǒng)服務程序,用戶可以通過兩者提供的功能程序,來編制直接管理和控制計算機硬件設備的底層軟件,完成基本IO(顯示器、鍵盤、硬盤等)、內存和文件管理,以及中斷向量、時鐘設置等功能。BIOS/MS-DOS功能調用40BIOS/MS-DOS功能調用硬件控制直接IO:移植性差,必須很了解外設BIOS:運行效率高,留駐在ROM中,獨立于OSDOS:基于MS-DOS,無須太多了解硬件,移植性好。高級語言:功能少,執(zhí)行效率慢。移植性:直接IOBIOSDOS 高級語言關鍵:DOS
24、與設備無關-BIOS與設備相關應用: 軟中斷指令 INT n,實現(xiàn)系統(tǒng)功能調用概念和使用41BIOS/DOS 功能調用86PC:4種中斷:NMI、INTR、內部中斷、軟中斷軟中斷指令 INT n:INT 10HBIOSINT 21HDOS系統(tǒng)功能調用步驟:確定功能號AH置入?yún)?zhí)行INT 21H 分析出參0-3FFH 中斷向量表,0255中斷號對應中斷例程入口n=5H1FH 調用BIOS中的服務程序 P391附錄5n=20H3FH調用DOS中的服務程序 P387附錄4n=40HFFH自由中斷區(qū)42 BIOS/DOS (P174-204)功能調用21H號中斷的常用功能號:01/02H 單字符輸入/
25、輸出(帶回顯)09/0AH 字符串輸出/輸入特點: (1)不用 CALL;(2)BIOS-ROM固化;(3)用戶程序不必與服務程序代碼相連,令用戶代碼簡潔、可讀性好,調試、使用方便;例:顯示字符(DOS僅字符方式) MOV AH, 2 ; AH的值功能號MOV DL,AINT 21H; n=21H中斷類型號43 DOS系統(tǒng)功能調用讀鍵盤(阻塞)MOV AH,1INT 21H CMP AL,Y ;出參 返回到DOSMOV AH, 4CHINT 21H 將一個以$結尾的字符串輸出到屏幕;入?yún)ⅲ毫頓S:DX指向該字符串MOV AH, 9INT 21H 44 Hello World 與系統(tǒng)調用DATA
26、SEGMENTszHelloDBHello,World!,0dh,0ah,$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOVDS,AXMOV AH,9MOVDX,OFFSET szHelloINT 21HMOV AH,4CHINT 21HCODEENDSEND START45 補充知識1.DOS為層次型模塊化結構的操作系統(tǒng),它由一個引導程序Boot和三個功能模塊(輸入輸出管理模塊、文件管理模塊、命令處理程序)以及外部命令集(.COM/EXE/.SYS)組成 2.發(fā)展(1.06.22+,4.0后為多任務)/IBM PCDOS3.局限性(8086工作在實模式下尋址采用16位段和偏移量,最大分段64KB,最大尋址空
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 通訊網(wǎng)絡服務員工作總結
- 二零二五年度全國少兒藝術夏令營參與合同3篇
- 二零二五年度基礎設施建設投資合作協(xié)議范本3篇
- 二零二五年度個人生物質能利用合同范本4篇
- 二零二五版投標承諾書:太陽能光伏發(fā)電設備采購合同3篇
- 放假安全教育課教案
- 2025版物流園區(qū)轉包合作協(xié)議合同范本3篇
- 二零二五版物業(yè)小區(qū)居民生活繳費代理服務協(xié)議3篇
- 二零二五版私人別墅買賣中介服務合同3篇
- 個人擔保合同范本(2025年度升級版)
- 公婆贈予兒媳婦的房產協(xié)議書(2篇)
- 《 西門塔爾牛臉數(shù)據(jù)集的研究》范文
- 八年級上冊 第三單元 11《簡愛》公開課一等獎創(chuàng)新教學設計
- 矽塵對神經系統(tǒng)的影響研究
- 海南省汽車租賃合同
- 親子非暴力溝通培訓講座
- 保險投訴處理流程培訓
- JJG 707-2014扭矩扳子行業(yè)標準
- 供貨保障措施及應急方案
- 2025財年美國國防預算概覽-美國國防部(英)
- 氣動調節(jié)閥調校
評論
0/150
提交評論