您好,登錄后才能下訂單哦!
這篇文章主要講解了“UEFI開發基礎匯編代碼如何使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“UEFI開發基礎匯編代碼如何使用”吧!
EDK代碼中包含一部分匯編代碼,目前支持的有.S、.asm和.nasm格式的匯編(第一個是AT&T匯編,后兩個是Intel匯編,只是使用的匯編樣式稍有不同,.nasm是開源和免費的,更加的通用),如果是在Windows下編譯,一般使用的是NASM編譯器,所以會使用.nasm格式的匯編文件,而編譯工具也是免費的,可以下載,并放到C:\Nasm目錄,之后就可以在EDK代碼中使用。
下面是一個示例,它是一個庫模塊:
首先創建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沒有區別,只是指定的源文件Sources
稍有不同,通常會去指定時Ia32
還是X64
。
匯編代碼編寫:
SECTION .text ;------------------------------------------------------------------------------ ; VOID ; EFIAPI ; AsmNop ( ; VOID ; ); ;------------------------------------------------------------------------------ global ASM_PFX(AsmNop) ASM_PFX(AsmNop): nop ret
SECTION .text
指定了代碼段,之后的就是匯編代碼了。
global ASM_PFX
指定了全局的函數,可以在外部調用,當然同時也需要增加頭文件:
/** Code for nothing. @param NA @retval NA **/ VOID EFIAPI AsmNop ( VOID );
之后就可以使用該函數了,這跟普通的函數使用沒有區別。
下面是另一個例子,用于向Legacy串口輸出一個字符:
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
測試代碼可以在BeniPkg\DynamicCommand\TestDynamicCommand\Test.c中找到。
感謝各位的閱讀,以上就是“UEFI開發基礎匯編代碼如何使用”的內容了,經過本文的學習后,相信大家對UEFI開發基礎匯編代碼如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。