首页 > 解决方案 > rel8 和 rel16/rel32 有区别吗?

问题描述

在 Intel 的 SDM 3.1.1.3 中,rel8 符号与 rel16 和 rel32 符号是分开列出的,其区别不止操作数大小。

对于 rel8 它说:

rel8 — 从指令结束前 128 个字节到指令结束后 127 个字节范围内的相对地址。

对于 rel16 和 rel32 它说:

rel16, rel32 — 与汇编指令相同的代码段内的相对地址。rel16 符号适用于操作数大小属性为 16 位的指令;rel32 符号适用于具有 32 位操作数大小属性的指令。

我只是在组装时弄湿了我的脚,但对我来说,这些符号看起来差别很大。似乎未定义 rel16/rel32 是否只能在指令之后寻址字节,或者像 rel8 所描述的两种方式(尽管 iirc 相对地址已签名,但仍然明确提到 rel8 而不是 rel16/rel32),也像 rel8不关心代码段。

那么,那些超出操作数大小的符号之间实际上有什么区别吗?

标签: assemblyx86

解决方案


推荐阅读