assembly - instruction - ¿Cómo distingue la CPU ''CALL rel16''(E8 cw) y ''CALL rel32''(E8 cd)?
intel x86 instruction set (1)
¿Cómo distingue la CPU CALL rel16
(E8 cw) y CALL rel32
(E8 cd)?
Según este sitio , reflejando los manuales de arquitectura Intel, los CALL rel16
para CALL rel16
y CALL rel32
son E8 cw
y E8 cd
, respectivamente.
Esto me ha hecho preguntarme, ¿cómo distingue la CPU estos códigos de operación entre sí, ya que E8 cw
podría ser un prefijo de E8 cw
?
El prefijo 66
se usa para alternar entre el tamaño de operando de 16 y 32 bits. Entonces, en modos de operación de 16 bits, E8 cw
es CALL rel16
y 66 E8 cd
es CALL rel32
, mientras que en modo de operación de 32 bits, E8 cd
es CALL rel32
y 66 E8 cw
es CALL rel16
.
En modo largo (modo de 64 bits), CALL rel16
parece no estar disponible según los manuales de Intel. CALL rel32
funciona como en el modo de 32 bits pero el rel32
inmediato es un signo extendido a 64 bit y agregado a rip
lugar de eip
.