欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種risc處理器應(yīng)用程序編譯中立即數(shù)的錨地址裝載方法

文檔序號:6425126閱讀:183來源:國知局
專利名稱:一種risc處理器應(yīng)用程序編譯中立即數(shù)的錨地址裝載方法
技術(shù)領(lǐng)域
本發(fā)明涉及RISC處理器應(yīng)用程序的編譯和鏈接技術(shù)領(lǐng)域,尤其是一種應(yīng)用程序編譯中立即數(shù)的錨地址裝載方法。
背景技術(shù)
在基于RISC處理器的嵌入式系統(tǒng)開發(fā)中,處理器編譯和鏈接是必不可少的工具, 編譯模塊將用戶高級語言(一般為C/C++語言)編寫而成的代碼轉(zhuǎn)換為處理器可識別的二進制代碼,鏈接模塊則將多個這樣的二進制代碼模塊一起鏈接成為可以在處理器上運行的二進制可以執(zhí)行程序。由于32位RISC架構(gòu)處理器無法直接在指令中編碼32位地址立即數(shù),所以當前業(yè)內(nèi)RISC架構(gòu)處理器都是通過訪問內(nèi)存指令如LOAD指令來完成裝載地址立即數(shù),存在效率低和代碼密度低的問題。目前RISC處理器應(yīng)用程序的編譯鏈接中,地址立即數(shù)裝載主要采用處理器的訪問內(nèi)存指令,如LOAD指令完成。嵌入式RISC處理器的訪問內(nèi)存指令一般需要占用外部數(shù)據(jù)地址總線,需要多個周期完成,從而導致該指令比一般的運算類,如加法指令運行效率更低。所以通過訪問內(nèi)存指令來裝載地址立即數(shù)雖然實現(xiàn)簡單,但是效率低,除了訪問內(nèi)存指令外,還需要額外的空間來存放32位的地址立即數(shù)。

發(fā)明內(nèi)容
為了克服已有RISC處理器應(yīng)用程序編譯中立即數(shù)裝載方法的工作效率低、占用額外的存儲空間、實時性差的不足,本發(fā)明提供一種提升工作效率、不需要消耗額外內(nèi)存空間、實時性良好的RISC處理器應(yīng)用程序編譯中立即數(shù)的錨地址裝載方法。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是一種RISC處理器應(yīng)用程序編譯中立即數(shù)的錨地址裝載方法,所述應(yīng)用程序包括代碼段和數(shù)據(jù)段;為應(yīng)用程序的代碼段分配一個通用寄存器存放代碼段錨地址Rx,并將其初始化為代碼段的基地址,當應(yīng)用程序需要裝載一個代碼段符號地址立即數(shù)IAx時,采用公式 (Rx)+ {IAx-(Rx)}對應(yīng)的處理器加法指令實現(xiàn)錨地址裝載;同時,為應(yīng)用程序的數(shù)據(jù)段分配一個通用寄存器作為數(shù)據(jù)段錨地址Ry,并將其初始化為數(shù)據(jù)段基地址,當應(yīng)用程序需要裝載一個數(shù)據(jù)段符號地址立即數(shù)IAy時,采用公式 (Ry) + {IAy- (Ry)}對應(yīng)的處理器加法指令實現(xiàn)錨地址裝載。進一步,所述錨地址裝載方法包括以下步驟(1)為應(yīng)用程序分配兩個寄存器Rx,Ry,分別用于存放代碼段錨地址和數(shù)據(jù)段錨地址;(2)定義代碼段地址立即數(shù)錨地址裝載的重定位信息數(shù)組ARx,并做初始化;如果應(yīng)用程序的代碼段的地址Lx處需要裝載屬于代碼段的地址立即數(shù)IAx到寄存器Rm,則生成一個代碼段重定位信息RELx存放在數(shù)組ARx中,該信息包含需要重定位的代碼段地址Lx, 代碼段符號地址立即數(shù)IAx和寄存器Rm ;(3)定義代碼段地址立即數(shù)錨地址裝載的重定位信息數(shù)組ARy,并做初始化;如果處理器應(yīng)用程序的代碼段的地址Ly處需要裝載屬于數(shù)據(jù)段的地址立即數(shù)IAy到寄存器1 , 則生成一個數(shù)據(jù)段重定位信息RELy存放在數(shù)組ARy中,該信息包含需要重定位的代碼段地址Ly,數(shù)據(jù)段符號地址立即數(shù)IAy和寄存器to ;(4)對各輸入文件的代碼段和數(shù)據(jù)段進行鏈接,將鏈接結(jié)果重新輸出到目標應(yīng)用程序的代碼段和數(shù)據(jù)段,并暫存輸出目標應(yīng)用程序的代碼段錨地址為At和數(shù)據(jù)段錨地址為Ad;(5)對各輸入的代碼段和數(shù)據(jù)段進行鏈接時,掃描步驟( 輸出的重定位信息數(shù)組ARx,對數(shù)組中每個代碼段重定位信息RELx做如下操作(5. 1)根據(jù)步驟(2)中生成的RELx所包含的IAx和步驟(4)中暫存的At,計算 IAx-At,暫存為代碼段立即數(shù)偏移量OFFSETx ;(5. 2)在RELx包含的Lx處,生成Rm < -(Rx) +OFFSETx對應(yīng)的處理器加法指令;(6)對各輸入的代碼段和數(shù)據(jù)段進行鏈接時,掃描步驟C3)輸出的重定位信息數(shù)組ARy,對數(shù)組中每個數(shù)據(jù)段重定位信息RELy做如下操作(6. 1)根據(jù)步驟(3)中生成的RELy所包含的IAy和步驟(4)中暫存的Ad,計算 IAy-Ad,暫存為數(shù)據(jù)段立即數(shù)偏移量OFFSETy ;(6. 2)在RELy包含數(shù)的Ly處,生成1 < - (Ry) +OFFSETy對應(yīng)的處理器加法指令;(7)將步驟⑴的Rx初始化為步驟⑷暫存的代碼段錨地址At,步驟⑴的Ry 初始化為步驟(4)暫存的數(shù)據(jù)段錨地址Ad。 本發(fā)明的有益效果主要表現(xiàn)在1)對地址立即數(shù)的裝載不涉及訪問內(nèi)存,應(yīng)用程序的運行效率高;2)不需要消耗額外的內(nèi)存空間,提高了應(yīng)用程序的代碼密度;3)可以有效降低CPU對外部總線的占用率,提高系統(tǒng)實時性;4)該方法可以在多種RISC處理器的編譯鏈接模塊中實現(xiàn),有很強的移植性;5)該方法對RISC處理器的編譯鏈接模塊的改動很小,改動代價低。


圖1是支持地址立即數(shù)錨地址裝載的應(yīng)用程序編譯鏈接示意圖;圖2是編譯模塊中地址立即數(shù)的錨地址裝載執(zhí)行遍流程圖;圖3是鏈接模塊對地址立即數(shù)的錨地址裝載流程圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明作進一步描述。參照圖1 圖3,一種RISC處理器應(yīng)用程序編譯中立即數(shù)的錨地址裝載方法,所述應(yīng)用程序包括代碼段和數(shù)據(jù)段;為應(yīng)用程序的代碼段分配一個通用寄存器存放代碼段錨地址Rx,并將其初始化為代碼段的基地址,當應(yīng)用程序需要裝載一個代碼段符號地址立即數(shù)IAx時,采用公式(Rx)+ {IAx-(Rx)}對應(yīng)的處理器加法指令實現(xiàn)錨地址裝載;同時,為應(yīng)用程序的數(shù)據(jù)段分配一個通用寄存器作為數(shù)據(jù)段錨地址Ry,并將其初始化為數(shù)據(jù)段基地址,當應(yīng)用程序需要裝載一個數(shù)據(jù)段符號地址立即數(shù)IAy時,采用公式 (Ry) + {IAy- (Ry)}對應(yīng)的處理器加法指令實現(xiàn)錨地址裝載。參照圖1,具體實施包括如下步驟(1)編譯模塊中,為處理器應(yīng)用程序分配兩個寄存器Rx,Ry,分別用于存放代碼段錨地址和數(shù)據(jù)段錨地址,并參照圖2的200以插件的方式增加立即數(shù)錨地址裝載執(zhí)行遍;(2)參照圖2的201,定義代碼段地址立即數(shù)錨地址裝載的重定位信息數(shù)組ARx,并做初始化,數(shù)組中每個成員變量包含需要重定位的代碼段地址Lx,被裝載的立即數(shù)和裝載的目標寄存器;(3)參照圖2的202,定義代碼段地址立即數(shù)錨地址裝載的重定位信息數(shù)組ARy,并做初始化,數(shù)組中每個成員變量包含需要重定位的代碼段地址,被裝載的立即數(shù)和裝載的目標寄存器;(4)參照圖2的203 206,如果處理器應(yīng)用程序的代碼段中需要裝載屬于代碼段的地址立即數(shù)A_Fimc到寄存器Rm,則生成一個重定位信息RELx存放在步驟( 所初始化的數(shù)組ARx中,該信息包含需要重定位的代碼段地址Lx,代碼段的地址立即數(shù)A_Fimc和寄存器Rm;(5)參照圖2的207 210,如果處理器應(yīng)用程序的代碼段中需要裝載屬于數(shù)據(jù)段的地址立即數(shù)々_0站3到1 ,則生成一個重定位信息RELy存放在步驟C3)所初始化的數(shù)組ARy中,該信息包含需要重定位的代碼段地址Ly,數(shù)據(jù)段的地址立即數(shù)A_Data和寄存器 Rn ;(6)在鏈接模塊中,對各輸入文件的代碼段和數(shù)據(jù)段進行鏈接,將鏈接結(jié)果重新輸出到目標應(yīng)用程序的代碼段和數(shù)據(jù)段,并暫存輸出目標應(yīng)用程序的代碼段錨地址為At和數(shù)據(jù)段錨地址為Ad,同時參照圖3的300,以插件方式增加立即數(shù)錨地址重定位過程;(7)參照圖3的300,對各輸入的代碼段和數(shù)據(jù)段進行鏈接時,掃描步驟(4)輸出的重定位信息數(shù)組ARx,對數(shù)組中每個重定位信息RELx做如下操作(7. 1)根據(jù)(4)中生成的RELx所包含的A_Func和步驟(6)中暫存的At,參照圖3 的301,計算A_Func-At,暫存為代碼段立即數(shù)偏移量0FFSET_A_Func,即0FFSET_A_Func = A_Func-At ;(7. 2)參照圖 3 的 302 和 303,在 RELx 包含的 Lx 處,生成 Rm < - (Rx) +0FFSET_A_ Func對應(yīng)的處理器加法指令;(8)參照圖3的300,對各輸入的代碼段和數(shù)據(jù)段進行鏈接時,掃描步驟( 輸出的重定位信息數(shù)組ARy,對數(shù)組中每個重定位信息RELy做如下操作(8. 1)根據(jù)(5)中生成的RELy所包含的A_Data和步驟(6)中暫存的Ad,參照圖 3的304,計算A_Data-Ad,暫存為數(shù)據(jù)段立即數(shù)偏移量0FFSET_A_Data,BP 0FFSET_A_Data = A_Data_Ad ;(8. 2)參照圖 3 的 305 和 306,在 RELy 包含數(shù)的 Ly 處,生成 Rn < - (Ry) +0FFSET_ A_Data對應(yīng)的處理器加法指令;(9)在應(yīng)用程序啟動時,將步驟(1)的Rx初始化為步驟(6)暫存的代碼段錨地址At,步驟(1)的Ry初始化為步驟(6)暫存的數(shù)據(jù)段錨地址Ad。實例在RISC處理器編譯模塊和鏈接模塊中使用本方法實現(xiàn)將myFimction裝載到myCallhck函數(shù)指針變量,將myData的地址裝載到myDataPTR整數(shù)指針變量。實現(xiàn)本實施例具體所包含的步驟如下(1)在編譯模塊中,為處理器應(yīng)用程序分配兩個寄存器R30,R31,分別用于存放代碼段錨地址和數(shù)據(jù)段錨地址,并參照圖2的200以插件的方式增加立即數(shù)錨地址裝載執(zhí)行遍;(2)參照圖2的201,定義代碼段地址立即數(shù)錨地址裝載的重定位信息數(shù)組ARRAY_ Relocatior^Text,并做初始化,數(shù)組中每個成員變量包含需要重定位的代碼段地址,被裝載的立即數(shù)和裝載的目標寄存器;(3)參照圖2的202,定義代碼段地址立即數(shù)錨地址裝載的重定位信息數(shù)組ARRAY_ Relocatior^Data,并做初始化,數(shù)組中每個成員變量包含需要重定位的代碼段地址,被裝載的立即數(shù)和裝載的目標寄存器;(4)參照圖2的203 206,為myCallhck函數(shù)指針變量分配寄存器Rl,并且發(fā)現(xiàn)處理器應(yīng)用程序的代碼段中需要裝載屬于代碼段的地址立即數(shù)myFimction到myCallhck 函數(shù)指針變量即寄存器R1,則生成一個重定位信息RELjiiyFimction存放在數(shù)組ARRAY_ Relocation_Text中,該信息包含需要重定位的代碼段地址Location_myCallback, myFunction函數(shù)地址和Rl ;(5)參照圖2的207 210,如果處理器應(yīng)用程序的代碼段中需要裝載屬于數(shù)據(jù)段的myData變量的地址立即數(shù)到R2,則生成一個重定位信息RELjnyData存放在數(shù)組ARRAY_ Relocation_Data中,該信息包含需要重定位的代碼段地址Location_myDataPTR,myData 變量地址和R2 ;(6)在鏈接模塊中,對各輸入文件的代碼段和數(shù)據(jù)段進行鏈接,將鏈接結(jié)果重新輸出到目標應(yīng)用程序的代碼段和數(shù)據(jù)段,并暫存輸出目標應(yīng)用程序的代碼段錨地址為 Address_Text_Mart和數(shù)據(jù)段錨地址為Address_Data_Mart,同時參照圖3的300,以插件方式增加立即數(shù)錨地址重定位過程;(7)參照圖3的300,對各輸入的代碼段和數(shù)據(jù)段進行鏈接時,掃描步驟(4)輸出的重定位信息數(shù)組ARRAY_Relocation_Text,對數(shù)組中每個重定位信息REL_myFunction做如下操作(7. 1)根據(jù)步驟J4)中生成的REL_myFunction所包含的myFunction和步驟(6) 中暫存的 Address_Text_Start,計算(myFunction_Address_Text_Start),暫存為 0FFSET_ myFunction ;(7. 2)在 REL_myFunction 包含的 Location_myCalIback 處,生成 Rl < -(R30) +0FFSET_myFunction處理器對應(yīng)的加法指令;(8)參照圖3的300,對各輸入的代碼段和數(shù)據(jù)段進行鏈接時,掃描步驟( 輸出的重定位信息數(shù)組ARRAY_Relocation_Data,對數(shù)組中每個重定位信息RELjnyData做如下操作(8. 1)根據(jù)步驟(5)中生成的RELjnyData所包含的myData和步驟(6)中暫存的 Address_Data_Start,計算(myData_Address_Data_Start),暫存為 0FFSET_myData ;
(8. 2)在 REL_myData 包含數(shù)的 Location_myDataPTR 處,生成 R2 < -(R31)+OFFSETjnyData對應(yīng)的處理器加法指令;(9)在應(yīng)用程序啟動時,將步驟⑴的R30初始化為步驟(6)暫存的代碼段錨地址Address_Text_Mart,步驟(1)的R30初始化為步驟(6)暫存的數(shù)據(jù)段錨地址Address_ Data Start。
權(quán)利要求
1.一種RISC處理器應(yīng)用程序編譯中立即數(shù)的錨地址裝載方法,其特征在于所述應(yīng)用程序包括代碼段和數(shù)據(jù)段;為應(yīng)用程序的代碼段分配一個通用寄存器存放代碼段錨地址Rx,并將其初始化為代碼段的基地址,當應(yīng)用程序需要裝載一個代碼段符號地址立即數(shù)IAx時,采用公式 (Rx)+ {IAx-(Rx)}對應(yīng)的處理器加法指令實現(xiàn)錨地址裝載;同時,為應(yīng)用程序的數(shù)據(jù)段分配一個通用寄存器作為數(shù)據(jù)段錨地址Ry,并將其初始化為數(shù)據(jù)段基地址,當應(yīng)用程序需要裝載一個數(shù)據(jù)段符號地址立即數(shù)IAy時,采用公式 (Ry) + {IAy- (Ry)}對應(yīng)的處理器加法指令實現(xiàn)錨地址裝載。
2.如權(quán)利要求1所述的RISC處理器應(yīng)用程序編譯中立即數(shù)的錨地址裝載方法,其特征在于所述錨地址裝載方法包括以下步驟(1)為應(yīng)用程序分配兩個寄存器Rx,Ry,分別用于存放代碼段錨地址和數(shù)據(jù)段錨地址;(2)定義代碼段地址立即數(shù)錨地址裝載的重定位信息數(shù)組ARx,并做初始化;如果應(yīng)用程序的代碼段的地址Lx處需要裝載屬于代碼段的地址立即數(shù)IAx到寄存器Rm,則生成一個代碼段重定位信息RELx存放在數(shù)組ARx中,該信息包含需要重定位的代碼段地址Lx,代碼段符號地址立即數(shù)IAx和寄存器Rm ;(3)定義代碼段地址立即數(shù)錨地址裝載的重定位信息數(shù)組ARy,并做初始化;如果處理器應(yīng)用程序的代碼段的地址Ly處需要裝載屬于數(shù)據(jù)段的地址立即數(shù)IAy到寄存器to,則生成一個數(shù)據(jù)段重定位信息RELy存放在數(shù)組ARy中,該信息包含需要重定位的代碼段地址 Ly,數(shù)據(jù)段符號地址立即數(shù)IAy和寄存器1 ;(4)對各輸入文件的代碼段和數(shù)據(jù)段進行鏈接,將鏈接結(jié)果重新輸出到目標應(yīng)用程序的代碼段和數(shù)據(jù)段,并暫存輸出目標應(yīng)用程序的代碼段錨地址為At和數(shù)據(jù)段錨地址為Ad ;(5)對各輸入的代碼段和數(shù)據(jù)段進行鏈接時,掃描步驟( 輸出的重定位信息數(shù)組 ARx,對數(shù)組中每個代碼段重定位信息RELx做如下操作(5. 1)根據(jù)步驟(2)中生成的RELx所包含的IAx和步驟(4)中暫存的At,計算IAx-At, 暫存為代碼段立即數(shù)偏移量OFFSETx ;(5. 2)在RELx包含的Lx處,生成Rm < - (Rx)+OFFSETx對應(yīng)的處理器加法指令;(6)對各輸入的代碼段和數(shù)據(jù)段進行鏈接時,掃描步驟C3)輸出的重定位信息數(shù)組 ARy,對數(shù)組中每個數(shù)據(jù)段重定位信息RELy做如下操作(6. 1)根據(jù)步驟(3)中生成的RELy所包含的IAy和步驟(4)中暫存的Ad,計算IAy-Ad, 暫存為數(shù)據(jù)段立即數(shù)偏移量OFFSETy ;(6. 2)在RELy包含數(shù)的Ly處,生成1 < - (Ry)+OFFSETy對應(yīng)的處理器加法指令;(7)將步驟⑴的Rx初始化為步驟⑷暫存的代碼段錨地址At,步驟⑴的Ry初始化為步驟(4)暫存的數(shù)據(jù)段錨地址Ad。
全文摘要
一種RISC處理器應(yīng)用程序編譯中立即數(shù)的錨地址裝載方法,為應(yīng)用程序的代碼段分配一個通用寄存器存放代碼段錨地址Rx,并將其初始化為代碼段的基地址,當應(yīng)用程序需要裝載一個代碼段符號地址立即數(shù)IAx時,采用公式(Rx)+{IAx-(Rx)}對應(yīng)的加法指令實現(xiàn)錨地址裝載;同時,為應(yīng)用程序的數(shù)據(jù)段分配一個通用寄存器作為數(shù)據(jù)段錨地址Ry,并將其初始化為數(shù)據(jù)段基地址,當應(yīng)用程序需要裝載一個數(shù)據(jù)段符號地址立即數(shù)IAy時,采用公式(Ry)+{IAy-(Ry)}對應(yīng)的加法指令實現(xiàn)錨地址裝載。本發(fā)明能提升應(yīng)用程序工作效率、不需要消耗額外的內(nèi)存空間、實時性良好。
文檔編號G06F9/45GK102207882SQ20111014112
公開日2011年10月5日 申請日期2011年5月27日 優(yōu)先權(quán)日2011年5月27日
發(fā)明者嚴曉浪, 李春強, 葛海通 申請人:杭州中天微系統(tǒng)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宣威市| 英吉沙县| 南和县| 呈贡县| 嘉禾县| 上高县| 永济市| 阜康市| 万荣县| 长乐市| 宁海县| 罗源县| 昭苏县| 景宁| 湖南省| 南岸区| 云梦县| 平南县| 白沙| 灌南县| 葵青区| 深水埗区| 博白县| 罗江县| 红原县| 玉门市| 肇州县| 手游| 墨江| 宁波市| 长沙县| 中超| 佛坪县| 睢宁县| 高尔夫| 富宁县| 新余市| 进贤县| 白银市| 莱芜市| 南丰县|