版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、尹作友尹作友順序結(jié)構(gòu);順序結(jié)構(gòu);分支結(jié)構(gòu);分支結(jié)構(gòu);循環(huán)結(jié)構(gòu);循環(huán)結(jié)構(gòu);子程序結(jié)構(gòu);子程序結(jié)構(gòu);綜合舉例;綜合舉例;DOSDOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用INT nINT n 軟中斷指令,該指令執(zhí)行一次就調(diào)用一個相應(yīng)軟中斷指令,該指令執(zhí)行一次就調(diào)用一個相應(yīng)的中斷服務(wù)程序。的中斷服務(wù)程序。 其中:其中: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多個子功能的中斷服務(wù)多個子功能的中斷服務(wù)程序,分別用于設(shè)備管理,目錄管理,文件管程序,分別用于設(shè)備管理,目錄管理,文件管理及其它功能。理及其它功能。常用常用DOSDOS功能表功能表功能號功能入口參數(shù)出口參數(shù)1*鍵入字符并回顯AL=字符2顯示字符DL=字符7鍵入字符不回顯AL=字符8*鍵入字符不回顯AL=字符9顯示字符串(不含 $ )DS:DX=串首地址0A鍵入字符串至內(nèi)存DS:DX=緩沖區(qū)首地址4C返回 DOS(帶返回碼)AL=返回碼功能號n AH置入口參數(shù)執(zhí)行INT 21H分析出口參數(shù)INT 21的使用方法:例:例:通過人機(jī)對話從鍵盤通過人機(jī)對話從鍵
3、盤輸入一字符串,存入輸入一字符串,存入BUFINBUFIN為首地址的內(nèi)存區(qū),并在為首地址的內(nèi)存區(qū),并在顯示器顯示該字符串。顯示器顯示該字符串。內(nèi)存區(qū)長度20H實(shí)際輸入字符串長度輸入字符1輸入字符2:輸入字符n回車符BUFINBUFIN1BUFIN2BUFINI顯示提示顯示提示 DO YOU WANT TO INPUT STRING?(Y/N) 等待鍵盤輸入應(yīng)答等待鍵盤輸入應(yīng)答 Y/N鍵盤輸入鍵盤輸入Y顯示提示顯示提示 PLEASE INPUT STRING鍵盤輸入字符串存入鍵盤輸入字符串存入BUFIN計(jì)算輸入字符串長度,并將字符串計(jì)算輸入字符串長度,并將字符串結(jié)尾加結(jié)尾加顯示輸入的字符串顯示輸
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為設(shè)置長度,?為實(shí)際輸入長度BUFINI DB 20H DUP(?) ;實(shí)際輸入的字符串存放區(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 ;計(jì)算;計(jì)算BUFIN BUFIN 末地址末地址LEA SILEA SI,BUFINBUFIN2 2ADD SIADD SI,AX AX ;SI SI 指向原輸入回車位置指向原輸入回車位置MOV SIMOV SI, ;字符串結(jié)尾為;字符串
7、結(jié)尾為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為設(shè)置長度,?為實(shí)際輸入
8、長度BUFINI DB 20H DUP(?) ;實(shí)際輸入的字符串存放區(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、;計(jì)算;計(jì)算BUFIN BUFIN 末地址末地址 LEA SILEA SI,BUFINBUFIN2 2 ADD SI ADD SI,AX AX ;SI SI 指向原輸入回車位置指向原輸入回車位置 MOV SIMOV SI, ;字符串結(jié)尾為;字符串結(jié)尾為 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 順序結(jié)構(gòu)順序結(jié)構(gòu) S 1S2S3順序結(jié)構(gòu)順序結(jié)構(gòu) 順序結(jié)構(gòu)順序結(jié)構(gòu) 順序結(jié)構(gòu)順序結(jié)構(gòu) 順序結(jié)構(gòu)順序結(jié)構(gòu) 例例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乘法運(yùn)算過程示意圖乘法運(yùn)算過程示意圖順序結(jié)構(gòu)順序結(jié)構(gòu) 設(shè)地址指針設(shè)地址指針被乘數(shù)的低被乘數(shù)的低
12、16位送位送AX乘數(shù)的低乘數(shù)的低16位位D送送SI乘數(shù)的高乘數(shù)的高16位位C送送DIBD存部分積存部分積1被乘數(shù)的高被乘數(shù)的高16位位A送送AXAD部分積部分積2部分積部分積2L部分積部分積1H進(jìn)位加至部分和進(jìn)位加至部分和1H,存內(nèi)存存內(nèi)存BC部分積部分積3部分積部分積3部分和部分和1,存內(nèi)存存內(nèi)存AC部分積部分積4存進(jìn)位存進(jìn)位部分積部分積4部分和部分和2H+ 進(jìn)位和進(jìn)位和3存和存和3返回返回順序結(jié)構(gòu)順序結(jié)構(gòu) 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順序結(jié)構(gòu)順序結(jié)構(gòu) 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順序結(jié)構(gòu)順序結(jié)構(gòu) ADD AX ,BX+0AH ;部分積;部分積3與和與和1相加相加 ADC DX
15、 ,BX+0CH MOV BX+0AH ,AX ;存和;存和2 MOV BX+0CH ,DX PUSHF ;保護(hù)進(jìn)位位;保護(hù)進(jìn)位位 MOV AX ,BX+2 ; A送送 AX MUL SI , ;AC,得積,得積4 POPF ;恢復(fù)進(jìn)位位;恢復(fù)進(jìn)位位 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 分支結(jié)構(gòu)分支結(jié)構(gòu) 圖52 分支結(jié)構(gòu)框圖形式圖52 分支結(jié)構(gòu)框圖形式判定條件Y YN N判定條件分支結(jié)構(gòu)
16、分支結(jié)構(gòu)例例3 3:在以:在以BUFBUF為首地址的內(nèi)存,存放著一個長度為為首地址的內(nèi)存,存放著一個長度為N N(N256)N39H(AL) 41H(AL)5AHDH+1DL+1(CX)=0修改修改BX及及(CX)-1NNNNNYYYYYADH送內(nèi)存送內(nèi)存ADL送內(nèi)存送內(nèi)存AL=N-DH-DLAL送內(nèi)存送內(nèi)存返回返回DOS分支結(jié)構(gòu)分支結(jié)構(gòu)要依次檢查才能要依次檢查才能進(jìn)入到要求的入口地址。進(jìn)入到要求的入口地址。分支結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)跳轉(zhuǎn)表在內(nèi)跳轉(zhuǎn)表在內(nèi)存中的存放方法存中的存放方法P0LP0HP1LP1H.BASE+0BASE+2P0P1LEA BX,BASEAND AL
17、,0FH ADD AL,ALADD BX,AXJMP WORD PTR BX分支結(jié)構(gòu)分支結(jié)構(gòu)圖5-5 轉(zhuǎn)移指令跳轉(zhuǎn)表圖5-5 轉(zhuǎn)移指令跳轉(zhuǎn)表BASE1BASE1JMP P1JMP P1JMP P2JMP P2JMP P5JMP P5E9E9P1低位P1高位P1高位E9E9P2低位P2高位P2高位分支結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)例例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)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)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 搜索有無關(guān)鍵字搜索有無關(guān)鍵字MOV DI,OF
19、FSET BUFFERCLDREPNE SCASW元素下移元素下移MOV BX,BUFFERSIMOV BUFFERSI+2,BX插入插入MOV BUFFERSI+2,AX循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)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 搜索有無關(guān)鍵字搜索有無關(guān)鍵字MOV DI,OFFSET BUFFERCLDREPNE SCASW 搜索到,后續(xù)元素前移搜索到,后續(xù)元素前移MOV BX,DIMOV DI-2,BXADD DI,2循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)初始化初始化串掃描查找串掃描查找找到找到插在插在SI所所指單元后指單元后關(guān)鍵字關(guān)鍵字SI(CX)=0數(shù)組元素下移數(shù)組元素下移修改比較指針修改比較指針SI數(shù)組長度數(shù)組長度+1設(shè)置串尾比較指針設(shè)置串尾比較指針SIDI 所指元素上
21、移所指元素上移修改比較指針修改比較指針DINYYNY數(shù)組長度數(shù)組長度-1(CX)-1=0YNN結(jié)束結(jié)束初始化:初始化:M送送AX;N送送CX,DX;地址偏移量送地址偏移量送DI;增量修改指針增量修改指針 CLD循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)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)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu) JE DEL ;查到,;查到,ZF=1 DEC DX ;未查到,插入;未查到,插入 MOV SI,DX ;關(guān)鍵字與最后數(shù)比較;關(guān)鍵字與最后數(shù)比較 ADD SI,DXL1: CMP AX,BUFFERSI JL L2 ;關(guān)鍵字比數(shù)組中某個字小,轉(zhuǎn);關(guān)鍵字比數(shù)組中某個字小,轉(zhuǎn)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)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程序
24、結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)圖圖5 5- -8 8 循循環(huán)環(huán)程程序序結(jié)結(jié)構(gòu)構(gòu)圖圖入口初始化部分循環(huán)體修改參數(shù)循環(huán)控制出口入口初始化部分循環(huán)體修改參數(shù)循環(huán)控制出口(a a)“先先執(zhí)執(zhí)行行,后后判判斷斷”結(jié)結(jié)構(gòu)構(gòu)(b b)“先先判判斷斷,后后執(zhí)執(zhí)行行”結(jié)結(jié)構(gòu)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)圖5-9 16進(jìn)制數(shù)轉(zhuǎn)化成ASCII碼流程圖圖5-9 16進(jìn)制數(shù)轉(zhuǎn)化成ASCII碼流程圖開始初始化循環(huán)計(jì)數(shù)值把最右面的數(shù)位轉(zhuǎn)換為ASCII碼加上7出口BX 循環(huán)左移一個數(shù)位是AF?顯示一個字符循環(huán)計(jì)數(shù)值0?N NY YY YN N循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)程
25、序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu) 例:例:存儲在存儲在BLOCKBLOCK為首地址內(nèi)存中為首地址內(nèi)存中1010個個16bit16bit帶符帶符號數(shù),找出最大值后存在號數(shù),找出最大值后存在MAXMAX單元中。單元中。循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)AX大數(shù)CMPCMP大數(shù)BLOCK取一次取一次比較比較9次次交換交換(待定待定)循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)DATA SEGMENT ;數(shù)據(jù)段說明開始;數(shù)據(jù)段說明開始 BLOCK DW 65C8H ,35 ,694AH,0A398HCOUNT DW 10MAX DW ? ;設(shè)置;設(shè)置MAX的內(nèi)存空間的內(nèi)存空間DATA ENDS ;數(shù)據(jù)段說明結(jié)束;數(shù)據(jù)段說明結(jié)束CODE SEGM
26、ENT ;代碼段說明開始;代碼段說明開始 ASSUME CS:CODE ,DS:DATABEGIN: MOV AX,DATA MOV DS,AX ;設(shè)置本程序的;設(shè)置本程序的DS LEA BX, BLOCK ;本程序的運(yùn)行程序開始;本程序的運(yùn)行程序開始 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 ;本程序運(yùn)行結(jié)束;本程序運(yùn)行結(jié)束 MOV AH, 4CH ;調(diào)用內(nèi)部中斷返回;調(diào)用內(nèi)部中斷返回DOS INT 21H COD
27、E ENDS ;代碼段結(jié)束說明;代碼段結(jié)束說明 END BEGIN ;編譯結(jié)束說明;編譯結(jié)束說明循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)1.在DAT1 單元開始存放10字節(jié)(字)的有符號(無符號數(shù)),統(tǒng)計(jì)正數(shù)(負(fù)數(shù))、奇數(shù)(偶數(shù))個數(shù)、求和、平均值,結(jié)果存在DAT2單元2.在DATA 1單元開始存放10個字符串,統(tǒng)計(jì)大寫(小寫、數(shù)字)的個數(shù),結(jié)果存在DATA2單元3.將一個字?jǐn)?shù)據(jù)(AX)的十六進(jìn)制數(shù)轉(zhuǎn)換為對應(yīng)的ASIIC碼,結(jié)果存在DATA單元。循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu) l 各重循環(huán)的初始條件的控制;各重循環(huán)的初始條件的控制;l 內(nèi)循環(huán)可以嵌套在外循環(huán)中,也可以幾個內(nèi)循環(huán)可以嵌套在外循環(huán)中,也可以幾個內(nèi)循環(huán)并
28、列在外循環(huán)中,但各層循環(huán)之間不能交內(nèi)循環(huán)并列在外循環(huán)中,但各層循環(huán)之間不能交叉,內(nèi)循環(huán)可以跳到外循環(huán)中,不可以從外循環(huán)叉,內(nèi)循環(huán)可以跳到外循環(huán)中,不可以從外循環(huán)直接跳進(jìn)內(nèi)層循環(huán);直接跳進(jìn)內(nèi)層循環(huán);l 不能讓循環(huán)回到初始條件,以免出現(xiàn)死循不能讓循環(huán)回到初始條件,以免出現(xiàn)死循環(huán)。環(huán)。 如果一個循環(huán)程序的循環(huán)體內(nèi)還包含有一個或多個循環(huán)結(jié)構(gòu)如果一個循環(huán)程序的循環(huán)體內(nèi)還包含有一個或多個循環(huán)結(jié)構(gòu)的程序,那么這個程序稱為雙重或多重循環(huán)結(jié)構(gòu)程序。我們先的程序,那么這個程序稱為雙重或多重循環(huán)結(jié)構(gòu)程序。我們先用軟件延時程序來說明多重循環(huán)程序的結(jié)構(gòu)。用軟件延時程序來說明多重循環(huán)程序的結(jié)構(gòu)。 SOFTDLY:MOV
29、BL,10 DELAY: MOV CX,2801 WAIT0: LOOP WAIT0 ;內(nèi)循環(huán)延時內(nèi)循環(huán)延時 DEC BL JNZ DELAY此程序每次內(nèi)循環(huán)時,此程序每次內(nèi)循環(huán)時,CX由由2801減至零,減至零,BL維持不變。外循環(huán)維持不變。外循環(huán)進(jìn)行進(jìn)行10遍。遍。 此程序雖然簡單,但是其結(jié)構(gòu)是雙重循環(huán)。此程序雖然簡單,但是其結(jié)構(gòu)是雙重循環(huán)。循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu) 例例 內(nèi)存DATA開始存放100個單字節(jié)數(shù)據(jù)。編寫程序統(tǒng)計(jì)這些數(shù)據(jù)內(nèi)“0”和“1”個數(shù)相等的數(shù)據(jù)有多少,將結(jié)果存入NUMB單元。完成此例需要一個數(shù)據(jù)一個數(shù)據(jù)地檢查0和1是否相等,相等時則計(jì)數(shù)加1,直到100個數(shù)據(jù)檢查完畢。DA
30、TA:+015H+127H+294H+311H+43BH+548H+6.+7.+8.+9.+10.+11.+12.+99.循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu) 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)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu) 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)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)ADC BH,0子程序結(jié)構(gòu)子程序結(jié)構(gòu)子程序結(jié)構(gòu)子程序結(jié)構(gòu)子程序結(jié)構(gòu)子程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)循環(huán)
32、程序結(jié)構(gòu)BUFFERSTRINGA42C533B4134433233354233循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)主程序主程序輸入?yún)?shù):輸入?yún)?shù):1、待轉(zhuǎn)換的二進(jìn)制數(shù)、待轉(zhuǎn)換的二進(jìn)制數(shù)AL 2、存放、存放ASCII碼的地址指針碼的地址指針輸出參數(shù):輸出參數(shù):1、轉(zhuǎn)換的、轉(zhuǎn)換的ASCII碼放入碼放入SI間址間址 的內(nèi)存的內(nèi)存 2、修改后的、修改后的SI指針指針16進(jìn)制數(shù)首地址進(jìn)制數(shù)首地址BXBXASCIIASCII碼碼首地址首地址SISI1616進(jìn)制數(shù)長度進(jìn)制數(shù)長度CXCXASCII碼長度碼長度L2L2取待轉(zhuǎn)換數(shù) ALDL分離出低4位分離出高4位右移四位調(diào)用CHANGE子程序(CX)-1=0結(jié)結(jié) 束束AG
33、AINN調(diào)用CHANGE子程序Y(AL)10(AL)07HAL(AL)30HAL(AL)(SI)(SI)(SI)+1SI(SI)+1SI返回DOSADD_0CHANGE子程序框圖YNDATASEGMANTSTRING DB 34H,98HBUFFERDB 2*2 DUP (?) ;設(shè)置;設(shè)置4字節(jié)存放空字節(jié)存放空間間DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)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; 調(diào)子轉(zhuǎn)換為調(diào)子轉(zhuǎn)換為ASCII存入內(nèi)存存入內(nèi)存循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)MOV AL,DL; 恢復(fù)原操作數(shù)恢復(fù)原操作數(shù)PUSH CX; 因移位使用因移位使用CL原原CX入棧保護(hù)入棧保護(hù)MOV CL,4; 原高原高4位到低位到低4SHR AL,CL; 高高4位為位為0POP CX; 原原CX恢復(fù)恢復(fù)CALL CHANGE; 調(diào)子轉(zhuǎn)換為調(diào)子轉(zhuǎn)換為ASCII存
35、入內(nèi)存存入內(nèi)存INC BX; 修改源操作數(shù)指針修改源操作數(shù)指針LOOP AGAIN, 判循環(huán)終點(diǎn)判循環(huán)終點(diǎn)MOV AH,4CH INT 21H循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)CHANGE PROC;CHANGE子程序說明子程序說明CMP AL,10JL ADD_0ADD AL,7; 操作數(shù)可用表達(dá)式,其中操作數(shù)可用表達(dá)式,其中 表表示示ASCII碼,結(jié)果是加碼,結(jié)果是加07H ADD_0: ADD AL,30H MOV SI,AL;送結(jié)果送結(jié)果 INC SI RETCHANGE ENDPCODE ENDS END BEGIN循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)子程序結(jié)構(gòu)子程序結(jié)構(gòu)4 45 5 程序設(shè)計(jì)方法程序設(shè)計(jì)
36、方法七、參數(shù)傳遞技術(shù)七、參數(shù)傳遞技術(shù)(一)利用寄存器傳遞參數(shù)(一)利用寄存器傳遞參數(shù) 例如在某子程序中要對兩個長度相同的數(shù)據(jù)緩沖區(qū)例如在某子程序中要對兩個長度相同的數(shù)據(jù)緩沖區(qū)進(jìn)行操作,可在主程序中把緩沖區(qū)的長度和首址存入寄進(jìn)行操作,可在主程序中把緩沖區(qū)的長度和首址存入寄存器中。存器中。MOV CX,LENGTHMOV BX,OFFSET BUFFER1MOV SI, OFFSET BUFFER2CALL SUBR子程序結(jié)構(gòu)子程序結(jié)構(gòu)例:編程實(shí)現(xiàn)數(shù)組段分別求和(不計(jì)溢出)。例:編程實(shí)現(xiàn)數(shù)組段分別求和(不計(jì)溢出)。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子程序結(jié)構(gòu)子程序結(jié)構(gòu) 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ù),調(diào)用前將數(shù)組的偏移地址放入本例是利用存儲器來傳遞參數(shù),調(diào)用前將數(shù)組的偏移地址放入SI中,在中,在過程中通過寄存器間址就可取得存儲器中的操作數(shù),并通過存儲器返回。過程中通過寄存器間址就可取得存儲器中的操作數(shù),并通過存儲器返回。子程序結(jié)構(gòu)子程序結(jié)構(gòu)本章小結(jié)本章小結(jié)q匯編語言程序格式(P124)pMASM中的表達(dá)式p偽指令語句pDOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用()p程序設(shè)計(jì)方法p宏匯編和條件匯編本章小結(jié)本章小結(jié)重點(diǎn)一:偽指令語句p數(shù)據(jù)定義語句:DB,DW,DDp標(biāo)號賦值語句:EQU,p段定義語句: SEGMENNTENDSp段分配語句: ASSUMEp過程定義語句:PROCENDPp程序開始結(jié)束語句:ORG,END,NAME本章小結(jié)本章小結(jié)重點(diǎn)二:程序設(shè)計(jì)方法p順序結(jié)構(gòu)p分支結(jié)構(gòu)p循環(huán)結(jié)構(gòu)p子程序結(jié)構(gòu)本章小結(jié)本章小結(jié)重點(diǎn)三:MASM中2類運(yùn)算符p數(shù)值返回運(yùn)算符p修改屬性運(yùn)算符編輯程序E.ASM文件匯編程序E.OBJ文件連接文件E.EXE文件A
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年復(fù)合乳酸膠囊項(xiàng)目投資可行性研究分析報(bào)告
- 二零二五年度企業(yè)安全保衛(wèi)人員聘用協(xié)議書3篇
- 二手房購買合同模板 2024年版版B版
- 2025年鈣源腐植酸液肥項(xiàng)目投資可行性研究分析報(bào)告
- 2025年小脆皮烤腸項(xiàng)目投資可行性研究分析報(bào)告
- 2025年中國白卡紙行業(yè)發(fā)展前景預(yù)測及投資戰(zhàn)略研究報(bào)告
- 2024-2025年中國計(jì)算機(jī)網(wǎng)絡(luò)設(shè)備行業(yè)市場運(yùn)營現(xiàn)狀及投資戰(zhàn)略咨詢報(bào)告
- 個人股權(quán)代持事務(wù)詳細(xì)合同版B版
- 2025年度能源市場調(diào)研服務(wù)合同3篇
- 2025年中國靜電涂裝設(shè)備行業(yè)市場全景監(jiān)測及投資戰(zhàn)略咨詢報(bào)告
- 房地產(chǎn)銷售任務(wù)及激勵制度
- 并購指南(如何發(fā)現(xiàn)好公司)
- DL-T-1642-2016環(huán)形混凝土電桿用腳扣
- 銅礦成礦作用與地質(zhì)環(huán)境分析
- 30題紀(jì)檢監(jiān)察位崗位常見面試問題含HR問題考察點(diǎn)及參考回答
- 詢價(jià)函模板(非常詳盡)
- 《AI營銷畫布:數(shù)字化營銷的落地與實(shí)戰(zhàn)》
- 麻醉藥品、精神藥品、放射性藥品、醫(yī)療用毒性藥品及藥品類易制毒化學(xué)品等特殊管理藥品的使用與管理規(guī)章制度
- 乘務(wù)培訓(xùn)4有限時間水上迫降
- 2023年低年級寫話教學(xué)評語方法(五篇)
- DB22T 1655-2012結(jié)直腸外科術(shù)前腸道準(zhǔn)備技術(shù)要求
評論
0/150
提交評論