CPU 如何区分 'CALL rel16' (E8 cw) 和 'CALL rel32' (E8 cd)?

问题描述 投票:0回答:1

CPU如何区分

CALL rel16
(E8 CW)和
CALL rel32
(E8 cd)?

根据此站点,镜像英特尔架构手册,

CALL rel16
CALL rel32
的操作码分别是
E8 cw
E8 cd

这让我想知道,CPU如何区分这些操作码,因为

E8 cw
可能是
E8 cw
的前缀?

assembly x86 instruction-set instruction-encoding
1个回答
13
投票

前缀

66
用于在 16 位和 32 位操作数大小之间切换。因此,在 16 位操作模式下,
E8 cw
CALL rel16
66 E8 cd
CALL rel32
,而在 32 位操作模式下,
E8 cd
CALL rel32
66 E8 cw
CALL rel16

在长模式(64 位模式)下,根据 Intel 手册,

CALL rel16
似乎不可用。
CALL rel32
的工作方式与 32 位模式类似,但
rel32
立即数被符号扩展为 64 位并添加到
rip
而不是
eip

© www.soinside.com 2019 - 2024. All rights reserved.