專利名稱:一種匯編執(zhí)行復(fù)雜任務(wù)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種匯編執(zhí)行復(fù)雜任務(wù)的方法和裝置。
背景技術(shù):
大多數(shù)復(fù)雜任務(wù),由于任務(wù)持續(xù)時(shí)間較長(zhǎng),故執(zhí)行起來比較困難。 一個(gè)常用的解決
方法是,將一個(gè)復(fù)雜任務(wù)分解為若干個(gè)子任務(wù),這些子任務(wù)一般為最小的任務(wù)單位,另外,
這些子任務(wù)之間互不重疊,但有些子任務(wù)的執(zhí)行需要以其它子任務(wù)為前提。 例如,一個(gè)復(fù)雜任務(wù)被分解成4個(gè)獨(dú)立的子任務(wù),假設(shè)其編號(hào)分別為1、2、3、4,且
該復(fù)雜任務(wù)必須按照特定的順序執(zhí)行,也即,編號(hào)在1之后的子任務(wù)不能在子任務(wù)1以前執(zhí)
行,編號(hào)在2之后的子任務(wù)不能在子任務(wù)2以前執(zhí)行,編號(hào)在3之后的子任務(wù)不能在子任務(wù)
3以前執(zhí)行;那么,在執(zhí)行該復(fù)雜任務(wù)時(shí),現(xiàn)有技術(shù)主要有兩種處理方法 方法一、針對(duì)每一個(gè)可能的子任務(wù)序列設(shè)計(jì)一個(gè)單獨(dú)的函數(shù),參照?qǐng)Dl,可以針對(duì)
上例中的復(fù)雜任務(wù)設(shè)計(jì)15個(gè)不同的函數(shù),由于每個(gè)函數(shù)中的子任務(wù)序列不存在有條件地
執(zhí)行,也即,所述序列中的子任務(wù)無需按照特定的順序執(zhí)行,因此,可以通過使用最理想的
代碼來將所述序列優(yōu)化成最佳性能;這樣,在執(zhí)行該復(fù)雜任務(wù)時(shí),調(diào)用函數(shù)將調(diào)用需要被執(zhí)
行的任務(wù)序列,并在該任務(wù)序列結(jié)束后繼續(xù)執(zhí)行下一個(gè)函數(shù)。 本方法能夠?qū)⑷蝿?wù)序列優(yōu)化成最佳性能,且在CPU周期方面是最優(yōu)效率的,但是 由于同樣的子任務(wù)不止在一個(gè)序列中出現(xiàn),例如,子任務(wù)1在函數(shù)中出現(xiàn)了 9次,故會(huì)導(dǎo)致 大的代碼量。 方法二、該方法設(shè)計(jì)一個(gè)母函數(shù),該母函數(shù)分析輸入?yún)?shù)并決定需要執(zhí)行哪個(gè)子 任務(wù),其中,每一個(gè)需要執(zhí)行的子任務(wù)都單獨(dú)執(zhí)行并在結(jié)束后返回該母函數(shù);參照?qǐng)D2,本 方法在代碼量上有顯著縮小,但是,執(zhí)行每個(gè)子任務(wù)都需要調(diào)用、返回操作,因此本方法會(huì) 消耗更多的CPU周期。 總之,需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問題就是如何能夠一種執(zhí)行復(fù) 雜任務(wù)的方案,用以在使用小代碼量的前提下,減少CPU周期的耗費(fèi)。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是一種匯編執(zhí)行復(fù)雜任務(wù)的方法和裝置,用以在使用 小代碼量的前提下,減少CPU周期的耗費(fèi)。 為了解決上述問題,本發(fā)明公開了一種匯編執(zhí)行復(fù)雜任務(wù)的方法,所述復(fù)雜任務(wù) 包括多個(gè)子任務(wù),所述子任務(wù)包括入口和出口 ,所述方法包括 確定步驟根據(jù)當(dāng)前任務(wù)信息,確定所述復(fù)雜任務(wù)中需要執(zhí)行的第一個(gè)子任務(wù);
準(zhǔn)備步驟獲取第一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息; 處理步驟從第一個(gè)子任務(wù)起,將需要執(zhí)行的每個(gè)子任務(wù)作為當(dāng)前子任務(wù)進(jìn)行處 理,所述處理步驟包括 執(zhí)行子步驟進(jìn)入當(dāng)前子任務(wù)并執(zhí)行;
4
判斷子步驟執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行的下一個(gè)子任務(wù);
獲取子步驟獲取下一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;
轉(zhuǎn)入子步驟在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
優(yōu)選的,所述方法還包括
調(diào)用步驟調(diào)用第一個(gè)子任務(wù);
所述處理步驟還包括 保存子步驟將下一個(gè)子任務(wù)的入口地址,保存于返回寄存器; 所述轉(zhuǎn)入子步驟為,在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),從所述返回寄存器中讀取地址,并 跳轉(zhuǎn)過去。
優(yōu)選的,所述子任務(wù)還包括函數(shù),所述函數(shù)包括任務(wù)代碼和多個(gè)接口轉(zhuǎn)換代碼;
其中,每個(gè)接口轉(zhuǎn)換代碼針對(duì)當(dāng)前子任務(wù)與相應(yīng)的下一個(gè)子任務(wù),并且,在當(dāng)前任 務(wù)的出口信息與下一個(gè)子任務(wù)的入口信息一致時(shí),所述接口轉(zhuǎn)換代碼為空;在當(dāng)前任務(wù)的 出口信息與下一個(gè)子任務(wù)的入口信息不一致時(shí),所述接口轉(zhuǎn)換代碼不為空,且用于將當(dāng)前 子任務(wù)的出口信息轉(zhuǎn)換為下一個(gè)子任務(wù)的入口信息; 所述執(zhí)行子步驟為,進(jìn)入當(dāng)前子任務(wù),并執(zhí)行當(dāng)前子任務(wù)的任務(wù)代碼;
所述轉(zhuǎn)入子步驟包括 在所述任務(wù)代碼執(zhí)行完畢時(shí),執(zhí)行與下一個(gè)子任務(wù)相應(yīng)的接口轉(zhuǎn)換代碼;
在所述接口轉(zhuǎn)換代碼執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
優(yōu)選的,所述執(zhí)行信息包括子任務(wù)的入口信息,以及,需要執(zhí)行的數(shù)據(jù)信息。
優(yōu)選的,所述處理步驟還包括 寫入子步驟將獲取的下一個(gè)子任務(wù)的入口地址寫入地址寄存器。
優(yōu)選的,所述多個(gè)子任務(wù)具有對(duì)應(yīng)的任務(wù)編號(hào);
所述處理步驟還包括 檢測(cè)子步驟檢測(cè)是否需要執(zhí)行編號(hào)排在當(dāng)前子任務(wù)之后的子任務(wù),若是,則執(zhí)行 判斷子步驟,否則,該復(fù)雜任務(wù)執(zhí)行完畢。 本發(fā)明還公開了一種匯編執(zhí)行復(fù)雜任務(wù)的裝置,所述復(fù)雜任務(wù)包括多個(gè)子任務(wù), 所述子任務(wù)包括入口和出口 ,所述裝置包括 確定模塊,用于根據(jù)當(dāng)前任務(wù)信息,確定所述復(fù)雜任務(wù)中需要執(zhí)行的第一個(gè)子任 務(wù); 準(zhǔn)備模塊,用于獲取第一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息; 處理模塊,用于從第一個(gè)子任務(wù)起,將需要執(zhí)行的每個(gè)子任務(wù)作為當(dāng)前子任務(wù)進(jìn)
行處理,所述處理模塊包括 執(zhí)行子模塊,用于進(jìn)入當(dāng)前子任務(wù)并執(zhí)行; 判斷子模塊,用于在執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行的下一個(gè)子任 務(wù); 獲取子模塊,用于獲取下一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;
轉(zhuǎn)入子模塊,用于在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
優(yōu)選的,所述裝置還包括
調(diào)用模塊,用于調(diào)用第一個(gè)子任務(wù);
所述處理模塊還包括 保存子模塊,用于將下一個(gè)子任務(wù)的入口地址,保存于返回寄存器; 所述轉(zhuǎn)入子模塊,用于在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),從所述返回寄存器中讀取地址,
并跳轉(zhuǎn)過去。
優(yōu)選的,所述子任務(wù)還包括函數(shù),所述函數(shù)包括任務(wù)代碼和多個(gè)接口轉(zhuǎn)換代碼; 其中,每個(gè)接口轉(zhuǎn)換代碼針對(duì)當(dāng)前子任務(wù)與相應(yīng)的下一個(gè)子任務(wù),并且,在當(dāng)前任
務(wù)的出口信息與下一個(gè)子任務(wù)的入口信息一致時(shí),所述接口轉(zhuǎn)換代碼為空;在當(dāng)前任務(wù)的
出口信息與下一個(gè)子任務(wù)的入口信息不一致時(shí),所述接口轉(zhuǎn)換代碼不為空,且用于將當(dāng)前
子任務(wù)的出口信息轉(zhuǎn)換為下一個(gè)子任務(wù)的入口信息; 所述執(zhí)行子模塊,用于執(zhí)行當(dāng)前子任務(wù)的任務(wù)代碼; 所述轉(zhuǎn)入子模塊包括 轉(zhuǎn)換執(zhí)行單元,用于在所述任務(wù)代碼執(zhí)行完畢時(shí),執(zhí)行與下一個(gè)子任務(wù)相應(yīng)的接 口轉(zhuǎn)換代碼; 通信單元,用于在所述接口轉(zhuǎn)換代碼執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
優(yōu)選的,所述處理模塊還包括 寫入子模塊,用于將獲取的下一個(gè)子任務(wù)的入口地址寫入地址寄存器。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn) 本發(fā)明在執(zhí)行復(fù)雜任務(wù)的當(dāng)前子任務(wù)期間,建立從當(dāng)前子任務(wù)的出口通往下一個(gè)
子任務(wù)的入口的路線;這樣,所述復(fù)雜任務(wù)的執(zhí)行流程為當(dāng)前子任務(wù)的入口一當(dāng)前子任
務(wù)的執(zhí)行一當(dāng)前子任務(wù)的出口一下一個(gè)子任務(wù)的入口一下一個(gè)子任務(wù)的執(zhí)行;由于所述路
線的執(zhí)行幾乎不需要額外的代碼,且只需從當(dāng)前子任務(wù)的出口 ,轉(zhuǎn)到下一個(gè)子任務(wù)的入口 ,
因此可以避免不必要的調(diào)用、返回操作,從而能夠減少CPU周期的耗費(fèi)量; 另外,為保證路線的暢通,本發(fā)明還可以在子任務(wù)的函數(shù)中設(shè)計(jì)為多個(gè)接口轉(zhuǎn)換
代碼,可用于在當(dāng)前任務(wù)的出口信息與下一個(gè)子任務(wù)的入口信息不一致時(shí),將當(dāng)前子任務(wù)
的出口信息轉(zhuǎn)換為下一個(gè)子任務(wù)的入口信息,因而,本發(fā)明只需額外的小代碼段,就可以使
得復(fù)雜任務(wù)序列順暢執(zhí)行。
圖1是現(xiàn)有技術(shù)方法一執(zhí)行復(fù)雜任務(wù)的流程圖; 圖2是現(xiàn)有技術(shù)方法二執(zhí)行復(fù)雜任務(wù)的流程圖; 圖3是本發(fā)明一種匯編執(zhí)行復(fù)雜任務(wù)的方法實(shí)施例1的流程圖; 圖4是本發(fā)明一種子任務(wù)的結(jié)構(gòu)圖; 圖5是本發(fā)明一種復(fù)雜任務(wù)的執(zhí)行流程圖; 圖6是本發(fā)明一種匯編執(zhí)行復(fù)雜任務(wù)的方法實(shí)施例2的流程圖; 圖7是本發(fā)明一種復(fù)雜任務(wù)執(zhí)行路線示意圖; 圖8是本發(fā)明一種匯編執(zhí)行復(fù)雜任務(wù)的方法實(shí)施例3的流程圖; 圖9是本發(fā)明一種匯編執(zhí)行復(fù)雜任務(wù)的裝置實(shí)施例的結(jié)構(gòu)圖。
具體實(shí)施例方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí) 施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說明。 在一個(gè)復(fù)雜任務(wù)被分解為多個(gè)子任務(wù)時(shí),如果能夠?qū)?fù)雜任務(wù)中需要執(zhí)行的一個(gè)
子任務(wù)的末端與下一個(gè)子任務(wù)的開端結(jié)合起來,那么,將可以減少調(diào)用、返回的CPU周期。 因此,本發(fā)明實(shí)施例的核心構(gòu)思之一在于,在執(zhí)行復(fù)雜任務(wù)時(shí),針對(duì)需要執(zhí)行的當(dāng)
前子任務(wù),建立通往下一個(gè)子任務(wù)的路線,其中,所述路線可以為,從當(dāng)前子任務(wù)的出口到
下一個(gè)子任務(wù)的入口所經(jīng)過的路徑;那么,無論該復(fù)雜任務(wù)中需要執(zhí)行的子任務(wù)有哪些,都
可以根據(jù)所述路線來執(zhí)行任務(wù);所述路線的執(zhí)行幾乎不需要額外的代碼,且只需從當(dāng)前子
任務(wù)的出口,轉(zhuǎn)到下一個(gè)子任務(wù)的入口,因此可以避免不必要的調(diào)用、返回操作,從而能夠
減少CPU周期的耗費(fèi)量。 參照?qǐng)D3,示出了本發(fā)明一種匯編執(zhí)行復(fù)雜任務(wù)的方法實(shí)施例1的流程圖,所述復(fù)雜 任務(wù)可以包括多個(gè)子任務(wù),所述子任務(wù)可以包括入口和出口,所述方法具體可以包括
確定步驟301、根據(jù)當(dāng)前任務(wù)信息,確定所述復(fù)雜任務(wù)中需要執(zhí)行的第一個(gè)子任務(wù);
在實(shí)際中,每個(gè)子任務(wù)可用于實(shí)現(xiàn)一些特定的功能;而在匯編環(huán)境下,每個(gè)子任務(wù) 又可對(duì)應(yīng)某個(gè)函數(shù),用于執(zhí)行一些延時(shí)、算數(shù)運(yùn)算、格式轉(zhuǎn)換、輸出等操作;這樣,參照?qǐng)D4 所示的子任務(wù)結(jié)構(gòu)圖,每個(gè)子任務(wù)可以包括入口 、函數(shù)和出口三部分。 另外,大多數(shù)時(shí)候,事先并不知道執(zhí)行復(fù)雜任務(wù)中的哪些子任務(wù),需要在執(zhí)行過程
中,根據(jù)當(dāng)前任務(wù)信息確定需要執(zhí)行哪個(gè)子任務(wù)。
例如,某個(gè)任務(wù)的工作流程如下 任務(wù)A-〉復(fù)雜任務(wù)B-〉任務(wù)C,其中,_>代表任務(wù)的流向,所述復(fù)雜任務(wù)8包括4 個(gè)子任務(wù),分別為子任務(wù)1、子任務(wù)2、子任務(wù)3和子任務(wù)4,且該復(fù)雜任務(wù)必須按照特定的順 序執(zhí)行,也即,子任務(wù)2、3、4不能在1以前執(zhí)行,子任務(wù)3、4不能在2以前執(zhí)行,子任務(wù)4不 能在3以前執(zhí)行; 那么,子任務(wù)1、2、3、4都有可能是復(fù)雜任務(wù)B中需要執(zhí)行的第一個(gè)子任務(wù),因此,
需要在任務(wù)A執(zhí)行期間,或者執(zhí)行完畢時(shí),完成第一個(gè)子任務(wù)的確定工作。 準(zhǔn)備步驟302、獲取第一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息; 假設(shè)確定步驟301確定的第一個(gè)子任務(wù)是子任務(wù)2,那么,準(zhǔn)備步驟302則用于獲
取子任務(wù)2的入口地址和執(zhí)行信息。 在實(shí)際中,所述執(zhí)行信息也即執(zhí)行某個(gè)子任務(wù)所需要的信息,一般可以包括子任 務(wù)的入口信息,以及,需要執(zhí)行的數(shù)據(jù)信息;其中,所述入口信息可以為某個(gè)子任務(wù)的輸入 參數(shù),其可能是常數(shù),也可能來自上一個(gè)子任務(wù);所述需要執(zhí)行的數(shù)據(jù)信息可以為數(shù)據(jù)的存 儲(chǔ)地址。 處理步驟303、從第一個(gè)子任務(wù)起,將需要執(zhí)行的每個(gè)子任務(wù)作為當(dāng)前子任務(wù)進(jìn)行
處理,所述處理步驟303可以包括 執(zhí)行子步驟331、進(jìn)入當(dāng)前子任務(wù)并執(zhí)行; 本子步驟也即進(jìn)入當(dāng)前子任務(wù)的入口,并執(zhí)行其函數(shù);例如,對(duì)于任務(wù)A-〉復(fù)雜任 務(wù)B的工作流程,對(duì)于第一個(gè)子任務(wù),執(zhí)行路線的來源是任務(wù)A的出口,而對(duì)于其它子任務(wù), 執(zhí)行路線的來源則是上一個(gè)子任務(wù)的出口 。
7
判斷子步驟332、執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行的下一個(gè)子任務(wù);
由于某些處理器支持VLIW(超長(zhǎng)指令字,Very Long InstructionWord)或者delay slot (延遲槽)等技術(shù),因此,本步驟需要執(zhí)行的下一個(gè)子任務(wù)的工作可以穿插在當(dāng)前子任 務(wù)執(zhí)行期間并行完成,以節(jié)省時(shí)間。 獲取子步驟333、獲取下一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;
轉(zhuǎn)入子步驟334、在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
例如,當(dāng)前子任務(wù)為子任務(wù)l,獲取得到的下一個(gè)子任務(wù)3的入口地址為0x1030, 本子步驟則是從子任務(wù)l的出口轉(zhuǎn)入子任務(wù)3的入口。 為使本領(lǐng)域技術(shù)人員更好地理解本發(fā)明,以下以一個(gè)復(fù)雜任務(wù)的執(zhí)行過程為例對(duì) 本實(shí)施例進(jìn)一步說明。 本例設(shè)計(jì)任務(wù)的工作流程為任務(wù)A_>復(fù)雜任務(wù)B_>任務(wù)C,其中,_>代表任務(wù)的 流向,所述復(fù)雜任務(wù)B包括4個(gè)子任務(wù),分別為子任務(wù)1、子任務(wù)2、子任務(wù)3和子任務(wù)4 ;參 照?qǐng)D5所示的復(fù)雜任務(wù)的執(zhí)行流程圖,具體可以包括以下步驟 步驟S1、在任務(wù)A執(zhí)行期間,根據(jù)當(dāng)前任務(wù)信息確定所述復(fù)雜任務(wù)中需要執(zhí)行的 第一個(gè)子任務(wù)為子任務(wù)1 ; 步驟S2、獲取子任務(wù)1的入口地址,并準(zhǔn)備其執(zhí)行信息; 步驟S3、進(jìn)入子任務(wù)1并執(zhí)行其函數(shù);執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行 的下一個(gè)子任務(wù)為子任務(wù)2,得到子任務(wù)2的入口地址,并準(zhǔn)備好其執(zhí)行信息;
步驟S4、進(jìn)入子任務(wù)1并執(zhí)行其函數(shù);執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行 的下一個(gè)子任務(wù)為子任務(wù)2,得到子任務(wù)2的入口地址,準(zhǔn)備好其執(zhí)行信息;并在子任務(wù)1 執(zhí)行完畢時(shí),轉(zhuǎn)到子任務(wù)2的入口地址; 步驟S5、進(jìn)入子任務(wù)2并執(zhí)行其函數(shù);執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行 的下一個(gè)子任務(wù)為子任務(wù)3,得到子任務(wù)3的入口地址,準(zhǔn)備好其執(zhí)行信息;并在子任務(wù)2 執(zhí)行完畢時(shí),轉(zhuǎn)到子任務(wù)3的入口地址; 步驟S6、進(jìn)入子任務(wù)3并執(zhí)行其函數(shù);執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行 的下一個(gè)子任務(wù)為子任務(wù)4,得到子任務(wù)4的入口地址,準(zhǔn)備好其執(zhí)行信息;并在子任務(wù)3 執(zhí)行完畢時(shí),轉(zhuǎn)到子任務(wù)4的入口地址; 步驟S7、進(jìn)入子任務(wù)4并執(zhí)行其函數(shù);執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行 的下一個(gè)任務(wù)為任務(wù)C,得到任務(wù)C的入口地址,準(zhǔn)備好其執(zhí)行信息;并在子任務(wù)4執(zhí)行完 畢時(shí),轉(zhuǎn)到任務(wù)C的入口地址。 上例示出了在復(fù)雜任務(wù)B后緊接著執(zhí)行任務(wù)C的情形,這里的任務(wù)C可以是普通 任務(wù),也可以是包括多個(gè)子任務(wù)的復(fù)雜任務(wù);因此,本實(shí)施例可以適用于多個(gè)復(fù)雜任務(wù)(或 者復(fù)雜任務(wù)+任務(wù))的不間斷執(zhí)行。 另外,在一個(gè)復(fù)雜任務(wù)中,所述多個(gè)子任務(wù)往往具有對(duì)應(yīng)的任務(wù)編號(hào)的,如1, 2,... ,n,其中,n為子任務(wù)的數(shù)量。 在本發(fā)明的一種優(yōu)選實(shí)施例中,為得到某個(gè)復(fù)雜任務(wù)的執(zhí)行狀態(tài),所述處理步驟 303還可以包括 檢測(cè)子步驟、檢測(cè)是否需要執(zhí)行編號(hào)排在當(dāng)前子任務(wù)之后的子任務(wù),若是,則執(zhí)行 判斷子步驟332,否則,該復(fù)雜任務(wù)執(zhí)行完畢。
8
以上例中的復(fù)雜任務(wù)B為例,當(dāng)前子任務(wù)的編號(hào)為2,所述檢測(cè)子步驟則是用來檢
測(cè)是否需要執(zhí)行排在2之后的子任務(wù)3、4,若否,復(fù)雜任務(wù)B執(zhí)行完畢;所述執(zhí)行完畢可以
信息的形式展示給用戶,使用戶在第一時(shí)間獲得某個(gè)復(fù)雜任務(wù)的執(zhí)行狀態(tài)。 再者,對(duì)于復(fù)雜任務(wù)B,不同需求下可能出現(xiàn)不同的執(zhí)行情形,例如,1234, 123,
124, 134,但是,這些情形中具有共同的子任務(wù)l,或者,1234和123具有共同的子任務(wù)123。 針對(duì)上述情形,在本發(fā)明的一種優(yōu)選實(shí)施例中,所述處理步驟303還可以包括 寫入子步驟、將獲取的下一個(gè)子任務(wù)的入口地址寫入地址寄存器。 可以理解,在準(zhǔn)備步驟302后,也可以將第一個(gè)子任務(wù)的入口地址寫入地址寄存
器,這樣,一個(gè)復(fù)雜任務(wù)中的部分或全部子任務(wù)的入口地址會(huì)被保存到地址寄存器;當(dāng)然,
還可以同時(shí)寫入每個(gè)子任務(wù)的標(biāo)識(shí),如編號(hào)等;那么,在另一種需求下執(zhí)行該復(fù)雜任務(wù)時(shí),
只需根據(jù)標(biāo)識(shí)調(diào)用子任務(wù)的入口地址即可,因而可以避免地址解碼的工作量。 參照?qǐng)D6,示出了本發(fā)明一種匯編執(zhí)行復(fù)雜任務(wù)的方法實(shí)施例2的流程圖,所述復(fù)
雜任務(wù)可以包括多個(gè)子任務(wù),所述子任務(wù)可以包括入口 、函數(shù)和出口 ,所述函數(shù)可以進(jìn)一步
包括任務(wù)代碼和多個(gè)接口轉(zhuǎn)換代碼;其中,每個(gè)接口轉(zhuǎn)換代碼針對(duì)當(dāng)前子任務(wù)與相應(yīng)的下
一個(gè)子任務(wù),并且,在當(dāng)前任務(wù)的出口信息與下一個(gè)子任務(wù)的入口信息一致時(shí),所述接口轉(zhuǎn)
換代碼為空;在當(dāng)前任務(wù)的出口信息與下一個(gè)子任務(wù)的入口信息不一致時(shí),所述接口轉(zhuǎn)換
代碼不為空,且用于將當(dāng)前子任務(wù)的出口信息轉(zhuǎn)換為下一個(gè)子任務(wù)的入口信息; 所述方法具體可以包括 確定步驟601、根據(jù)當(dāng)前任務(wù)信息,確定所述復(fù)雜任務(wù)中需要執(zhí)行的第一個(gè)子任 務(wù); 準(zhǔn)備步驟602、獲取第一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息; 處理步驟603、從第一個(gè)子任務(wù)起,將需要執(zhí)行的每個(gè)子任務(wù)作為當(dāng)前子任務(wù)進(jìn)行
處理,所述處理步驟603具體可以包括 執(zhí)行子步驟631、進(jìn)入當(dāng)前子任務(wù),并執(zhí)行當(dāng)前子任務(wù)的任務(wù)代碼;
判斷子步驟632、執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行的下一個(gè)子任務(wù);
獲取子步驟633、獲取下一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;
轉(zhuǎn)入子步驟634、 轉(zhuǎn)換執(zhí)行操作6341、在所述任務(wù)代碼執(zhí)行完畢時(shí),執(zhí)行與下一個(gè)子任務(wù)相應(yīng)的接 口轉(zhuǎn)換代碼; 通信操作6342、在所述接口轉(zhuǎn)換代碼執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
在大多數(shù)時(shí)候,當(dāng)前子任務(wù)的出口信息和下一個(gè)子任務(wù)的入口信息是相同的,此 時(shí),可以直接從當(dāng)前子任務(wù)的出口轉(zhuǎn)到下一個(gè)子任務(wù)的入口 ;但是,在某些情況下,當(dāng)前子 任務(wù)的出口信息和下一個(gè)子任務(wù)的入口信息是不同的,例如,子任務(wù)1的出口參數(shù)的數(shù)量 為1,而子任務(wù)2的入口參數(shù)的數(shù)量則為2. 針對(duì)上述情形,本實(shí)施例與實(shí)施例1的區(qū)別在于,在子任務(wù)的函數(shù)中設(shè)計(jì)多個(gè)接 口轉(zhuǎn)換,可用于在當(dāng)前任務(wù)的出口信息與下一個(gè)子任務(wù)的入口信息不一致時(shí),將當(dāng)前子任 務(wù)的出口信息轉(zhuǎn)換為下一個(gè)子任務(wù)的入口信息,因而,本發(fā)明只需額外的小代碼段,就可以 使得復(fù)雜任務(wù)序列順暢執(zhí)行。 對(duì)于包括1、2、3、4四個(gè)子任務(wù)的復(fù)雜任務(wù)B,不一定所有的子任務(wù)都要執(zhí)行,也即,除了 1234夕卜,還可能包括134、 13、 14等情形,因此,針對(duì)子任務(wù)1 ,不但要設(shè)計(jì)其到子任 務(wù)2的接口轉(zhuǎn)換代碼,還應(yīng)設(shè)計(jì)其到子任務(wù)3和子任務(wù)4的轉(zhuǎn)換代碼。
參照?qǐng)D7所示的復(fù)雜任務(wù)執(zhí)行路線示意圖,子任務(wù)3的出口信息與子任務(wù)4的出 口信息不一致,故可以在該兩個(gè)子任務(wù)之間增加接口轉(zhuǎn)換代碼3/4。 參照?qǐng)D8,示出了本發(fā)明一種匯編執(zhí)行復(fù)雜任務(wù)的方法實(shí)施例3的流程圖,所述復(fù) 雜任務(wù)可以包括多個(gè)子任務(wù),所述子任務(wù)可以包括入口和出口,所述方法具體可以包括
確定步驟801、根據(jù)當(dāng)前任務(wù)信息,確定所述復(fù)雜任務(wù)中需要執(zhí)行的第一個(gè)子任 務(wù); 準(zhǔn)備步驟802、獲取第一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;
調(diào)用步驟803、調(diào)用第一個(gè)子任務(wù); 處理步驟804、從第一個(gè)子任務(wù)起,將需要執(zhí)行的每個(gè)子任務(wù)作為當(dāng)前子任務(wù)進(jìn)行
處理,所述處理步驟804具體可以包括 執(zhí)行子步驟841、進(jìn)入并執(zhí)行當(dāng)前子任務(wù); 判斷子步驟842、執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行的下一個(gè)子任務(wù); 獲取子步驟843、獲取下一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息; 保存子步驟844、將下一個(gè)子任務(wù)的入口地址,保存于返回寄存器; 轉(zhuǎn)入子步驟845、在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),從所述返回寄存器中讀取地址,并跳
轉(zhuǎn)過去。 對(duì)應(yīng)匯編環(huán)境下的某個(gè)函數(shù),子任務(wù)能夠被其它函數(shù)調(diào)用,并能夠在實(shí)現(xiàn)自身功 能后返回到調(diào)用它的函數(shù)中去。 依據(jù)上述原理,本實(shí)施例與實(shí)施例1的區(qū)別在于,引入"返回寄存器"的概念,并且 允許處理器通過更新"返回寄存器"的值,這樣,采用調(diào)用、返回操作也可以完成本發(fā)明的方案。 例如,在執(zhí)行任務(wù)A期間調(diào)用任務(wù)B, A運(yùn)行到"CALL B"指令時(shí),可以將〃 CALL
B〃的下一條指令的地址保存在所述"返回寄存器"中,然后跳轉(zhuǎn)到B執(zhí)行,而在B運(yùn)行結(jié)束
時(shí),可以使用"return"指令,從"返回寄存器"中讀取到地址,然后跳轉(zhuǎn)過去。 具體到任務(wù)的工作流程"任務(wù)A->復(fù)雜任務(wù)B(需要執(zhí)行12) _>任務(wù)C",本實(shí)施
例可以通過以下步驟來實(shí)現(xiàn) 步驟Tl、任務(wù)A調(diào)用子任務(wù)1 ; 步驟T2、子任務(wù)1運(yùn)行,并將獲取得到的子任務(wù)2的地址保存于"返回寄存器"中;
步驟T3、子任務(wù)1返回,程序進(jìn)入子任務(wù)2 ; 步驟T4、子任務(wù)2運(yùn)行,并將獲取得到的任務(wù)C的地址保存于"返回寄存器"中;
步驟T5、子任務(wù)2返回,程序進(jìn)入任務(wù)C。 因此,相對(duì)于現(xiàn)有技術(shù)中,任務(wù)A調(diào)用子任務(wù)1 —子任務(wù)1返回一任務(wù)A調(diào)用子任 務(wù)2 —子任務(wù)2返回,本實(shí)施例只需調(diào)用需要執(zhí)行的第一個(gè)子任務(wù),然后通過修改"返回寄 存器"的值來建立子任務(wù)之間的路線,即可實(shí)現(xiàn)任務(wù)的不間斷執(zhí)行,且在需要執(zhí)行的子任務(wù) 數(shù)目多時(shí),更能夠減少調(diào)用次數(shù),從而能夠減少CPU周期的耗費(fèi)量。 參考圖9,示出了本發(fā)明一種匯編執(zhí)行復(fù)雜任務(wù)的裝置實(shí)施例的結(jié)構(gòu)圖,其中,所 述復(fù)雜任務(wù)可以包括多個(gè)子任務(wù),所述子任務(wù)可以包括入口和出口,所述裝置具體可以包
10括 確定模塊901,用于根據(jù)當(dāng)前任務(wù)信息,確定所述復(fù)雜任務(wù)中需要執(zhí)行的第一個(gè)子 任務(wù); 準(zhǔn)備模塊902,用于獲取第一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息; 處理模塊903,用于從第一個(gè)子任務(wù)起,將需要執(zhí)行的每個(gè)子任務(wù)作為當(dāng)前子任務(wù)
進(jìn)行處理,所述處理模塊包括 執(zhí)行子模塊931,用于進(jìn)入當(dāng)前子任務(wù)并執(zhí)行; 判斷子模塊932,用于在執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行的下一個(gè)子任 務(wù); 獲取子模塊933,用于獲取下一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息; 轉(zhuǎn)入子模塊934,用于在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。 在具體實(shí)現(xiàn)中,可以引入"返回寄存器"的概念,并且允許處理器通過更新"返回寄
存器"的值,這樣,采用一次調(diào)用、多次返回操作也可以完成本發(fā)明的方案。 此種情形下,所述裝置還可以包括 調(diào)用模塊,用于調(diào)用第一個(gè)子任務(wù); 所述處理模塊903還可以包括 保存子模塊,用于將下一個(gè)子任務(wù)的入口地址,保存于返回寄存器; 此時(shí),所述轉(zhuǎn)入子模塊934,則可用于在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),從所述返回寄存
器中讀取地址,并跳轉(zhuǎn)過去。 為保證路線的暢通,在本發(fā)明的一種優(yōu)選實(shí)施例中,所述子任務(wù)還可以包括函數(shù), 所述函數(shù)可以進(jìn)一步包括任務(wù)代碼和多個(gè)接口轉(zhuǎn)換代碼; 其中,每個(gè)接口轉(zhuǎn)換代碼針對(duì)當(dāng)前子任務(wù)與相應(yīng)的下一個(gè)子任務(wù),并且,在當(dāng)前任
務(wù)的出口信息與下一個(gè)子任務(wù)的入口信息一致時(shí),所述接口轉(zhuǎn)換代碼為空;在當(dāng)前任務(wù)的
出口信息與下一個(gè)子任務(wù)的入口信息不一致時(shí),所述接口轉(zhuǎn)換代碼不為空,且用于將當(dāng)前
子任務(wù)的出口信息轉(zhuǎn)換為下一個(gè)子任務(wù)的入口信息; 此時(shí),所述執(zhí)行子模塊,可用于執(zhí)行當(dāng)前子任務(wù)的任務(wù)代碼; 所述轉(zhuǎn)入子模塊934可以進(jìn)一步包括 轉(zhuǎn)換執(zhí)行單元,用于在所述任務(wù)代碼執(zhí)行完畢時(shí),執(zhí)行與下一個(gè)子任務(wù)相應(yīng)的接 口轉(zhuǎn)換代碼; 通信單元,用于在所述接口轉(zhuǎn)換代碼執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
對(duì)于包括4個(gè)子任務(wù)的復(fù)雜任務(wù),不同需求下可能出現(xiàn)不同的執(zhí)行情形,例如, 1234, 123, 124, 134,但是,這些情形中具有共同的子任務(wù)l,或者,1234和123具有共同的子 任務(wù)123。 針對(duì)上述情形,在本發(fā)明的另一種優(yōu)選實(shí)施例中,所述處理模塊903還可以包括 寫入子模塊,用于將獲取的下一個(gè)子任務(wù)的入口地址寫入地址寄存器。
可以理解,還可以同時(shí)寫入每個(gè)子任務(wù)的標(biāo)識(shí),如編號(hào)等;那么,在另一種需求下
執(zhí)行該復(fù)雜任務(wù)時(shí),只需根據(jù)標(biāo)識(shí)調(diào)用子任務(wù)的入口地址即可,因而可以避免地址解碼的
工作量。 對(duì)于裝置實(shí)施例而言,由于其與圖3所示的方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。 以上對(duì)本發(fā)明所提供的一種匯編執(zhí)行復(fù)雜任務(wù)的方法和裝置,進(jìn)行了詳細(xì)介紹, 本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用 于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的 思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為 對(duì)本發(fā)明的限制。
權(quán)利要求
一種匯編執(zhí)行復(fù)雜任務(wù)的方法,其特征在于,所述復(fù)雜任務(wù)包括多個(gè)子任務(wù),所述子任務(wù)包括入口和出口,所述方法包括確定步驟根據(jù)當(dāng)前任務(wù)信息,確定所述復(fù)雜任務(wù)中需要執(zhí)行的第一個(gè)子任務(wù);準(zhǔn)備步驟獲取第一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;處理步驟從第一個(gè)子任務(wù)起,將需要執(zhí)行的每個(gè)子任務(wù)作為當(dāng)前子任務(wù)進(jìn)行處理,所述處理步驟包括執(zhí)行子步驟進(jìn)入當(dāng)前子任務(wù)并執(zhí)行;判斷子步驟執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行的下一個(gè)子任務(wù);獲取子步驟獲取下一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;轉(zhuǎn)入子步驟在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
2. 如權(quán)利要求1所述的方法,其特征在于,所述方法還包括 調(diào)用步驟調(diào)用第一個(gè)子任務(wù); 所述處理步驟還包括保存子步驟將下一個(gè)子任務(wù)的入口地址,保存于返回寄存器;所述轉(zhuǎn)入子步驟為,在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),從所述返回寄存器中讀取地址,并跳轉(zhuǎn) 過去。
3. 如權(quán)利要求1所述的方法,其特征在于,所述子任務(wù)還包括函數(shù),所述函數(shù)包括任務(wù) 代碼和多個(gè)接口轉(zhuǎn)換代碼;其中,每個(gè)接口轉(zhuǎn)換代碼針對(duì)當(dāng)前子任務(wù)與相應(yīng)的下一個(gè)子任務(wù),并且,在當(dāng)前任務(wù)的 出口信息與下一個(gè)子任務(wù)的入口信息一致時(shí),所述接口轉(zhuǎn)換代碼為空;在當(dāng)前任務(wù)的出口 信息與下一個(gè)子任務(wù)的入口信息不一致時(shí),所述接口轉(zhuǎn)換代碼不為空,且用于將當(dāng)前子任 務(wù)的出口信息轉(zhuǎn)換為下一個(gè)子任務(wù)的入口信息;所述執(zhí)行子步驟為,進(jìn)入當(dāng)前子任務(wù),并執(zhí)行當(dāng)前子任務(wù)的任務(wù)代碼;所述轉(zhuǎn)入子步驟包括在所述任務(wù)代碼執(zhí)行完畢時(shí),執(zhí)行與下一個(gè)子任務(wù)相應(yīng)的接口轉(zhuǎn)換代碼; 在所述接口轉(zhuǎn)換代碼執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
4. 如權(quán)利要求1所述的方法,其特征在于,所述執(zhí)行信息包括子任務(wù)的入口信息,以 及,需要執(zhí)行的數(shù)據(jù)信息。
5. 如權(quán)利要求1所述的方法,其特征在于,所述處理步驟還包括 寫入子步驟將獲取的下一個(gè)子任務(wù)的入口地址寫入地址寄存器。
6. 如權(quán)利要求1所述的方法,其特征在于,所述多個(gè)子任務(wù)具有對(duì)應(yīng)的任務(wù)編號(hào); 所述處理步驟還包括檢測(cè)子步驟檢測(cè)是否需要執(zhí)行編號(hào)排在當(dāng)前子任務(wù)之后的子任務(wù),若是,則執(zhí)行判斷 子步驟,否則,該復(fù)雜任務(wù)執(zhí)行完畢。
7. —種匯編執(zhí)行復(fù)雜任務(wù)的裝置,其特征在于,所述復(fù)雜任務(wù)包括多個(gè)子任務(wù),所述子 任務(wù)包括入口和出口 ,所述裝置包括確定模塊,用于根據(jù)當(dāng)前任務(wù)信息,確定所述復(fù)雜任務(wù)中需要執(zhí)行的第一個(gè)子任務(wù); 準(zhǔn)備模塊,用于獲取第一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;處理模塊,用于從第一個(gè)子任務(wù)起,將需要執(zhí)行的每個(gè)子任務(wù)作為當(dāng)前子任務(wù)進(jìn)行處理,所述處理模塊包括執(zhí)行子模塊,用于進(jìn)入當(dāng)前子任務(wù)并執(zhí)行;判斷子模塊,用于在執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行的下一個(gè)子任務(wù); 獲取子模塊,用于獲取下一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息; 轉(zhuǎn)入子模塊,用于在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
8. 如權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括 調(diào)用模塊,用于調(diào)用第一個(gè)子任務(wù); 所述處理模塊還包括保存子模塊,用于將下一個(gè)子任務(wù)的入口地址,保存于返回寄存器; 所述轉(zhuǎn)入子模塊,用于在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),從所述返回寄存器中讀取地址,并跳 轉(zhuǎn)過去。
9. 如權(quán)利要求7所述的裝置,其特征在于,所述子任務(wù)還包括函數(shù),所述函數(shù)包括任務(wù) 代碼和多個(gè)接口轉(zhuǎn)換代碼;其中,每個(gè)接口轉(zhuǎn)換代碼針對(duì)當(dāng)前子任務(wù)與相應(yīng)的下一個(gè)子任務(wù),并且,在當(dāng)前任務(wù)的 出口信息與下一個(gè)子任務(wù)的入口信息一致時(shí),所述接口轉(zhuǎn)換代碼為空;在當(dāng)前任務(wù)的出口 信息與下一個(gè)子任務(wù)的入口信息不一致時(shí),所述接口轉(zhuǎn)換代碼不為空,且用于將當(dāng)前子任 務(wù)的出口信息轉(zhuǎn)換為下一個(gè)子任務(wù)的入口信息;所述執(zhí)行子模塊,用于執(zhí)行當(dāng)前子任務(wù)的任務(wù)代碼;所述轉(zhuǎn)入子模塊包括轉(zhuǎn)換執(zhí)行單元,用于在所述任務(wù)代碼執(zhí)行完畢時(shí),執(zhí)行與下一個(gè)子任務(wù)相應(yīng)的接口轉(zhuǎn) 換代碼;通信單元,用于在所述接口轉(zhuǎn)換代碼執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。
10. 如權(quán)利要求7所述的裝置,其特征在于,所述處理模塊還包括 寫入子模塊,用于將獲取的下一個(gè)子任務(wù)的入口地址寫入地址寄存器。
全文摘要
本發(fā)明提供了一種匯編執(zhí)行復(fù)雜任務(wù)的方法和裝置,所述復(fù)雜任務(wù)包括多個(gè)子任務(wù),所述子任務(wù)包括入口和出口,其中的方法包括確定步驟根據(jù)當(dāng)前任務(wù)信息,確定需要執(zhí)行的第一個(gè)子任務(wù);準(zhǔn)備步驟獲取第一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;處理步驟從第一個(gè)子任務(wù)起,將需要執(zhí)行的每個(gè)子任務(wù)作為當(dāng)前子任務(wù)進(jìn)行處理,所述處理步驟包括執(zhí)行子步驟進(jìn)入當(dāng)前子任務(wù)并執(zhí)行;判斷子步驟執(zhí)行期間,通過當(dāng)前任務(wù)信息判斷需要執(zhí)行的下一個(gè)子任務(wù);獲取子步驟獲取下一個(gè)子任務(wù)的入口地址,并準(zhǔn)備其執(zhí)行信息;轉(zhuǎn)入子步驟在當(dāng)前子任務(wù)執(zhí)行完畢時(shí),轉(zhuǎn)到下一個(gè)子任務(wù)的入口地址。本發(fā)明用以在使用小代碼量的前提下,減少CPU周期的耗費(fèi)。
文檔編號(hào)G06F9/38GK101794215SQ201010120380
公開日2010年8月4日 申請(qǐng)日期2010年3月5日 優(yōu)先權(quán)日2010年3月5日
發(fā)明者白鋒, 許健 申請(qǐng)人:北京紅旗勝利科技發(fā)展有限責(zé)任公司