版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 第三章 匯編語言程序設(shè)計(三)Assembly Language Programming(3)格式# 偽指令# DOS/BIOS調(diào)用 (簡單了解) 重點:數(shù)據(jù)結(jié)構(gòu)表示 變量、指針 程序結(jié)構(gòu) 程序流控制(條件、分支、循環(huán)) 程序設(shè)計方法-程序設(shè)計舉例匯編語言程序舉例(1)分塊傳送DATASEGMENTSTRGDB256 DUP(1,2,3)STG1EQU STRG+7STG2EQU STRG+27STRSEEQU 50;串長DATAENDSSSTACKSEGMENTSTACKDB256DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DAT
2、AMAIN:.MOVAX,DATAMOVDS,AXMS-DOS程序程序舉例(1)分塊傳送(續(xù)一) MOVES,AXMOVCX,STRSE;MOV SI,OFFSET STG1; 源串首址MOV DI,OFFSET STG2;目標(biāo)首址CLD ;增量方式PUSH SI ADD SI,STRSE-1 ;SI=源串末址 CMP SI,DI POP SI JL OK;不重疊 STD;重疊,按減量 ADD SI,STRSE-1 ;指向串末 ADD DI,STRSE-1OK:REP MOVSBSTAG1STAG2STRSESTAG1+STRSE程序舉例(1)分塊傳送(續(xù)二) MOV AX,4C00H ;返回
3、DOS,AH=4CH INT 21HCODE ENDS END MAIN 數(shù)據(jù)塊傳送:一般情況 P170程序舉例(1)分塊傳送(通用子程序)通用子程序結(jié)構(gòu) 功能=串移動ENTRY: DS:SI=源串首址 ES:DI=目標(biāo)首址 CX=串長 -考慮物理地址關(guān)系 數(shù)據(jù)塊傳送:一般情況,P170BLKMOV PROC PUSH DS PUSH ES PUSH AX PUSH BXPUSH DXPUSH CX MOV AX,SIMOVCL,4SARAX,CL ;右移4位MOVDX,DSADD AX,DXMOVDS,AX ANDSI,0FH ;高位清零程序舉例(1)分塊傳送(通用子程序)MOVBX,DIS
4、ARBX,CL ;右移4位MOVDX,ESADD BX,DXMOVES,BXANDDI,0FHCMP AX,BX(源和目標(biāo)物理地址高16位);比較SRC/DST起始地址高位(比較源串和目標(biāo)串的物理地址,先比較高16位,再比較低4位)JAMOVDOWN;從低往高JBMOVUPCMP SI,DI;高位相等,比低位JA MOVDOWNJBMOVUP程序舉例(1)分塊傳送(通用子程序)POPCX ;相等,不移動 JMP MOVEXITMOVUP: STDPOP CXMOVAX,CXDEC AXADD SI,AXADD DI,AXJMPDOMOVMOVDOWN: CLDPOPCXDOMOV:REP MO
5、VSBMOVEXIT: POP . ; RETBLKMOV ENDP程序舉例(1)分塊傳送(通用子程序)多重循環(huán):例軟件延時(nT,T=210ns)SOFTDLY PROC MOV BL,10 ; 4TDELAY0: MOV CX,2801; 4TDELAY1: LOOP DELAY1; 17T/5T DEC BL ;3T JNZ DELAY0 ;16T/4T RET ;20TSOFTDLY ENDPn=4+10*(4+2801*17-12)+3+16)-12 +20 -10ms內(nèi)循環(huán)程序設(shè)計舉例(2)循環(huán)軟件延時DAINDEX DB 0; 波形發(fā)生DOTNUM DB DATIME-$-1DA
6、VALUE DB 0,40H,80H,0C0H DB 255,0C0H,80H,40H;三角波DATIME DW 100DACTRL PROC FAR PUSH DS PUSH 0000 MOV AX,SEG DAVALUE MOV DS,AX MOV BX,DOTNUMLEA SI,DAVALUE INC SI程序設(shè)計舉例(三)查表波形發(fā)生MOV DAINDEX,0DALOOP: MOV AL, DAINDEX CMP AL, BX ;BX中為采樣個數(shù) JC DACYCLEXOR AL, AL MOV DAINDEX, AL; 復(fù)位計數(shù)DACYCLE: CALL DAOUT INC SI I
7、NC DAINDEX CALL DELAY CALL KBINPUT ;讀鍵盤 CMP AL,1BH; ESC鍵按下,結(jié)束 JNZ DALOOPRET DACTRL ENDP程序設(shè)計舉例(三)查表波形發(fā)生(續(xù)一)DAOUT PROC;查表輸出 LEA SI,DAVLUE XOR AH,AH ; AL= DAINDEX ADD SI,AX MOV AL,SI MOV DX, DAPORT; DAC端口 OUT DX,AL RETDAOUT ENDP程序設(shè)計舉例(三)查表波形發(fā)生(續(xù)二) 程序設(shè)計舉例四模塊化:過程/子程序調(diào)用與參數(shù)傳遞術(shù)語嵌套遞歸參數(shù)傳遞、寄存器、數(shù)據(jù)單元變量(內(nèi)存,含指針變量)
8、(全局)、堆棧匯編語言程序設(shè)計結(jié)構(gòu)過程(子程序,函數(shù), 方法)參數(shù)傳遞寄存器傳遞;內(nèi)存單元(全局)傳遞;速度快,但結(jié)構(gòu)差,難維護(hù)MOV SI, OFFSET SBuf_head MOV DI, OFFSET Dbuf_head MOV CX,COUNT CALL BLKCHEK堆棧傳遞-POP取/BP?。ㄗ覴ET n)舍棄的字節(jié)數(shù)n一般是調(diào)用前通過堆棧向過程傳遞的參數(shù)程序設(shè)計舉例過程調(diào)用與參數(shù)傳遞START: MOV AX,DATA MOV DS, AX LEA BX,ARRAY PUSH BX LEA BX,COUNT PUSH BX LEA BX,SUM PUSH BXCALL PRO_A
9、DD :OFFSET ARRAYOFFSET COUNTOFFSET SUM 斷點CS 斷點IP調(diào)用后SP運行前SP堆棧段+8PRO_ADD PROC FAR PUSH AX PUSH BX PUSH CX PUSH BP MOV BP, SP MOV BX, BP+14;MOV CX, BX ;count MOV SI,BP+16; OFFSET ARRAY指針MOV BX,BP+12;SUM指針MOV AX,0 斷點AX 斷點CX 斷點BX 斷點BP +8程序設(shè)計舉例過程調(diào)用與參數(shù)傳遞(續(xù))LP: ADD AX,SI INC SI INC SI LOOP LP MOV BX, AX POP
10、 BP POP CX POP BX POP AX RET 6 斷點AX 斷點CX 斷點BX 斷點BP +8程序設(shè)計舉例過程調(diào)用與參數(shù)傳遞(續(xù)) 過程/子程序模塊化:調(diào)用與參數(shù)傳遞計算?。∟=8 WORD; N=2 ? 過程/子程序調(diào)用-遞歸計算!(N=8 WORD; N12如何處理MOV AX, N ;計算 CALL PCALC MOV RESULT,AX RETRESULT DW ?課外選做:觀察堆棧變化數(shù)據(jù)流和程序流 遞歸調(diào)用(續(xù))PCALC:CMP AX,1 ;遞歸函數(shù)JNZ PCALC1 ; N=1, 結(jié)束RETPCALC1:PUSH AXDEC AX CALL PCALC ;遞歸調(diào)用POP BX MUL BX RET程序1 hello.c #include int main()printf(Hello, worldn);return 0;TCC -B -ms -Iinclude -Llib hello.c C語言函數(shù) Hello World 與系統(tǒng)調(diào)用DATASEGMENTszHelloDBHello,World!,0dh,0ah,$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度文化產(chǎn)業(yè)股權(quán)合資合同3篇
- 二零二五年度廚房設(shè)備智能故障診斷與維修合同2篇
- 2025年度法律事務(wù)所實習(xí)生勞動合同簽訂指南3篇
- 二手房買賣北京市專用協(xié)議格式版B版
- 二零二五年度風(fēng)力發(fā)電場施工造價及運維合同3篇
- 二零二五年度跨境電商平臺勞動合同(客戶服務(wù)專員)2篇
- 2025年度行政合同性質(zhì)與行政糾紛解決機(jī)制研究3篇
- 二零二五年度智能除塵器配件研發(fā)生產(chǎn)合作合同3篇
- 二零二五年度樣板房裝修工程包料包工服務(wù)協(xié)議
- 2025年度食堂承包經(jīng)營與顧客滿意度提升合同3篇
- 2025年中國高純生鐵行業(yè)政策、市場規(guī)模及投資前景研究報告(智研咨詢發(fā)布)
- GB/T 304.9-2008關(guān)節(jié)軸承通用技術(shù)規(guī)則
- GB/T 29353-2012養(yǎng)老機(jī)構(gòu)基本規(guī)范
- 2205雙相不銹鋼的焊接工藝
- 啤酒廠糖化車間熱量衡算
- 英文標(biāo)點符號用法(句號分號冒號問號感嘆號)(課堂)課件
- 22部能夠療傷的身心靈療愈電影
- 領(lǐng)導(dǎo)干部有效授權(quán)的技巧與藝術(shù)課件
- DB37-T 1915-2020 安全生產(chǎn)培訓(xùn)質(zhì)量控制規(guī)范-(高清版)
- 陜西省商洛市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 實習(xí)生請假條
評論
0/150
提交評論