我正在开发一些有趣的"实验室的计算机体系结构课程,让学生编写并运行一个非常小的操作系统。我正在跟踪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目标的交叉编译器?
答案 0 :(得分:1)
我假设README所说的是" CHOST"编译器,而#34; CTARGET"总是i686(32位)。没有%r8d
(或%r8
或任何%r{number}
)寄存器,所以不能你不能使用它(它&# 39;是x86-64 / IA32-E寄存器。)
您可以看到my blogpost on CHOST/CBUILD/CTARGET以了解用于交叉编译的不同平台名称之间的关系。