UEFI開(kāi)發(fā)基礎(chǔ)匯編代碼的使用
UEFI中使用匯編代碼
EDK代碼中包含一部分匯編代碼,目前支持的有.S、.asm和.nasm格式的匯編(第一個(gè)是AT&T匯編,后兩個(gè)是Intel匯編,只是使用的匯編樣式稍有不同,.nasm是開(kāi)源和免費(fèi)的,更加的通用),如果是在Windows下編譯,一般使用的是NASM編譯器,所以會(huì)使用.nasm格式的匯編文件,而編譯工具也是免費(fèi)的,可以在https://www.nasm.us/下載,并放到C:\Nasm目錄,之后就可以在EDK代碼中使用。
下面是一個(gè)示例,它是一個(gè)庫(kù)模塊:
首先創(chuàng)建inf文件:
[Defines] INF_VERSION = 0x00010005 BASE_NAME = AsmLib FILE_GUID = 2A3061AF-740E-4B62-B900-FC24AF9B072E MODULE_TYPE = BASE VERSION_STRING = 1.0 LIBRARY_CLASS = AsmLib # # The following information is for reference only and not required by the build tools. # # VALID_ARCHITECTURES = IA32 X64 IPF EBC # [Sources.X64] X64/AsmLib.nasm [Packages] MdePkg/MdePkg.dec BeniPkg/BeniPkg.dec
這里的代碼跟普通inf沒(méi)有區(qū)別,只是指定的源文件Sources稍有不同,通常會(huì)去指定時(shí)Ia32還是X64。
匯編代碼編寫(xiě):
SECTION .text ;------------------------------------------------------------------------------ ; VOID ; EFIAPI ; AsmNop ( ; VOID ; ); ;------------------------------------------------------------------------------ global ASM_PFX(AsmNop) ASM_PFX(AsmNop): nop ret
SECTION .text指定了代碼段,之后的就是匯編代碼了。
global ASM_PFX指定了全局的函數(shù),可以在外部調(diào)用,當(dāng)然同時(shí)也需要增加頭文件:
/** Code for nothing. @param NA @retval NA **/ VOID EFIAPI AsmNop ( VOID );
之后就可以使用該函數(shù)了,這跟普通的函數(shù)使用沒(méi)有區(qū)別。
下面是另一個(gè)例子,用于向Legacy串口輸出一個(gè)字符:
global ASM_PFX(AsmSerialIo) ASM_PFX(AsmSerialIo): mov dx, 03f3h mov eax, 0 loop: in al, dx bt eax, 5 jnc loop ; Wait until ready mov dx, 03f8h mov ax, cx ; cx is the input parameter out dx, ax ; Output the character ret
測(cè)試代碼可以在BeniPkg\DynamicCommand\TestDynamicCommand\Test.c中找到。
以上就是UEFI開(kāi)發(fā)基礎(chǔ)匯編代碼使用的詳細(xì)內(nèi)容,更多關(guān)于UEFI開(kāi)發(fā)匯編代碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
匯編中的數(shù)組分配和指針的實(shí)現(xiàn)代碼
這篇文章主要介紹了匯編中的數(shù)組分配和指針的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Windows10下利用DOSBOX和MASM32搭建匯編語(yǔ)言開(kāi)發(fā)環(huán)境
這篇文章主要介紹了Windows10下利用DOSBOX和MASM32搭建匯編語(yǔ)言開(kāi)發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
匯編實(shí)現(xiàn)簡(jiǎn)單選擇排序的方法示例
這篇文章主要介紹了匯編實(shí)現(xiàn)簡(jiǎn)單選擇排序的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
計(jì)算機(jī)系統(tǒng)匯編語(yǔ)言和機(jī)器語(yǔ)言深入理解
這篇文章主要為大家介紹了計(jì)算機(jī)系統(tǒng)匯編語(yǔ)言和機(jī)器語(yǔ)言深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

