Wie unterscheidet die CPU CALL rel16
(E8 cw) und CALL rel32
(E8 cd)?
Laut dieser Site spiegeln die Intel-Architekturhandbücher die Opcodes für CALL rel16
und CALL rel32
wider. sind E8 cw
bzw. E8 cd
.
Das hat mich fragen lassen, wie unterscheidet die CPU diese Opcodes voneinander, da E8 cw
möglicherweise ein Präfix von E8 cw
?
Mit dem Präfix 66
wird zwischen der Operandengröße von 16 und 32 Bit umgeschaltet. In den 16-Bit-Betriebsmodi ist E8 cw
also CALL rel16
und 66 E8 cd
ist CALL rel32
, während im 32-Bit-Betriebsmodus E8 cd
ist CALL rel32
und 66 E8 cw
ist CALL rel16
.
Im langen Modus (64-Bit-Modus) scheint CALL rel16
gemäß den Intel-Handbüchern nicht verfügbar zu sein. CALL rel32
funktioniert wie im 32-Bit-Modus, aber rel32
direkt wird auf 64 Bit erweitert und zu rip
anstelle von eip
hinzugefügt.