十三次課子程序說明文件微機(jī)原理_第1頁
十三次課子程序說明文件微機(jī)原理_第2頁
十三次課子程序說明文件微機(jī)原理_第3頁
十三次課子程序說明文件微機(jī)原理_第4頁
十三次課子程序說明文件微機(jī)原理_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

4.3匯編語言程序設(shè)計(jì)的基本方法一、程序設(shè)計(jì)步驟二、源程序的匯編、連接與調(diào)試三、IBMPC匯編語言程序源程序的完整結(jié)構(gòu)及偽指令四、順序結(jié)構(gòu)五、分支結(jié)構(gòu)六、循環(huán)結(jié)構(gòu)七、子程序八、DOS系統(tǒng)功能調(diào)用九、字符串處理十、宏指令1.七、子程序1、過程定義2.六、子程序概念:子程序?yàn)楣δ艽_定、且獨(dú)立的程序段。優(yōu)點(diǎn):可以將任何一段獨(dú)立的程序歸整為一個(gè)子程序,當(dāng)需要該段程序時(shí),只需調(diào)用子程序即可,調(diào)用后會(huì)自動(dòng)返回到調(diào)用指令的下一條指令。因此采用子程序設(shè)計(jì)時(shí),可以簡(jiǎn)化程序設(shè)計(jì)。從調(diào)試程序的角度,由于原本在多處出現(xiàn)的程序段,縮減為子程序調(diào)用指令,使調(diào)試程序更加方便。3.缺點(diǎn):采用子程序設(shè)計(jì)后。由于調(diào)用子程序和從子程序中返回需要執(zhí)行指令,并且為保護(hù)某些寄存器的內(nèi)容,需要進(jìn)行壓入堆棧和彈出堆棧的操作,因此會(huì)使程序執(zhí)行速度受到一定的影響。

六、子程序4.實(shí)現(xiàn):子程序調(diào)用是通過自動(dòng)修改(IP)和/或(CS)的內(nèi)容實(shí)現(xiàn)的。為了確保子程序調(diào)用后能夠返回到調(diào)用指令之后,CALL指令會(huì)自動(dòng)保存返回地址(IP和/或CS),而RET指令會(huì)自動(dòng)返回到CALL指令的下一條指令。

六、子程序5.2、調(diào)用和返回指令CALL指令:段內(nèi)調(diào)用段間調(diào)用段內(nèi)直接調(diào)用段內(nèi)間接調(diào)用段間直接調(diào)用段間間接調(diào)用六、子程序6.(IP)(cs)7.段內(nèi)調(diào)用子過程與原調(diào)用程序在同一代碼段,在調(diào)用之前會(huì)自動(dòng)把斷點(diǎn)的偏移地址壓棧(調(diào)用指令的下一條指令的地址)斷點(diǎn)入口地址CALLTIMERCALLWORDPTR[SI]六、子程序8.段間調(diào)用子過程與原調(diào)用程序不在同一代碼段,在調(diào)用之前會(huì)自動(dòng)把斷點(diǎn)的段基地址和偏移地址壓棧。先將斷點(diǎn)的CS壓棧,再壓入IP。CALLFARPTRTIMERCALLDWORDPTR[SI]六、子程序9.返回指令格式:

RETRETF近返回:從棧頂彈出兩個(gè)字節(jié)內(nèi)容送IP,

SP內(nèi)容加2遠(yuǎn)返回:從棧頂彈出四個(gè)字節(jié)內(nèi)容分別送CS和IP,SP內(nèi)容加4從堆棧中彈出斷點(diǎn)地址,返回源程序。段內(nèi)返回(近返回)段間返回(遠(yuǎn)返回)斷點(diǎn)入口地址六、子程序10.3、主程序和子程序間的參數(shù)傳遞入口參數(shù):將主程序給子程序提供的初始數(shù)據(jù)或獲得初始數(shù)據(jù)的信息稱為子程序的入口參數(shù)。出口參數(shù):子程序返回給主程序的結(jié)果稱為子程序的出口參數(shù)。參數(shù)傳遞可用以下3種方法完成:*利用寄存器*利用內(nèi)存單元(變量)傳遞參數(shù)。*利用堆棧六、子程序11.4、子程序說明文件

六、子程序12.5、過程的嵌套、遞歸調(diào)用

過程的嵌套六、子程序遞歸調(diào)用當(dāng)子程序嵌套時(shí),若某子程序要調(diào)用的子程序就是其本身,則稱為遞歸調(diào)用。13.例1

子程序設(shè)計(jì),編寫子程序?qū)崿F(xiàn)統(tǒng)計(jì)一個(gè)字(AX)中“1”的個(gè)數(shù)。解:利用移位指令或循環(huán)移位指令,每次對(duì)CF位進(jìn)行檢測(cè):當(dāng)CF=1時(shí),則總個(gè)數(shù)加1;當(dāng)CF=0時(shí),則總個(gè)數(shù)不變。這種操作可以采用有條件轉(zhuǎn)移指令來實(shí)現(xiàn),也可采用方便的ADC指令實(shí)現(xiàn)。子程序如下:

六、子程序14.COUNTER1PROCNEARPUSHAX MOVCX,16 XORBL,BLCOU1: SHRAX,1 ADCBL,0 LOOPCOU1POPAXRETCOUNTER1ENDP六、子程序15.例1

子程序應(yīng)用。利用上例設(shè)計(jì)的子程序,統(tǒng)計(jì)字型變量VAR1中1的個(gè)數(shù)。解:在數(shù)據(jù)段中定義變量VAR1和CounterVar1:

VAR1 DW 1234H CounterVar1 DB?則可在代碼段中編寫程序:

MOVAX,VAR1 CALLCOUNTER1 MOV CounterVar1,BL執(zhí)行后,結(jié)果單元CounterVar1的值為5,說明1234H中包含有5個(gè)“1”。

六、子程序16.例2

編寫程序,完成將一組BCD數(shù)轉(zhuǎn)換成16位二進(jìn)制數(shù)。(BCD數(shù)轉(zhuǎn)換成16位二進(jìn)制數(shù)用子程序?qū)崿F(xiàn))

BCD數(shù)轉(zhuǎn)換成16位二進(jìn)制數(shù)的算法步驟為:①DX=0;(用DX存放結(jié)果)②取要轉(zhuǎn)換的一組BCD數(shù)中的高位→(AX)③(DX)=(DX)*10+(AX)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論