3

我正在学习 Linux 的工作原理。我遇到了一个奇怪的汇编语言指令,jmpi. 我可以在各种网站上找到一些解释,但奇怪的是我在汇编语言书籍中找不到它,包括Intel® 64 and IA-32 Architectures Software Developer's Manual。我已经搜索了这本书,但它不包含说明jmpi。我认为英特尔手册应该是最权威的英特尔汇编语言书籍。所以很奇怪。

我的问题是:是否有一些书籍或权威文件记录了该说明?

4

1 回答 1

2

英特尔处理器指令集中有几条JMP指令。它们具有相同的预期结果,但所采用的操作数类型不同:8 位常量、16 位常量、32 位常量、间接指定的值;也是相对跳跃还是绝对跳跃。请参阅架构手册第 854 页中的表格

Opcode Instruction  Description
------+------------+----------------------------
EB cb  JMP rel8     Jump short
E9 cw  JMP rel16    Jump near, relative
E9 cd  JMP rel32    Jump near, relative
FF /4  JMP r/m16    Jump near, absolute indirect
FF /4  JMP r/m32    Jump near, absolute indirect
FF /4  JMP r/m64    Jump near, absolute indirect
EA cd  JMP ptr16:16 Jump far, absolute
...

它们被不同地视为在架构开发的不同阶段支持的不同内存模型的遗留物。

许多汇编程序引入了额外的助记符以使汇编代码更具可读性。所以在as86指令JMPI中指的是一个近处JMP,它可以是绝对的,也可以是相对的,但应该始终停留在代码段内,即段内跳转as86是唯一的权威参考。

于 2013-01-22T18:44:11.190 回答