版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章匯編語(yǔ)言程序結(jié)構(gòu)4.1初步涉及匯編語(yǔ)言程序
4.2匯編語(yǔ)言偽指令
4.3匯編語(yǔ)言程序的上機(jī)過(guò)程
4.4DOS系統(tǒng)功能調(diào)用
4.5匯編語(yǔ)言程序設(shè)計(jì)
14.5匯編語(yǔ)言程序設(shè)計(jì)一、概述二、順序程序設(shè)計(jì)三、分支程序設(shè)計(jì)四、循環(huán)程序設(shè)計(jì)五、中斷功能調(diào)用的程序設(shè)計(jì)六、子程序設(shè)計(jì)匯編語(yǔ)言同高級(jí)語(yǔ)言一樣,源程序的設(shè)計(jì)也有4大基本結(jié)構(gòu)形式(順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和子程序)。在實(shí)際的匯編程序設(shè)計(jì)中,單純的一種結(jié)構(gòu)程序并不多見(jiàn),大多數(shù)都是多種結(jié)構(gòu)的組合
24.5匯編語(yǔ)言程序設(shè)計(jì)一、順序結(jié)構(gòu)程序設(shè)計(jì)
順序程序完全按指令書(shū)寫(xiě)的前后順序執(zhí)行每一條指令,是最基本、最常見(jiàn)的程序結(jié)構(gòu)主要用到數(shù)據(jù)傳送類(lèi)指令、算術(shù)運(yùn)算類(lèi)指令、邏輯運(yùn)算和移位類(lèi)指令
3例1實(shí)驗(yàn)3順序程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)數(shù)據(jù)傳送和算術(shù)運(yùn)算指令的用法熟悉建立、匯編、連接、調(diào)試匯編程序的過(guò)程二、實(shí)驗(yàn)內(nèi)容調(diào)試參考程序,指出程序運(yùn)行后BUF2、BUF3、BUF4定義開(kāi)始的單元存放的數(shù)據(jù)。三、實(shí)驗(yàn)步驟:1、進(jìn)入EDIT,輸入源程序,存盤(pán)退出2、編譯:MASM*.ASM3、連接:LINK*.OBJ4、進(jìn)入DEBUG對(duì)程序進(jìn)行單步調(diào)試,觀察運(yùn)行結(jié)果DEBUG*.EXE4STACKSEGMENTDB200DUP(0)STACKENDSDATASEGMENTBUF1DB1,2,3,4,5,6,7,8,9BUF2DB10DUP(0)BUF3DB10DUP(0)BUF4DB10DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK5START:MOVAX,DATAMOVDS,AX MOVSI,OFFSETBUF1 MOVDI,OFFSETBUF2MOVBX,OFFSETBUF3MOVBP,OFFSETBUF4MOVCX,106AGAIN:MOVAL,[SI]MOV[DI],ALINCALMOV[BX],AL ADDAL,3MOVDS:[BP],ALINCDIINCSIINCBXINCBPLOOPAGAINMOVAH,4CHINT21HCODEENDSENDSTART74.5匯編語(yǔ)言程序設(shè)計(jì)二、分支結(jié)構(gòu)程序設(shè)計(jì)
分支程序根據(jù)條件是真或假?zèng)Q定執(zhí)行與否,判斷的條件是各種指令,如CMP、TEST等執(zhí)行后形成的狀態(tài)標(biāo)志與條件轉(zhuǎn)移指令Jcc聯(lián)合可以實(shí)現(xiàn)分支控制用無(wú)條件轉(zhuǎn)移指令JMP也可以實(shí)現(xiàn)分支控制。匯編語(yǔ)言中的分支通常有三種形式:
IF-THEN型:也稱單分支結(jié)構(gòu)IF-THEN-ELSE型:也稱雙分支結(jié)構(gòu)DO-CASE型:也稱多分支結(jié)構(gòu)
84.5匯編語(yǔ)言程序設(shè)計(jì)掌握:分支程序設(shè)計(jì)要領(lǐng)
91、例4.13分支程序設(shè)計(jì)例子。編程求|X-Y|,結(jié)果存于RESULT單元中,設(shè)X和Y都為16位數(shù)。DATASEGMENTX
DW-10Y
DW20RESULTDW?DATAENDSSTACKSEGMENTSTACK
DB100DUP(?)STACKENDSCODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACKSTART:
MOVAX,DATA
MOVDS,AX
MOVAX,X
SUBAX,YJNSNONNEGNEGAXNONNEG:MOVRESULT,AXMOVAH,4CHINT21HCODEENDS
END
START104.5匯編語(yǔ)言程序設(shè)計(jì)三、循環(huán)程序設(shè)計(jì)1、循環(huán)程序的結(jié)構(gòu)形式根據(jù)循環(huán)的層次不同,匯編循環(huán)程序分為單重循環(huán)和多重循環(huán)根據(jù)循環(huán)次數(shù)是否已知,常用的循環(huán)控制方式通常有計(jì)數(shù)控制與條件控制114.5匯編語(yǔ)言程序設(shè)計(jì)2、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例dataSEGMENTRESULTDW?dataENDScodeSEGMENTASSUMECS:code,DS:dataSTART: MOVAX,data MOVDS,AX (1)計(jì)數(shù)控制舉例。編程計(jì)算1+2+3+…+50的和,結(jié)果送
RESULT單元
MOVAX,1 MOVRESULT,0 MOVCX,50CLCNEXT: ADCRESULT,AX INCAX
LOOPNEXT MOVAH,4CH INT21HcodeENDS ENDSTART12DATA SEGMENTPOSITION DW ?STRING DB “Thisisastringforexample.”,0DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AX[例4-9]查找字母’a’在字符串STRING中第一次出現(xiàn)的位置,
如果未出現(xiàn),置位置值為-1。(字符串長(zhǎng)度<30)13
MOV SI,-1 ;SI用作字符串字符指針
MOV CX,30 ;字符串長(zhǎng)度30L0: INC SI ;修改指針
CMP STRING[SI],‘a(chǎn)’ ;一個(gè)字符與’a’進(jìn)行比較
LOOPNE L0 ;字符串未結(jié)束,未找到,繼續(xù)
JNE NOTFOUND ;未找到,轉(zhuǎn)“NOTFOUND” MOV POSITION,SI ;保存位置值
JMP EXITNOTFOUND:MOV POSITION,-1 ;未找到,置位置值為-1EXIT: MOV AX,4C00H INT 21HCODE ENDS END START14
字符串內(nèi)找到字符’a’:循環(huán)結(jié)束時(shí)ZF=1,SI內(nèi)是字符的出
現(xiàn)位置(從0開(kāi)始);字符串內(nèi)未找到字符’a’:循環(huán)結(jié)束時(shí)ZF=0,SI內(nèi)是字符串
的長(zhǎng)度減1(30-1=29)。程序使用LOOPNE指令來(lái)控制循環(huán),既有計(jì)數(shù)控制,又有條件控制。循環(huán)結(jié)束有兩種可能性:
對(duì)于LOOPZ/LOOPE,LOOPNZ/LOOPNE控制的循環(huán),一般應(yīng)在循環(huán)結(jié)束后用條件轉(zhuǎn)移指令分開(kāi)這兩種情況,分別處理。154.5匯編語(yǔ)言程序設(shè)計(jì)3、多重循環(huán)程序設(shè)計(jì)舉例。
實(shí)驗(yàn)4循環(huán)程序設(shè)計(jì)-排序程序一、實(shí)驗(yàn)?zāi)康恼莆昭h(huán)結(jié)構(gòu)的程序設(shè)計(jì)方法;了解排序程序的設(shè)計(jì)思路,掌握其編程方法二、實(shí)驗(yàn)內(nèi)容在地址為ADDR開(kāi)始的單元中存放著10個(gè)無(wú)序的無(wú)符號(hào)數(shù),要求按降序排列,大數(shù)在前,小數(shù)在后,結(jié)果仍放在原處。三、實(shí)驗(yàn)步驟1、進(jìn)入EDIT編輯狀態(tài),輸入源程序,存盤(pán)退出。2、用MASM編譯程序,檢查錯(cuò)誤3、用LINK連接程序,生成.EXE文件4、進(jìn)入DEBUG單步調(diào)試程序,觀察程序執(zhí)行過(guò)程,內(nèi)外層循環(huán)如何嵌套執(zhí)行,并檢查程序最終執(zhí)行結(jié)果是否正確。164.5匯編語(yǔ)言程序設(shè)計(jì)DATASEGMENTADDRDB6,2,9,1,5,0,7,8,3,4DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX MOVCX,10-1;設(shè)置計(jì)數(shù)初值
LEASI,ADDRLOP1:MOVDX,CX;設(shè)置內(nèi)循環(huán)計(jì)數(shù)器
MOVDI,SI;設(shè)置內(nèi)循環(huán)地址指針
MOVAL,[DI];取數(shù)送AL 174.5匯編語(yǔ)言程序設(shè)計(jì)LOP2:INCDICMPAL,[DI]JAENEXT;若AL>[DI]中的數(shù),轉(zhuǎn)NEXTMOVBL,ALMOVAL,[DI]MOV[DI],BL;否則,AL和[DI]數(shù)據(jù)交換NEXT:DECDXJNZLOP2;未完轉(zhuǎn)LOP2MOV[SI],AL;保存比較出的第一個(gè)大數(shù)
INCSI;調(diào)整外循環(huán)地址指針
LOOPLOP1MOVAH,4CHINT21HCODEENDSENDSTART184.5匯編語(yǔ)言程序設(shè)計(jì)4、應(yīng)用串指令編寫(xiě)循環(huán)程序datasegments1db100dup(66h)s2db100dup(00)dataendscodesegmentassumecs:code,ds:data,es:datastart:movax,datamovds,axmoves,ax
leasi,s1leadi,s2movcx,100cld
repmovsbmovah,4chint21hcodeendsendstart(1)MOVS傳送例子。用帶重復(fù)前綴的串操作指令實(shí)現(xiàn)194.5匯編語(yǔ)言程序設(shè)計(jì)六、子程序設(shè)計(jì)
子程序的設(shè)計(jì),是程序設(shè)計(jì)中被廣泛使用的一種方法。它的使用方式較多,運(yùn)用十分靈活,涉及面也較廣,需要掌握好基本的子程序設(shè)計(jì)方法。子程序是程序中功能相對(duì)獨(dú)立的一段程序。在匯編語(yǔ)言中,子程序又稱過(guò)程。程序中使用子程序的好處子程序作為一個(gè)功能性模塊,供一個(gè)程序甚至多個(gè)程序使用:可以簡(jiǎn)化源程序結(jié)構(gòu);提高程序的可讀性與可維護(hù)性;有利于代碼復(fù)用;提高程序的設(shè)計(jì)效率。20由子程序定義偽指令PROC和ENDP完成格式:
子程序名
PROC[NEAR/FAR]┆;過(guò)程體
子程序名
ENDP解釋:子程序名是子程序入口地址的符號(hào)表示。同標(biāo)號(hào)一樣,具有三種屬性,即段屬性、偏移地址屬性以及類(lèi)型屬性PROC表示子程序定義開(kāi)始,ENDP表示子程序定義結(jié)束
NEAR/FAR1、子程序的定義4.5匯編語(yǔ)言程序設(shè)計(jì)212、子程序的調(diào)用和返回過(guò)程定義后,可在主程序中用CALL指令,反復(fù)調(diào)用。過(guò)程結(jié)束,由返回指令RET返回主程序。4.5匯編語(yǔ)言程序設(shè)計(jì)強(qiáng)調(diào):在使用時(shí)應(yīng)注意的問(wèn)題
SUBPPROCPUSHAX;現(xiàn)場(chǎng)保護(hù)PUSHBXPUSHCX
┇;子程序主體POPCX;恢復(fù)現(xiàn)場(chǎng)POPBXPOPAX
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年天津一百中高考語(yǔ)文質(zhì)檢試卷(一)
- 2023年全斷面掘進(jìn)機(jī)項(xiàng)目融資計(jì)劃書(shū)
- 2023年三醋酸纖維素膜項(xiàng)目融資計(jì)劃書(shū)
- 《社會(huì)文化》課件
- 電力及電機(jī)拖動(dòng)習(xí)題庫(kù)+參考答案
- 養(yǎng)老院老人生活設(shè)施維修人員考核獎(jiǎng)懲制度
- 養(yǎng)老院老人護(hù)理評(píng)估制度
- 2024年大型企業(yè)第三方社保代繳與員工福利管理服務(wù)協(xié)議3篇
- 施工房屋漏水免責(zé)協(xié)議書(shū)(2篇)
- 2025年駕考駕考貨運(yùn)道路從業(yè)資格證
- DTU配網(wǎng)自動(dòng)化測(cè)控終端精講
- 道路運(yùn)輸達(dá)標(biāo)車(chē)輛客車(chē)貨車(chē)核查記錄表
- 兒童詩(shī)兒童詩(shī)的欣賞和創(chuàng)作(課件)
- 人力資源管理工作思路(共3頁(yè))
- 五筆常用字根表3746
- 新生兒肺氣漏
- 氣管切開(kāi)(一次性氣切導(dǎo)管)護(hù)理評(píng)分標(biāo)準(zhǔn)
- 保安工作日志表
- 姜太公釣魚(yú)的歷史故事
- 數(shù)控車(chē)床實(shí)訓(xùn)圖紙國(guó)際象棋圖紙全套
- 電子政務(wù)概論教案
評(píng)論
0/150
提交評(píng)論