UEFI中使用汇编代码

EDK代码中包含一部分汇编代码,目前支持的有.S、.asm和.nasm格式的汇编(第一个是AT&T汇编,后两个是Intel汇编,只是使用的汇编样式稍有不同,.nasm是开源和免费的,更加的通用),如果是在Windows下编译,一般使用的是NASM编译器,所以会使用.nasm格式的汇编文件,而编译工具也是免费的,可以在https://www.nasm.us/下载,并放到C:\Nasm目录,之后就可以在EDK代码中使用。

下面是一个示例,它是一个库模块:

  1. 首先创建inf文件:
[Defines]INF_VERSION                       = 0x00010005BASE_NAME                         = AsmLibFILE_GUID                         = 2A3061AF-740E-4B62-B900-FC24AF9B072EMODULE_TYPE                       = BASEVERSION_STRING                    = 1.0LIBRARY_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.decBeniPkg/BeniPkg.dec

这里的代码跟普通inf没有区别,只是指定的源文件Sources稍有不同,通常会去指定时Ia32还是X64

  1. 汇编代码编写:
  SECTION .text;------------------------------------------------------------------------------
; VOID
; EFIAPI
; AsmNop (
;   VOID
;   );
;------------------------------------------------------------------------------
global ASM_PFX(AsmNop)
ASM_PFX(AsmNop):nopret

SECTION .text指定了代码段,之后的就是汇编代码了。

global ASM_PFX指定了全局的函数,可以在外部调用,当然同时也需要增加头文件:

/**Code for nothing.@param  NA@retval  NA**/
VOID
EFIAPI
AsmNop (VOID);
  1. 之后就可以使用该函数了,这跟普通的函数使用没有区别。

下面是另一个例子,用于向Legacy串口输出一个字符:

global ASM_PFX(AsmSerialIo)
ASM_PFX(AsmSerialIo):mov dx, 03f3hmov eax, 0
loop:in  al, dxbt  eax, 5jnc loop      ; Wait until readymov dx, 03f8hmov ax, cx    ; cx is the input parameterout dx, ax    ; Output the characterret

测试代码可以在BeniPkg\DynamicCommand\TestDynamicCommand\Test.c中找到。

【UEFI实战】UEFI中使用汇编代码相关推荐

  1. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  2. 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    实验4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 姓名:李冬辉 学号:20133201 注: 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http ...

  3. 在C中嵌套汇编代码难吗?

    关注.星标公众号,不错过精彩内容 作者:黄工 公众号:strongerHuang 做底层软件开发的,或多或少都会接触一些汇编代码,今天就来说说关于汇编在C中的定义和调用,以及举例说明嵌套汇编代码. 一 ...

  4. 理解ATL中的一些汇编代码

    我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以 ...

  5. 汇编和python-PyAsm-在python中嵌入汇编 | 学步园

    http://members.verizon.net/~olsongt/usersGuide.html 其实很久之前就发现了PyAsm,但是初期的尝试并不成功.官方网站并没有给太多的例子,刚开始也没有 ...

  6. 【汇编实战开发笔记】从汇编代码中找出一段普通的for循环变成“死循环”的根本原因(RT-Thread技术论坛优秀文章)

    文章目录 1 前言 2 问题描述 3 简单分析 4 场景再现 5 柳暗花明 6 找到证据 6.1 究竟是不是警告 6.2 盘根问底 6.3 解除风险 7 扩展延伸 7.1 RISC-V架构 7.2 8 ...

  7. 【UEFI实战】EDK的编译流程说明

    前言 使用EDK进行UEFI开发,开始的时候很容易遇到的问题就是编译不过,并非代码的问题,而是编译环境存在异常. 本文主要介绍EDK是如何进行编译的,使用的平台是Windows.这里还想说一点,事实上 ...

  8. 【UEFI实战】LinuxBoot

    综述 LinuxBoot是一个开源的固件,用来替代UEFI BIOS加载Linux的系统. 官网是LinuxBoot. 对应的代码库位于LinuxBoot · GitHub. 另外,本文是在[UEFI ...

  9. 【UEFI实战】UART的初始化

    说明 UART全称是Universal Asynchronous Receiver/Transmitter,这里它表示的是一种实现串口通信的芯片,在整个串口系统中它的位置如下图所示: RS232 +- ...

  10. 【UEFI实战】FSP简介

    说明 在[UEFI实战]SlimBootloader简介中有说到,编译Slim Bootloader的时候需要使用到FSP,本文就是用来介绍FSP是什么,它的作用,以及如何编译等内容. 什么是FSP ...

最新文章

  1. PLsql连接centos7上的Oracle的连接超时的解决方发
  2. AI志愿超强攻略|中国高校AI专业最全院校排名课程对比(附链接)
  3. Filter 设计模式编码实践
  4. python 三种聚类算法(K-means,AGNES,DBScan)
  5. python到底能用来做啥-Python那么火,到底能用来做什么?
  6. 执行存储过程出现:不是有效的标识符。
  7. 最优化作业第6章——无约束多维非线性规划方法
  8. Java内联虚拟方法调用的性能
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上书店管理系统
  10. mvc ajax helpers,ASP.NET MVC 实践系列4-Ajax应用
  11. 物联网:不要幻想今年会突飞猛进,但行业依然亢奋
  12. 下载Python安装包及支持包路径
  13. 跟锦数学200217 厦门大学2019年数学分析考研试题4 (解答见跟锦数学微信公众账号)...
  14. 【个人硬件开源分享】基于ESP32的能量机关主控受控模块,伏虎单手摇杆重力感应加摇杆加LCD屏幕分为左手和右手,基于PD5048A的I2C总线扩展级联器
  15. 前端下载文件流PDF文件显示空白 或 无法打开
  16. CSS动画实现星星闪烁效果
  17. 环艺考计算机英语吗,应届考取北理环艺分享|愿汗水泪水都不会被辜负!
  18. cesm2(clm5.0)移植方法
  19. 易语言 计算机取用户名,易语言GetUserNameA获取系统当前用户名
  20. Python——LeetCode刷题——【387. 字符串中的第一个唯一字符】

热门文章

  1. 深拷贝和浅拷贝的区别(必须掌握)
  2. mysql 1138_mysql ERROR 1138: Invalid use of NULL value
  3. Ubuntu/Debain下安装微信、QQ等Windows应用(最简便方法)
  4. 乐动手环app下载安装_乐动健康手环app下载-乐动健康 安卓版v2.34-pc6智能硬件网...
  5. 大数据教程:数据可视化(ECharts)
  6. freeswitch拨打分机号
  7. mybatis mysql连接时区_MySQL时区的查看和设置
  8. 处理器后面的字母含义_CPU后面的数字和字母都是什么意思?全面解答。
  9. 魅族手机怎么把计算机放到桌面,魅族手机怎么投屏到电脑 照片怎么传到新手机...
  10. GraphRNN: Generating Realistic Graphs with Deep Auto-Regressive Models