版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、宏指令及其使用 宏指令、宏定義和宏調(diào)用 宏指令 源程序中具有獨(dú)立功能的一段程序代碼 宏定義 宏指令名 MACRO ; 宏體 ; ENDM 宏調(diào)用 宏調(diào)用的格式為: 宏指令名,例: 1)PUSHREGMACRO PUSHAX PUSHBX PUSHCX PUSHDX PUSH SI PUSHDI ENDM 2)LOADW MACRO PR,VAR MOVPR,VAR MOVAX,PR ENDM 3)SHIFT MACRO N,REG,CC MOVCL,N S使RET為遠(yuǎn)返回 start: PUSH DS ;入棧保存地址 MOV AX, 0 ;程序段前綴的首地址 PUSH AX ;程序主體部分 R
2、ET ;取程序段前綴首地址 main ENDP code ENDS END start,注意: 不可在匯編語言程序的最后用 INT 20H返回DOS。原因是20h中斷子程的執(zhí)行是有條件的。采用上述返回DOS的程序結(jié)構(gòu),才能滿足該條件,否則無法返回。,結(jié)束用戶程序,返回操作系統(tǒng)的另一個(gè)辦法是用中斷指令“INT 21H”。如使用這種辦法,用戶程序可以不設(shè)置過程,只要在用戶程序結(jié)束時(shí),用以下兩條指令即可: MOV AH,4CH INT 21H 這樣,上述程序的代碼段可以修改為: COSEGSEGMENT ASSUMECS:COSEG,DS:DATA ASSUMESS:STACK1 START:MOV
3、AX,DATA MOVDS,AX MOVDX,VARX ADDDX,VAY MOVCL,3 SALDX,CL SUBDX,VARX SARDX,1 MOVRESULT,DX MOVAH,4CH INT21H COSEGENDS END START,2.分支程序設(shè)計(jì) 分支程序結(jié)構(gòu)也稱條件結(jié)構(gòu),通常有兩種形式,見圖。,例:求補(bǔ)碼數(shù)X補(bǔ)的絕對(duì)值,并送回原處。 STACKSEGMENTSTACK;定義堆棧段, DW 256 DUP(?);預(yù)留256個(gè)單元 TOPLABELWORD STACK ENDS DATA SEGMENT XADR DW3456H;設(shè)X補(bǔ)=3456H DATA ENDS CODE
4、 SEGMENT MAINPROCFAR ASSUMECS:CODE,DS:DATA,SS:STACK START: MOVAX,STACK;將堆棧段段址送SS。 MOVSS,AX MOV SP,OFFSET TOP;設(shè)置棧指針,使其指向棧頂?shù)刂贰?PUSHDS;將PSP中INT 20H指令的存放地址壓入棧。 MOVAX,0 PUSHAX MOVAX,DATA;將數(shù)據(jù)段段址送DS。 MOV DS,AX MOV AX,XADR ;取X補(bǔ)到AX。 AND AX,AX ;設(shè)置標(biāo)志位。 JNS DONE ;若X0,轉(zhuǎn)DONE。 NEG AX ;若X0,求補(bǔ)得|X|。 MOV XADR,AX ;將|X|
5、送回原處。 DONE: RET ;返回PC-DOS狀態(tài)。 MAINENDP CODEENDS ENDSTART,例:設(shè)有一組(8個(gè))選擇項(xiàng)存于AL寄存器中,試根據(jù)AL中哪一位為1把程序分別轉(zhuǎn)移到相應(yīng)的分支去。 BRANCH_ADDR SEGMENT ;定義數(shù)據(jù)段。 BRANCH_TAB DWROUTINE1;定義數(shù)據(jù)表(跳轉(zhuǎn)表)。 DWROUTINE2 DWROUTINE3 DWROUTINE4 DWROUTINE5 DWROUTINE6 DWROUTINE7 DWROUTINE8 BRANCH_ADDRENDS,續(xù): ROUTINE_SELECTSEGMENT;定義代碼段。 MAINPROC
6、FAR ASSUME CS:ROUTINE_SELECT,DS:BRANCH_ADDR START:PUSHDS;將PSP中INT 20的存放地址壓入棧頂。 SUB BX,BX PUSHBX MOVBX,BRANCH_ADDR MOVDS,BX CMPAL,0;判AL中是否有置1的位。 JEDONE;若AL全零,及早退出選擇結(jié)構(gòu)。 LEABX,BRANCH_TAB;跳轉(zhuǎn)表首址送BX。 COUTINUE:SHR AL,l;AL最低位移至CF。 JNCNOT_YET;CF=0,轉(zhuǎn)去檢查下一位。 JMPWORD PTR BX;CF=1,轉(zhuǎn)相應(yīng)分支程序。 NOT_YET: ADD BX,TYPE BR
7、ANCH_TAB;修改BX內(nèi)容,為轉(zhuǎn)入下一分支作好準(zhǔn)備。 JMPCOUTINUE;繼續(xù)檢查下一選擇項(xiàng)。 DONE: RET;若無選擇項(xiàng)置位轉(zhuǎn)此處,執(zhí)行其它程序。 ROUTINE1: ROUTINE2: RET MAIN ENDP ROUTINE_SELECT ENDS END START,3.循環(huán)程序設(shè)計(jì) 常見的循環(huán)程序結(jié)構(gòu)有兩種:WHILE_DO結(jié)構(gòu)和DO_UNTIL結(jié)構(gòu),見圖。,當(dāng)型循環(huán) (當(dāng)條件成立進(jìn)入循環(huán)),直到型循環(huán) (直到條件成立退出循環(huán)),例:將內(nèi)存的二進(jìn)制數(shù)轉(zhuǎn)化成以壓縮的BCD碼形式存儲(chǔ)的十進(jìn)制數(shù)。 .MODELSMALL .386 DATASEGMENT BINNUMDD12
8、345678H;內(nèi)存中的二進(jìn)制數(shù)。 DECINUMDB5 DUP(0);轉(zhuǎn)化成壓縮的BCD碼的存儲(chǔ)區(qū)。 NUMBERDD1000000000,100000000,10000000,1000000 DD100000,10000,1000,100,10,1;減數(shù)。 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START:PUSH DS MOV AX,0 PUSH AX MOVAX,DATA MOVDS,AX ;初始化。 MOVEAX,BINNUM;將數(shù)放入EAX。 MOV SI,OFFSET DECINUM;SI指向BCD
9、碼存儲(chǔ)區(qū)。 MOV DI,OFFSET NUMBER;DI指向減數(shù)區(qū)。 MOVCX,5;循環(huán)5次。 ROTATE:CALL BINDECI ;調(diào)用二進(jìn)制轉(zhuǎn)化成十進(jìn)制子程序。 ADDDI,8;DI下移兩個(gè)雙宇。 INCSI;SI下移一個(gè)字節(jié)。 LOOP ROTATE;若CX0則循環(huán),輸出下兩位。 RET MAIN ENDP,BINDECI PROC NEAR PUSHF PUSH CX ;入棧。 MOVCX,0;CX存放商,初始清0。 CLC;清除CF。 DO_AGAIN1: SUB EAX,DWORD PTRDI;EAX減去相應(yīng)的減數(shù)。 JC NEXT1;若不夠減,則跳出循環(huán)。 INC CL;
10、否則,CL加l(商)。 JMP DO_AGAIN1;繼續(xù)減。 NEXT1: MOV CH,CL ;將商移入CH。 MOVCL,0;CL清0。 ADD EAX,DWORD PTRDI;恢復(fù)最后一次減前的值。 CLC;清除CF。 DO-AGAIN2: SUB EAX,DWORD PTRDI+4;EAX減去下一個(gè)數(shù)。 JC NEXT2;若不夠減,則跳出循環(huán)。 INC CL;否則,CL加1(商)。 JMP DO_AGAIN2;繼續(xù)減。 NEXT2:ADD EAX,DWORD PTRDI+4;恢復(fù)最后一次減前的值。 ;CH:CL中放的是高兩位商,是非壓縮的BCD碼。 ;以下將它們轉(zhuǎn)化成壓縮的BCD碼并放
11、入存儲(chǔ)單元。 SHLCH,1 SHLCH,1 SHLCH,1 SHLCH,1 ;CH左移4位。 ORCH,CL ;CH中存放壓縮的BCD碼。 MOVBYTE PTRSI,CH;放入存儲(chǔ)區(qū)。 POPCX POPF RET BINDECIENDP CODEENDS ENDSTART,例:將內(nèi)存中以壓縮的BCD碼形式存儲(chǔ)的十進(jìn)制數(shù)轉(zhuǎn)化成二制數(shù) .MODELSMALL .386 DATASEGMENT BINNUMDD 0 DECINUMDB 12H,34H,56H,78H,90H;用十六進(jìn)制數(shù)表示壓縮的BCD碼。 DATAENDS;十進(jìn)制數(shù)是1234567890。 CODESEGMENT ASSUM
12、ECS:CODE,DS:DATA MAINPROCFAR START:PUSHDS MOVAX,0 PUSHAX MOVAX,DATA MOVDS,AX;初始化 MOV EAX,0;32位二進(jìn)制數(shù)初始值為0。 MOV SI OFFSET DECINUM;DS:SI指向 DECINUM。 MOV CX,5;循環(huán)5次。 ROTATE:CALL DECIBIN INC SI;SI指向下一個(gè)字節(jié) LOOPROTATE MOVDWORD PTR BINNUM,EAX;將32位二進(jìn)制數(shù)放入 BINNUM。 RET MAIN ENDP,DECIBIN PROC NEAR PUSHF PUSH ECX PUS
13、H EBX BEGIN: MOV ECX,100 ;ECX放置乘數(shù) 100。 MUL ECX;EAX乘100 MOV CH,BYTE PTRSI;取出一個(gè)壓縮的BCD碼到CH。 MOV CL,CH;復(fù)制到CL。 AND CL,0FH;CL中保留低4位。 AND CH,0F0H ;CH中保留高4位,這時(shí)CH相當(dāng)于非壓縮的BCD碼*16。 SHR CH,1;算術(shù)右移1位,相當(dāng)于非壓縮的BCD 碼乘8。 MOV BH,CH;移入BH暫時(shí)保存。 SHR CH,1;再算術(shù)右移1位。 SHR CH,1;再算術(shù)右移1位,相當(dāng)于非壓縮的 BCD碼乘2 ADD CH,BH;相當(dāng)于非壓縮的BCD碼乘10。 ADD
14、 CL,CH;加到CL上。 MOV CH,0;ECX保存兩位BCD碼轉(zhuǎn)化成二進(jìn)制數(shù)的結(jié)果。 ADD EAX,ECX;加到EAX上去。 POPEBX POPECX POPF RET DECIBIN ENDP CODE ENDS END START,DSEGSEGMENT ADDR DW N DUP(?) DSEGENDS CSEGSEGMENT MAINPROCFAR START:PUSHDS SUBAX,AX PUSHAX MOVAX,DSEG MOVDS,AX MOVCX,N;內(nèi)循環(huán)變量存于CX中,初值為N-l。 DECCX LOOP1:MOVDI,CX;外循環(huán)變量存于DI中,初值為N-l。 MOVBX,0;地址指針預(yù)置為0。 LOOP2:MOVAX,ADDRBX
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- LS/T 1105-2024全谷物分類與標(biāo)示要求
- 2025-2030年中國空調(diào)行業(yè)并購重組擴(kuò)張戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國智能監(jiān)控系列芯片行業(yè)資本規(guī)劃與股權(quán)融資戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國晶圓制造行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國光纖激光器行業(yè)并購重組擴(kuò)張戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國地理信息行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 新形勢(shì)下虛擬養(yǎng)老院行業(yè)可持續(xù)發(fā)展戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國團(tuán)餐行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 建設(shè)項(xiàng)目環(huán)境影響評(píng)價(jià)技術(shù)咨詢合同
- 自動(dòng)打鈴控制器-PLC控制系統(tǒng)課程設(shè)計(jì)
- QCT1067.5-2023汽車電線束和電器設(shè)備用連接器第5部分:設(shè)備連接器(插座)的型式和尺寸
- (完整版)儀表選型
- T-CCAA 39-2022碳管理體系 要求
- 成人霧化吸入護(hù)理團(tuán)體標(biāo)準(zhǔn)解讀
- 油氣回收相關(guān)理論知識(shí)考試試題及答案
- 2024-2030年中國氣槍行業(yè)市場(chǎng)深度分析及發(fā)展前景預(yù)測(cè)報(bào)告
- 數(shù)字化技術(shù)在促進(jìn)幼兒語言發(fā)展中的應(yīng)用
- 江西省上饒市2023-2024學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量測(cè)試物理試題(解析版)
- 學(xué)生(幼兒)上學(xué)放學(xué)交通方式情況登記表
- 提高感染性休克集束化治療達(dá)標(biāo)率
- 電動(dòng)自行車換電柜規(guī)劃方案
評(píng)論
0/150
提交評(píng)論