gpt4 book ai didi

assembly - 用 GCC (gas/as) 汇编 elf64 格式的 32 位模式指令

转载 作者:行者123 更新时间:2023-12-05 03:21:56 26 4
gpt4 key购买 nike

我正在尝试将操作系统开发教程从 NASM Intel 语法移植到 GAS (gcc/as)。

除了一条指令:bits 32 外,我毫无问题地转换为 AT&T 语法。这是必要的,因为处理器在多重引导入口点处仍处于保护模式(32 位模式),但我们正在将 64 位内核构建为 64 位 ELF 可执行文件。

使用 NASM,我会将 bits 32 指令放在我的文件 (boot.asm) 的开头,然后使用以下命令进行汇编:nasm -f elf64 boot.asm -o boot .o


我在网上发现我可以用 GCC 的 -m32 选项替换 bits 32 指令(相当于 as --32):

gcc -c -m32 boot.S -o boot.o

然而,当我希望 elf64 与编译器生成的 64 位代码链接时,这会将输出格式变为 elf32,因为入口点切换到长模式。

我该如何解决这个问题?是否有任何其他方法可以在不使用 -m32 的情况下使用 32 位指令,或者可以使用 GCC 和/或 GNU 汇编器从输出格式中单独指定模式?

教程链接:https://os.phil-opp.com/multiboot-kernel/

最佳答案

我找到了我丢失的东西:

bits 32 指令只需替换为 .code32 即可。

关于assembly - 用 GCC (gas/as) 汇编 elf64 格式的 32 位模式指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72858805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com