linux - 帮助 %es 注册 x86 到 x86_64 汇编代码端口

标签 linux gcc assembly

好的,我得到这个编译错误:

Error: suffix or operands invalid for `push'

当我使用这条线时:

pushw %es; 

我知道它是 %es 或 w,因为我已经成功地为 64 位汇编器移植了其他推送、弹出命令。

%es 是根据我发现的一些文档的现有寄存器,我认为没有不同的引用。

那么我的问题可能是什么?我对我的 asm 非常生疏,我认为它可能是 w。

感谢您的帮助。

最佳答案

作为 Zimbaboa 已经 explained , 64位模式下没有分段。

此外,如果您查看英特尔的手册,Instruction Set Reference, M-Z ,您将看到 push ES 在 64 位模式下完全是无效指令(第 423 页):

Opcode  Instruction  Op/  64-Bit  Compat/  Description
                     En   Mode    Leg Mode
...
0E      PUSH CS      NP   Invalid Valid    Push CS. 
16      PUSH SS      NP   Invalid Valid    Push SS. 
1E      PUSH DS      NP   Invalid Valid    Push DS. 
06      PUSH ES      NP   Invalid Valid    Push ES. 
0F A0   PUSH FS      NP   Valid   Valid    Push FS. 
0F A8   PUSH GS      NP   Valid   Valid    Push GS. 

关于linux - 帮助 %es 注册 x86 到 x86_64 汇编代码端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289316/

相关文章:

linux - 为什么 Go 在 Windows 上使用 cgo 进行简单的 File.Write?

linux - 当脚本运行程序时,stdout 会发生什么?

c++ - long long 和 long int 有什么区别

mysql - 需要有关多个数据库插入操作的建议

c - 与 '%rbx' 后缀一起使用的寄存器 0x​​104567910 不正确

c - GCC 无法从具有内联汇编的函数生成 32 位代码

c++ - Makefile 中的编译错误,包括未显示

c - 在 PintOS 中运行 make 时获取对 `floor' 的 undefined reference

assembly - 如何处理 x86 ASM 中的未知长度输入?

c - 来自 Linux 内核模块的暂停指令不起作用