国产欧美日韩综合在线,亚洲一区二区视频在线观看,近親偷子亂伦ⅩⅩ99,综合国产精品2021

  • <mark id="lnu3d"><thead id="lnu3d"><input id="lnu3d"></input></thead></mark>
  • <output id="lnu3d"></output>

    <acronym id="lnu3d"></acronym>
    <sup id="lnu3d"><thead id="lnu3d"><input id="lnu3d"></input></thead></sup>
  • ? 首頁 ? 百科知識 ?加工中心調(diào)用子程序指令

    加工中心調(diào)用子程序指令

    時(shí)間:2024-10-17 百科知識 版權(quán)反饋
    【摘要】:子程序在匯編語言中常稱為過程,子程序結(jié)構(gòu)是模塊化程序設(shè)計(jì)的重要基礎(chǔ)。在模塊化程序設(shè)計(jì)中,通常要把一個(gè)較大程序分解為多個(gè)具有獨(dú)立功能的程序模塊,這些獨(dú)立模塊稱為子程序或過程。在子程序中應(yīng)有內(nèi)部文檔使子程序可讀性好,可理解性好,便于使用。這種方法適用于參數(shù)多、子程序嵌套調(diào)用和遞歸調(diào)用的情況。編寫子程序時(shí),應(yīng)注意選用適當(dāng)?shù)姆椒ㄟM(jìn)行參數(shù)傳遞。

    2.6.5 子程序設(shè)計(jì)

    子程序在匯編語言中常稱為過程,子程序結(jié)構(gòu)是模塊化程序設(shè)計(jì)的重要基礎(chǔ)。在模塊化程序設(shè)計(jì)中,通常要把一個(gè)較大程序分解為多個(gè)具有獨(dú)立功能的程序模塊,這些獨(dú)立模塊稱為子程序或過程。在編程和調(diào)試階段,一般以模塊為單位進(jìn)行設(shè)計(jì)和調(diào)試,最后組裝聯(lián)調(diào)構(gòu)成完整程序。模塊化程序設(shè)計(jì)有利于分解復(fù)雜問題,也便于大型程序調(diào)試和軟件開發(fā)中的分工與協(xié)作。

    子程序的調(diào)用和返回是通過指令實(shí)現(xiàn)的,本節(jié)先介紹子程序調(diào)用與返回指令。

    1.調(diào)用與返回指令

    (1)調(diào)用指令CALL

    CALL指令用于實(shí)現(xiàn)調(diào)用子程序的功能,可分為以下4種調(diào)用方式:

    ① 段內(nèi)直接調(diào)用

    指令格式:CALL dst

    執(zhí)行操作:(SP) ← (SP)?2,((SP)+1,(SP)) ← (IP)(返回地址),(IP) ← (IP)+D(入口地址)

    ② 段內(nèi)間接調(diào)用

    指令格式:CALL dst

    執(zhí)行操作:(SP) ← (SP)?2,((SP)+1,(SP)) ← (IP),(IP) ← (OA)

    ③ 段間直接調(diào)用

    指令格式:CALL dst

    執(zhí)行操作:(SP) ← (SP)?2,((SP)+1,(SP)) ← (CS),(SP)←(SP)?2

    ((SP)+1,(SP)) ← (IP),(IP) ← dst

    ④ 段間間接調(diào)用

    指令格式:CALL dst

    執(zhí)行操作:(SP) ← (SP)?2,((SP)+1,(SP)) ← (CS),(SP) ← (SP)?2

    (SP)+1,(SP)) ← (IP),(IP) ← (OA),(CS) ← (OA+2)

    (2)返回指令 RET

    子程序或過程執(zhí)行的最后一條指令必須是RET指令,RET指令將使程序的執(zhí)行控制從子程序返回到調(diào)用指令CALL后的指令處(即斷點(diǎn))繼續(xù)執(zhí)行。

    2.子程序的編寫方法

    需要多次執(zhí)行并具有獨(dú)立功能的一段程序,可以編寫成子程序。

    (1)編寫子程序的要求

    ① 保護(hù)寄存器與工作單元

    如果子程序要用到某些寄存器或存儲單元,而它們的內(nèi)容在子程序返回后還需使用,為了不破壞原有信息,應(yīng)將它們的內(nèi)容壓入堆棧保護(hù),或者存入一些空閑存儲器單元或寄存器,返回之前再恢復(fù)這些信息。

    ② 正確使用堆棧

    調(diào)用程序轉(zhuǎn)入子程序之前,在堆棧頂部保存了斷點(diǎn)地址,當(dāng)子程序執(zhí)行RET指令時(shí),則將從棧頂彈出斷點(diǎn)地址,以便返回到調(diào)用程序。

    ③ 說明文檔

    在子程序中應(yīng)有內(nèi)部文檔使子程序可讀性好,可理解性好,便于使用。子程序中應(yīng)給出必要說明和適當(dāng)?shù)恼Z句注釋,這些說明和注釋稱為內(nèi)部文檔。

    ④ 參數(shù)傳遞

    通過調(diào)用程序傳遞給子程序的參數(shù),可以使程序的每次調(diào)用完成不同要求的具體操作,增加子程序的靈活性。

    參數(shù)傳遞方法一般分為三種:

    · 用寄存器傳遞:將參數(shù)送入約定的寄存器中。這種方法受到CPU寄存器個(gè)數(shù)的限制,一般用于參數(shù)較少的情況。

    · 用參數(shù)表傳遞:調(diào)用程序?qū)?shù)組成一個(gè)參數(shù)表,存放在內(nèi)存或外設(shè)端口中,然后用寄存器將表址傳送給子程序。這種方法適用于大量參數(shù)的傳送。

    · 用堆棧傳遞:調(diào)用程序?qū)?shù)壓入堆棧,子程序從堆棧中取得參數(shù)。這種方法適用于參數(shù)多、子程序嵌套調(diào)用和遞歸調(diào)用的情況。編寫子程序時(shí),應(yīng)注意選用適當(dāng)?shù)姆椒ㄟM(jìn)行參數(shù)傳遞。

    (2)調(diào)用程序與子程序之間的參數(shù)傳遞示例

    例2-50 將用壓縮的BCD碼表示的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)。

    設(shè)BCD碼為4位(d?3d?2d?1d?0),按下面的公式將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)BIN:

    BIN =((((0×10)+d?3)×10+d?2)×10+d?1)×10+d?0

    img151

    img152

    img153

    上例中用dx寄存器傳送入口參數(shù)(BCD碼十進(jìn)制數(shù)),用bx返回轉(zhuǎn)換為二進(jìn)制數(shù)。子程序中還使用了ax和cx寄存器,為了適應(yīng)其他程序調(diào)用,dtob子程序保護(hù)了ax和cx寄存器原內(nèi)容。dx用于傳送入口參數(shù),不必保護(hù),bx用于返回參數(shù),則不能保護(hù),否則執(zhí)行恢復(fù)操作時(shí),pop bx指令將破壞出口參數(shù)。

    在數(shù)據(jù)轉(zhuǎn)換過程中,由于寄存器dx、cx既要參與乘法運(yùn)算,同時(shí)dx還要繼續(xù)保存入口參數(shù),cx還要保存循環(huán)移位計(jì)數(shù)和循環(huán)次數(shù),因此程序采用了將dx、cx入棧臨時(shí)保護(hù)的方法,使dx、cx寄存器的原值在操作過程中得到保留。

    免責(zé)聲明:以上內(nèi)容源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。

    我要反饋