【问题标题】:Is is possible to use %r8d with i686-elf-gcc?是否可以将 %r8d 与 i686-elf-gcc 一起使用?
【发布时间】:2016-11-08 20:26:45
【问题描述】:

我正在为计算机体系结构课程开发一些“有趣”的实验室,让学生编写和运行一个非常简单的操作系统。我正在关注http://wiki.osdev.org/Bare_Bones 的 Bare Bones 设置,并使用 Richard Hull 的预编译 i686 交叉编译器 (https://github.com/rm-hull/barebones-toolchain)。

当我尝试使用%r8d 编写汇编代码时,我收到此错误

 Error: bad register name `%r8'

自述文件说“有两种平台风格,32 位和 64 位,具体取决于您的主机 linux 环境”,但也将“i686(32 位 ELF)”列为目标之一。

问题的根源在于 ELF 目标是 32 位,我是否正确?如果是这样,是否有一种简单的方法可以让具有 64 位 ELF 目标的交叉编译器启动并运行?

【问题讨论】:

    标签: gcc cross-compiling elf


    【解决方案1】:

    我假设自述文件所说的内容是指编译器的“CHOST”,而“CTARGET”总是 i686(32 位)。没有%r8d(或%r8,或任何@ 987654324@) 寄存器,所以你不能使用它(它是一个 x86-64/IA32-E 寄存器。)

    可以看my blogpost on CHOST/CBUILD/CTARGET了解不同平台名称之间的关系进行交叉编译。

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 2019-07-18
      • 1970-01-01
      • 2021-11-12
      • 2016-04-01
      • 2011-01-20
      • 2018-08-11
      • 2021-08-05
      • 2019-03-18
      相关资源
      最近更新 更多