微機原理與接口技術_第4章 匯編語言程序設計(2)_第1頁
微機原理與接口技術_第4章 匯編語言程序設計(2)_第2頁
微機原理與接口技術_第4章 匯編語言程序設計(2)_第3頁
微機原理與接口技術_第4章 匯編語言程序設計(2)_第4頁
微機原理與接口技術_第4章 匯編語言程序設計(2)_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、尹作友尹作友順序結構;順序結構;分支結構;分支結構;循環(huán)結構;循環(huán)結構;子程序結構;子程序結構;綜合舉例;綜合舉例;DOSDOS系統(tǒng)功能調用系統(tǒng)功能調用INT nINT n 軟中斷指令,該指令執(zhí)行一次就調用一個相應軟中斷指令,該指令執(zhí)行一次就調用一個相應的中斷服務程序。的中斷服務程序。 其中:其中:n n= 0 n= 0 4 4 ;8088/8086CPU8088/8086CPU占用占用 n n= 5 n= 5 1FH 1FH ;為;為BIOSBIOS的各功能子程序的各功能子程序 n n= 20n= 203FH 3FH ;為;為DOSDOS的各功能子程序。其中的各功能子程序。其中INT 21I

2、NT 21是一個具有是一個具有100100多個子功能的中斷服務多個子功能的中斷服務程序,分別用于設備管理,目錄管理,文件管程序,分別用于設備管理,目錄管理,文件管理及其它功能。理及其它功能。常用常用DOSDOS功能表功能表功能號功能入口參數(shù)出口參數(shù)1*鍵入字符并回顯AL=字符2顯示字符DL=字符7鍵入字符不回顯AL=字符8*鍵入字符不回顯AL=字符9顯示字符串(不含 $ )DS:DX=串首地址0A鍵入字符串至內存DS:DX=緩沖區(qū)首地址4C返回 DOS(帶返回碼)AL=返回碼功能號n AH置入口參數(shù)執(zhí)行INT 21H分析出口參數(shù)INT 21的使用方法:例:例:通過人機對話從鍵盤通過人機對話從鍵

3、盤輸入一字符串,存入輸入一字符串,存入BUFINBUFIN為首地址的內存區(qū),并在為首地址的內存區(qū),并在顯示器顯示該字符串。顯示器顯示該字符串。內存區(qū)長度20H實際輸入字符串長度輸入字符1輸入字符2:輸入字符n回車符BUFINBUFIN1BUFIN2BUFINI顯示提示顯示提示 DO YOU WANT TO INPUT STRING?(Y/N) 等待鍵盤輸入應答等待鍵盤輸入應答 Y/N鍵盤輸入鍵盤輸入Y顯示提示顯示提示 PLEASE INPUT STRING鍵盤輸入字符串存入鍵盤輸入字符串存入BUFIN計算輸入字符串長度,并將字符串計算輸入字符串長度,并將字符串結尾加結尾加顯示輸入的字符串顯示輸

4、入的字符串返回返回DOSNDONE功能號功能號AH 09H01H09H0AH09H4CHDATA SEGMENTSTRING1DB DO YOU WANT TO INPUT DB STRING?(Y/N),0DH,0AH,STRING2DB PLEASE INPUT STRING. DB 0DH,0AH,BUFIN DB 20H,? ;20H為設置長度,?為實際輸入長度BUFINI DB 20H DUP(?) ;實際輸入的字符串存放區(qū)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTARTPROC FARBEGING:PUSH DS MO

5、V AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV ES MOV ES,AX AX ;定義使用;定義使用DSDS,ESES LEA DXLEA DX,STRING1STRING1 MOV AH MOV AH,09H09H INT 21H INT 21H ;顯示;顯示STRING1STRING1提示提示 MOV AHMOV AH,01H01H INT 21H INT 21H ;從鍵盤輸入;從鍵盤輸入1 1個字符至個字符至ALAL CMP AL CMP AL,YY JNE DONE JNE DONE LEA DXLEA DX,STRING2STRING2 MOV AH

6、 MOV AH,09H09H INT 21H INT 21H ;顯示;顯示STRING2STRING2提示提示 LEA DXLEA DX,BUFINBUFIN MOV AH MOV AH,0AH0AH INT 21H INT 21H ;從鍵盤輸入字符串至;從鍵盤輸入字符串至BUFINBUFINMOV ALMOV AL,BUFINBUFIN1 1CBW CBW ;計算;計算BUFIN BUFIN 末地址末地址LEA SILEA SI,BUFINBUFIN2 2ADD SIADD SI,AX AX ;SI SI 指向原輸入回車位置指向原輸入回車位置MOV SIMOV SI, ;字符串結尾為;字符串

7、結尾為MOV AHMOV AH,09H09HLEA DXLEA DX,BUFINBUFIN2 2INT 21H INT 21H ;顯示輸入的字符串,無長度;顯示輸入的字符串,無長度DONEDONE:RETRETSTARTSTARTENDPENDPCODECODEENDSENDS END BEGIN END BEGIN DATA SEGMENTSTRING1DB DO YOU WANT TO INPUT DB STRING?(Y/N),0DH,0AH,STRING2DB PLEASE INPUT STRING. DB 0DH,0AH,BUFIN DB 20H,? ;20H為設置長度,?為實際輸入

8、長度BUFINI DB 20H DUP(?) ;實際輸入的字符串存放區(qū)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTARTPROC FARBEGING:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV ES MOV ES,AX AX ;定義使用;定義使用DSDS,ESES LEA DXLEA DX,STRING1STRING1 MOV AH MOV AH,09H09H INT 21H INT 21H ;顯示;顯示STRING1STRING1提示提示 MOV AHMOV AH,01H0

9、1H INT 21H INT 21H ;從鍵盤輸入;從鍵盤輸入1 1個字符至個字符至ALAL CMP AL CMP AL,YY JNE DONE JNE DONE LEA DXLEA DX,STRING2STRING2 MOV AH MOV AH,09H09H INT 21H INT 21H ;顯示;顯示STRING2STRING2提示提示 LEA DXLEA DX,BUFINBUFIN MOV AH MOV AH,0AH0AH INT 21H INT 21H ;從鍵盤輸入字符串至;從鍵盤輸入字符串至BUFINBUFIN MOV AL MOV AL,BUFINBUFIN1 1 CBW CBW

10、;計算;計算BUFIN BUFIN 末地址末地址 LEA SILEA SI,BUFINBUFIN2 2 ADD SI ADD SI,AX AX ;SI SI 指向原輸入回車位置指向原輸入回車位置 MOV SIMOV SI, ;字符串結尾為;字符串結尾為 MOV AHMOV AH,09H09H LEA DX LEA DX,BUFINBUFIN2 2 INT 21H INT 21H ;顯示輸入的字符串,無長度;顯示輸入的字符串,無長度DONEDONE:MOV AH,4CHMOV AH,4CH INT 21H INT 21H RET RETSTARTSTARTENDPENDPCODECODEENDS

11、ENDS END BEGIN END BEGIN 順序結構順序結構 S 1S2S3順序結構順序結構 順序結構順序結構 順序結構順序結構 順序結構順序結構 例例1 1:兩個兩個32位無符號數(shù)的乘法位無符號數(shù)的乘法ABCD*+B*D部分積部分積1最后乘積最后乘積A*D部分積部分積2B*C部分積部分積3A*C部分積部分積4BBX+0 +2 +4 +6 +8 +A +C +EADC*+和和1積積3*積積1* 積積2 + 積積1H*積積4和和2H+積積1L積積1H和和1L和和1H和和2L和和2H和和3L和和3H乘法運算過程示意圖乘法運算過程示意圖順序結構順序結構 設地址指針設地址指針被乘數(shù)的低被乘數(shù)的低

12、16位送位送AX乘數(shù)的低乘數(shù)的低16位位D送送SI乘數(shù)的高乘數(shù)的高16位位C送送DIBD存部分積存部分積1被乘數(shù)的高被乘數(shù)的高16位位A送送AXAD部分積部分積2部分積部分積2L部分積部分積1H進位加至部分和進位加至部分和1H,存內存存內存BC部分積部分積3部分積部分積3部分和部分和1,存內存存內存AC部分積部分積4存進位存進位部分積部分積4部分和部分和2H+ 進位和進位和3存和存和3返回返回順序結構順序結構 DATA SEGMENTMULNUM DW 0000,0FFFFH,0000,0FFFFH,4DUP( ?) DATA ENDSSTACK SEGMENT PARA STACK STAC

13、KSTAK DB 100 DUP(?)(?) TOP EQU LENGTH STAKSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS: STACK, ES :DATABEGIN: MOV AX, DATA ;送數(shù)據(jù)段段地址;送數(shù)據(jù)段段地址 MOV DS,AX MOV ES, AX MOV AX,STACK ;送堆棧段段地址;送堆棧段段地址 MOV SS,AX MOV SP, OFFSET TOP ;堆棧段偏移量送;堆棧段偏移量送SP順序結構順序結構 LEA BX,MULNUMMULU32: MOV AX ,BX ; B送送 AX MOV SI ,

14、BX+4 ; D送送SI MOV DI ,BX+6 ; C送送DI MUL SI ; B*D MOV BX+8 ,AX ; 保存部分積保存部分積1 MOV BX+0AH ,DX MOV AX ,BX+2 ; A送送AX MUL SI ; A*D ADD AX ,BX+0AH ADC DX ,0 ; 部分積部分積2L與部分積與部分積1H相加相加 MOV BX+0AH ,AX ; 存和存和1 MOV BX+0CH ,DX MOV AX ,BX ; B送送AX MUL DI ; C*B,部分積,部分積3順序結構順序結構 ADD AX ,BX+0AH ;部分積;部分積3與和與和1相加相加 ADC DX

15、 ,BX+0CH MOV BX+0AH ,AX ;存和;存和2 MOV BX+0CH ,DX PUSHF ;保護進位位;保護進位位 MOV AX ,BX+2 ; A送送 AX MUL SI , ;AC,得積,得積4 POPF ;恢復進位位;恢復進位位 ADC AX , BX+0CH ; 部分積部分積4L與和與和2H相加相加 ADC DX ,0 MOV BX+0CH ,AX MOV BX+0EH ,DX ; 存和存和3 MOV AH,4CH INT 21HCODE ENDS END BEGIN 分支結構分支結構 圖52 分支結構框圖形式圖52 分支結構框圖形式判定條件Y YN N判定條件分支結構

16、分支結構例例3 3:在以:在以BUFBUF為首地址的內存,存放著一個長度為為首地址的內存,存放著一個長度為N N(N256)N39H(AL) 41H(AL)5AHDH+1DL+1(CX)=0修改修改BX及及(CX)-1NNNNNYYYYYADH送內存送內存ADL送內存送內存AL=N-DH-DLAL送內存送內存返回返回DOS分支結構分支結構要依次檢查才能要依次檢查才能進入到要求的入口地址。進入到要求的入口地址。分支結構分支結構分支結構分支結構分支結構分支結構跳轉表在內跳轉表在內存中的存放方法存中的存放方法P0LP0HP1LP1H.BASE+0BASE+2P0P1LEA BX,BASEAND AL

17、,0FH ADD AL,ALADD BX,AXJMP WORD PTR BX分支結構分支結構圖5-5 轉移指令跳轉表圖5-5 轉移指令跳轉表BASE1BASE1JMP P1JMP P1JMP P2JMP P2JMP P5JMP P5E9E9P1低位P1高位P1高位E9E9P2低位P2高位P2高位分支結構分支結構分支結構分支結構循環(huán)程序結構循環(huán)程序結構例例4 4:首地址為首地址為BUFFERBUFFER的數(shù)組已按升序排好,長度為的數(shù)組已按升序排好,長度為N N(=10=10),在數(shù)組中查找數(shù)),在數(shù)組中查找數(shù)M M(=80=80),若找到則從數(shù)組),若找到則從數(shù)組中刪掉,否則將它插入正確的位置,

18、中刪掉,否則將它插入正確的位置,DXDX中記錄數(shù)組最中記錄數(shù)組最后的長度。后的長度。循環(huán)程序結構循環(huán)程序結構9810253698908270585348AX CX=9AX CX=8AX CX=7AX CX=6AX CX=5AX CX=4AX CX=3AX CX=2AX CX=1AX CX=0AX=80 CX=10 DX=10AX BUFFERSI 9082AX BUFFERSI-2 AX BUFFERSI-2 80DX=11AX BUFFERSI-2 若數(shù)組中若數(shù)組中無無M尋找插入位置尋找插入位置SI=2*(DX1)CMP AX,BUFFERSI 搜索有無關鍵字搜索有無關鍵字MOV DI,OF

19、FSET BUFFERCLDREPNE SCASW元素下移元素下移MOV BX,BUFFERSIMOV BUFFERSI+2,BX插入插入MOV BUFFERSI+2,AX循環(huán)程序結構循環(huán)程序結構10253698908070585348AX CX=9 DI=BUFFER+2AX CX=8 DI=BUFFER+4AX CX=7 DI=BUFFER+6AX CX=6 DI=BUFFER+8AX CX=5 DI=BUFFER+AAX CX=4 DI=BUFFER+CAX CX=3 DI=BUFFER+EAX = CX=2 DI=BUFFER+10HAX=80 CX=10 DI=BUFFER9098B

20、X=DI=(BUFFER+10H) DI-2 CX-1=1BX=DI+2=(BUFFER+12H) DI-2 CX-1=0DX=9若數(shù)組中有數(shù)若數(shù)組中有數(shù)M 搜索有無關鍵字搜索有無關鍵字MOV DI,OFFSET BUFFERCLDREPNE SCASW 搜索到,后續(xù)元素前移搜索到,后續(xù)元素前移MOV BX,DIMOV DI-2,BXADD DI,2循環(huán)程序結構循環(huán)程序結構初始化初始化串掃描查找串掃描查找找到找到插在插在SI所所指單元后指單元后關鍵字關鍵字SI(CX)=0數(shù)組元素下移數(shù)組元素下移修改比較指針修改比較指針SI數(shù)組長度數(shù)組長度+1設置串尾比較指針設置串尾比較指針SIDI 所指元素上

21、移所指元素上移修改比較指針修改比較指針DINYYNY數(shù)組長度數(shù)組長度-1(CX)-1=0YNN結束結束初始化:初始化:M送送AX;N送送CX,DX;地址偏移量送地址偏移量送DI;增量修改指針增量修改指針 CLD循環(huán)程序結構循環(huán)程序結構DATA SEGMENT BUFFER DW 5,10,32,47,53,77,89,106,115,124 N DB 10 M EQU 80DATA ENDSCODE SEGEMENT ASSUME CS:CODE,DS:DATA,ES:DATAMAIN PROC FARSTART: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA M

22、OV DS,AX MOV ES,AX ; MOV AX,M ;待查數(shù);待查數(shù) 送送AX MOV CX,N ;數(shù)組長度送;數(shù)組長度送 CX MOV DX,N MOV DI,OFFSET BUFFER CLD REPNE SCASW ;串掃描查找;串掃描查找循環(huán)程序結構循環(huán)程序結構 JE DEL ;查到,;查到,ZF=1 DEC DX ;未查到,插入;未查到,插入 MOV SI,DX ;關鍵字與最后數(shù)比較;關鍵字與最后數(shù)比較 ADD SI,DXL1: CMP AX,BUFFERSI JL L2 ;關鍵字比數(shù)組中某個字小,轉;關鍵字比數(shù)組中某個字小,轉L2 MOV BUFFERSI+2, AX ;大

23、,則插在后面;大,則插在后面 JMP L3L2: MOV BX,BUFFERSI ;數(shù)組下移一位;數(shù)組下移一位 MOV BUFFERSI+2, BX SUB SI,2 JMP L1L3: ADD DX,1 ;修改長度;修改長度 JMP NEXT1DEL: JCXZ NEXT ;找到,刪此元素;找到,刪此元素DEL1: MOV BX,DI ;其后元素依次前移;其后元素依次前移 MOV DI-2,BX ADD DI,2 LOOP DEL1NEXT: DEC DX ;改變數(shù)組長度;改變數(shù)組長度NEXT1: RETMAIN ENDPCODE ENDS END START循環(huán)程序結構循環(huán)程序結構循環(huán)程序

24、結構循環(huán)程序結構圖圖5 5- -8 8 循循環(huán)環(huán)程程序序結結構構圖圖入口初始化部分循環(huán)體修改參數(shù)循環(huán)控制出口入口初始化部分循環(huán)體修改參數(shù)循環(huán)控制出口(a a)“先先執(zhí)執(zhí)行行,后后判判斷斷”結結構構(b b)“先先判判斷斷,后后執(zhí)執(zhí)行行”結結構構循環(huán)程序結構循環(huán)程序結構循環(huán)程序結構循環(huán)程序結構圖5-9 16進制數(shù)轉化成ASCII碼流程圖圖5-9 16進制數(shù)轉化成ASCII碼流程圖開始初始化循環(huán)計數(shù)值把最右面的數(shù)位轉換為ASCII碼加上7出口BX 循環(huán)左移一個數(shù)位是AF?顯示一個字符循環(huán)計數(shù)值0?N NY YY YN N循環(huán)程序結構循環(huán)程序結構循環(huán)程序結構循環(huán)程序結構循環(huán)程序結構循環(huán)程序結構循環(huán)程

25、序結構循環(huán)程序結構 例:例:存儲在存儲在BLOCKBLOCK為首地址內存中為首地址內存中1010個個16bit16bit帶符帶符號數(shù),找出最大值后存在號數(shù),找出最大值后存在MAXMAX單元中。單元中。循環(huán)程序結構循環(huán)程序結構AX大數(shù)CMPCMP大數(shù)BLOCK取一次取一次比較比較9次次交換交換(待定待定)循環(huán)程序結構循環(huán)程序結構DATA SEGMENT ;數(shù)據(jù)段說明開始;數(shù)據(jù)段說明開始 BLOCK DW 65C8H ,35 ,694AH,0A398HCOUNT DW 10MAX DW ? ;設置;設置MAX的內存空間的內存空間DATA ENDS ;數(shù)據(jù)段說明結束;數(shù)據(jù)段說明結束CODE SEGM

26、ENT ;代碼段說明開始;代碼段說明開始 ASSUME CS:CODE ,DS:DATABEGIN: MOV AX,DATA MOV DS,AX ;設置本程序的;設置本程序的DS LEA BX, BLOCK ;本程序的運行程序開始;本程序的運行程序開始 MOV AX,BX INC BX INC BX MOV CX,COUNTAGAIN:CMP AX,BX JG NEXT MOV AX,BXNEXT: INC BX INC BX LOOP AGAIN MOV MAX,AX ;本程序運行結束;本程序運行結束 MOV AH, 4CH ;調用內部中斷返回;調用內部中斷返回DOS INT 21H COD

27、E ENDS ;代碼段結束說明;代碼段結束說明 END BEGIN ;編譯結束說明;編譯結束說明循環(huán)程序結構循環(huán)程序結構1.在DAT1 單元開始存放10字節(jié)(字)的有符號(無符號數(shù)),統(tǒng)計正數(shù)(負數(shù))、奇數(shù)(偶數(shù))個數(shù)、求和、平均值,結果存在DAT2單元2.在DATA 1單元開始存放10個字符串,統(tǒng)計大寫(小寫、數(shù)字)的個數(shù),結果存在DATA2單元3.將一個字數(shù)據(jù)(AX)的十六進制數(shù)轉換為對應的ASIIC碼,結果存在DATA單元。循環(huán)程序結構循環(huán)程序結構 l 各重循環(huán)的初始條件的控制;各重循環(huán)的初始條件的控制;l 內循環(huán)可以嵌套在外循環(huán)中,也可以幾個內循環(huán)可以嵌套在外循環(huán)中,也可以幾個內循環(huán)并

28、列在外循環(huán)中,但各層循環(huán)之間不能交內循環(huán)并列在外循環(huán)中,但各層循環(huán)之間不能交叉,內循環(huán)可以跳到外循環(huán)中,不可以從外循環(huán)叉,內循環(huán)可以跳到外循環(huán)中,不可以從外循環(huán)直接跳進內層循環(huán);直接跳進內層循環(huán);l 不能讓循環(huán)回到初始條件,以免出現(xiàn)死循不能讓循環(huán)回到初始條件,以免出現(xiàn)死循環(huán)。環(huán)。 如果一個循環(huán)程序的循環(huán)體內還包含有一個或多個循環(huán)結構如果一個循環(huán)程序的循環(huán)體內還包含有一個或多個循環(huán)結構的程序,那么這個程序稱為雙重或多重循環(huán)結構程序。我們先的程序,那么這個程序稱為雙重或多重循環(huán)結構程序。我們先用軟件延時程序來說明多重循環(huán)程序的結構。用軟件延時程序來說明多重循環(huán)程序的結構。 SOFTDLY:MOV

29、BL,10 DELAY: MOV CX,2801 WAIT0: LOOP WAIT0 ;內循環(huán)延時內循環(huán)延時 DEC BL JNZ DELAY此程序每次內循環(huán)時,此程序每次內循環(huán)時,CX由由2801減至零,減至零,BL維持不變。外循環(huán)維持不變。外循環(huán)進行進行10遍。遍。 此程序雖然簡單,但是其結構是雙重循環(huán)。此程序雖然簡單,但是其結構是雙重循環(huán)。循環(huán)程序結構循環(huán)程序結構 例例 內存DATA開始存放100個單字節(jié)數(shù)據(jù)。編寫程序統(tǒng)計這些數(shù)據(jù)內“0”和“1”個數(shù)相等的數(shù)據(jù)有多少,將結果存入NUMB單元。完成此例需要一個數(shù)據(jù)一個數(shù)據(jù)地檢查0和1是否相等,相等時則計數(shù)加1,直到100個數(shù)據(jù)檢查完畢。DA

30、TA:+015H+127H+294H+311H+43BH+548H+6.+7.+8.+9.+10.+11.+12.+99.循環(huán)程序結構循環(huán)程序結構 DSEG SEGMENTDATA DB 15H,27H,94H ;共100個數(shù) DB 11H,3B,48H,. NUMB DB 0DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AX MOVSI,OFFSET DATA MOVCL,100 XORAL,ALDATA:+015H+127H+294H+311H+43BH+548H+6.+7.+8.+9.+10.+

31、11.+12.+99.循環(huán)程序結構循環(huán)程序結構 RPT2:MOVCH,08HXORBH,BHMOVAH,SIRPT1:RORAH,1JNCCHT1INCBHCHT1:DECCHJNZRPT1CMPBH,04JNZCHT2INCALCHT2:INCSIDECCLJNZRPT2MOVDNUMB,ALMOVAH,4CHINT21HCSEGENDSENDSTARTDATA:+015H+127H+294H+311H+43BH+548H+6.+7.+8.+9.+10.+11.+12.+99.循環(huán)程序結構循環(huán)程序結構ADC BH,0子程序結構子程序結構子程序結構子程序結構子程序結構子程序結構循環(huán)程序結構循環(huán)

32、程序結構BUFFERSTRINGA42C533B4134433233354233循環(huán)程序結構循環(huán)程序結構主程序主程序輸入?yún)?shù):輸入?yún)?shù):1、待轉換的二進制數(shù)、待轉換的二進制數(shù)AL 2、存放、存放ASCII碼的地址指針碼的地址指針輸出參數(shù):輸出參數(shù):1、轉換的、轉換的ASCII碼放入碼放入SI間址間址 的內存的內存 2、修改后的、修改后的SI指針指針16進制數(shù)首地址進制數(shù)首地址BXBXASCIIASCII碼碼首地址首地址SISI1616進制數(shù)長度進制數(shù)長度CXCXASCII碼長度碼長度L2L2取待轉換數(shù) ALDL分離出低4位分離出高4位右移四位調用CHANGE子程序(CX)-1=0結結 束束AG

33、AINN調用CHANGE子程序Y(AL)10(AL)07HAL(AL)30HAL(AL)(SI)(SI)(SI)+1SI(SI)+1SI返回DOSADD_0CHANGE子程序框圖YNDATASEGMANTSTRING DB 34H,98HBUFFERDB 2*2 DUP (?) ;設置;設置4字節(jié)存放空字節(jié)存放空間間DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA循環(huán)程序結構循環(huán)程序結構BEGIN:MOV AX,DATA MOV DS,AX ;置本程序的;置本程序的DS MOV CX,2 LEA BX,STRING ;置源操作數(shù)指針;置源操作數(shù)指針 LEA S

34、I,BUFFER ;置目的操作數(shù)指針;置目的操作數(shù)指針 AGAIN: MOV AL,BX;取源操作數(shù),存入;取源操作數(shù),存入AL DL MOV DL,AL AND AL,0FH; 使高使高4為為0,底,底4位保留位保留 CALL CHANGE; 調子轉換為調子轉換為ASCII存入內存存入內存循環(huán)程序結構循環(huán)程序結構MOV AL,DL; 恢復原操作數(shù)恢復原操作數(shù)PUSH CX; 因移位使用因移位使用CL原原CX入棧保護入棧保護MOV CL,4; 原高原高4位到低位到低4SHR AL,CL; 高高4位為位為0POP CX; 原原CX恢復恢復CALL CHANGE; 調子轉換為調子轉換為ASCII存

35、入內存存入內存INC BX; 修改源操作數(shù)指針修改源操作數(shù)指針LOOP AGAIN, 判循環(huán)終點判循環(huán)終點MOV AH,4CH INT 21H循環(huán)程序結構循環(huán)程序結構CHANGE PROC;CHANGE子程序說明子程序說明CMP AL,10JL ADD_0ADD AL,7; 操作數(shù)可用表達式,其中操作數(shù)可用表達式,其中 表表示示ASCII碼,結果是加碼,結果是加07H ADD_0: ADD AL,30H MOV SI,AL;送結果送結果 INC SI RETCHANGE ENDPCODE ENDS END BEGIN循環(huán)程序結構循環(huán)程序結構子程序結構子程序結構4 45 5 程序設計方法程序設計

36、方法七、參數(shù)傳遞技術七、參數(shù)傳遞技術(一)利用寄存器傳遞參數(shù)(一)利用寄存器傳遞參數(shù) 例如在某子程序中要對兩個長度相同的數(shù)據(jù)緩沖區(qū)例如在某子程序中要對兩個長度相同的數(shù)據(jù)緩沖區(qū)進行操作,可在主程序中把緩沖區(qū)的長度和首址存入寄進行操作,可在主程序中把緩沖區(qū)的長度和首址存入寄存器中。存器中。MOV CX,LENGTHMOV BX,OFFSET BUFFER1MOV SI, OFFSET BUFFER2CALL SUBR子程序結構子程序結構例:編程實現(xiàn)數(shù)組段分別求和(不計溢出)。例:編程實現(xiàn)數(shù)組段分別求和(不計溢出)。DATA SEGMENT ARY1 DW 100 DUP(?)(?) SUM1 DW

37、 ? ARY2 DW 100 DUP(?)(?) SUM2 DW ?DATA ENDSSTACK SEGMENT STACK SA DW 50 DUP(?)(?) TOP EQU LENGTH SASTACK ENDSCODE SEGMENT ASSUME CS: CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,TOP子程序結構子程序結構 LEA SI,ARY1 MOV CX,LENGTH ARY1 CALL SUM LEA SI,ARY2 MOV CX,LENGTH ARY2 CA

38、LL SUM MOV AH,4CH INT 21HSUM PROC NEAR XOR AX,AXL1: ADD AX,WORD PTRSI INC SI INC SI LOOP L1 MOV WORD PTR SI,AX RETSUM ENDPCODE ENDS END START 本例是利用存儲器來傳遞參數(shù),調用前將數(shù)組的偏移地址放入本例是利用存儲器來傳遞參數(shù),調用前將數(shù)組的偏移地址放入SI中,在中,在過程中通過寄存器間址就可取得存儲器中的操作數(shù),并通過存儲器返回。過程中通過寄存器間址就可取得存儲器中的操作數(shù),并通過存儲器返回。子程序結構子程序結構本章小結本章小結q匯編語言程序格式(P124)pMASM中的表達式p偽指令語句pDOS系統(tǒng)功能調用和BIOS中斷調用()p程序設計方法p宏匯編和條件匯編本章小結本章小結重點一:偽指令語句p數(shù)據(jù)定義語句:DB,DW,DDp標號賦值語句:EQU,p段定義語句: SEGMENNTENDSp段分配語句: ASSUMEp過程定義語句:PROCENDPp程序開始結束語句:ORG,END,NAME本章小結本章小結重點二:程序設計方法p順序結構p分支結構p循環(huán)結構p子程序結構本章小結本章小結重點三:MASM中2類運算符p數(shù)值返回運算符p修改屬性運算符編輯程序E.ASM文件匯編程序E.OBJ文件連接文件E.EXE文件A

溫馨提示

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

評論

0/150

提交評論