在尝试为反汇编代码编写指令集分析工具 ( https://superuser.com/a/832440/384221 ) 时,我发现操作码 MOVABS 未包含在我的操作码源数据库(Shirk 的gas.vim
文件)中,但我不确定在哪个架构中引入了它。
根据Gas/x86 AT&T 语法中 movabs 的含义是什么?和其他来源似乎该指令是在 64 位体系结构之前引入的。但是是 i686 或更早版本吗?
谢谢你。
在尝试为反汇编代码编写指令集分析工具 ( https://superuser.com/a/832440/384221 ) 时,我发现操作码 MOVABS 未包含在我的操作码源数据库(Shirk 的gas.vim
文件)中,但我不确定在哪个架构中引入了它。
根据Gas/x86 AT&T 语法中 movabs 的含义是什么?和其他来源似乎该指令是在 64 位体系结构之前引入的。但是是 i686 或更早版本吗?
谢谢你。
正如 Igor 提到的,它是特定于 GAS 的。
git log --reverse -Smovabs
告诉我们它是在 2000 年提交 c0d8940 中引入的,并且:
git tag --contains c0d8940
说它早在binutils-2_11
.
movabs
只是一种特定于 GAS 的方式来强制编码 64 位内存偏移量或立即数。它仍然是相同的标准MOV
操作码。
我不确定你从哪里得到它在 x64 之前引入的概念,这显然是不正确的。例如,Solaris x86 手册提到:“movabs 仅在 –m64 下有效”。