UEFI开发基础汇编代码的使用

 更新时间:2022年06月06日 10:39:13   作者:jiangwei0512  
这篇文章主要为大家介绍了UEFI开发基础汇编代码使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

UEFI中使用汇编代码

EDK代码中包含一部分汇编代码,目前支持的有.S、.asm和.nasm格式的汇编(第一个是AT&T汇编,后两个是Intel汇编,只是使用的汇编样式稍有不同,.nasm是开源和免费的,更加的通用),如果是在Windows下编译,一般使用的是NASM编译器,所以会使用.nasm格式的汇编文件,而编译工具也是免费的,可以在https://www.nasm.us/下载,并放到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开发汇编代码的资料请关注脚本之家其它相关文章!

相关文章

  • 汇编中的数组分配和指针的实现代码

    汇编中的数组分配和指针的实现代码

    这篇文章主要介绍了汇编中的数组分配和指针的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Windows10下利用DOSBOX和MASM32搭建汇编语言开发环境

    Windows10下利用DOSBOX和MASM32搭建汇编语言开发环境

    这篇文章主要介绍了Windows10下利用DOSBOX和MASM32搭建汇编语言开发环境,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言指令集之串处理指令讲解

    汇编语言指令集之串处理指令讲解

    这篇文章主要介绍了汇编语言指令集之串处理指令讲解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-01-01
  • libAccessibility通知Crash排查记录分析

    libAccessibility通知Crash排查记录分析

    这篇文章主要为大家介绍了libAccessibility通知Crash排查记录分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 汇编语言Debug命令详解教程

    汇编语言Debug命令详解教程

    这篇文章主要为大家介绍了汇编语言Debug命令的教程,文中对Debug的命令进行了全面的讲解有需要的朋友可以借鉴参考共同学习下,希望能够有所帮助
    2021-11-11
  • 汇编实现简单选择排序的方法示例

    汇编实现简单选择排序的方法示例

    这篇文章主要介绍了汇编实现简单选择排序的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 计算机系统汇编语言和机器语言深入理解

    计算机系统汇编语言和机器语言深入理解

    这篇文章主要为大家介绍了计算机系统汇编语言和机器语言深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 详解汇编语言MOV指令

    详解汇编语言MOV指令

    在汇编语言中,MOV指令是数据传送指令,也是最基本的编程指令,这篇文章主要介绍了汇编语言MOV指令,需要的朋友可以参考下
    2020-01-01
  • 汇编语言段定义的使用

    汇编语言段定义的使用

    汇编语言源程序的基本结构是段,一个汇编语言源程序由若干个代码段,本文主要介绍了汇编语言段定义的使用,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • 汇编 JCC指令表与笔记

    汇编 JCC指令表与笔记

    这篇文章主要介绍了汇编 JCC指令表与笔记,需要的朋友可以参考下
    2020-01-01

最新评论