Существует множество кодов операций перехода / вызова, и некоторые из них являются относительными.Я бы сказал, что на самом деле вы получили не E8 FD
, а E8 FD FF
.E8
кажется "вызовом 16-битного относительного", а 0x100
- это место, где по умолчанию размещаются инструкции.
Таким образом, вы помещаете call 0x100
по адресу 0x100, и сгенерированный код "do"команда перехода и переход с -3 из фактического указателя инструкции ".-3
потому, что смещение вычисляется из позиции после , когда читается инструкция, которая в случае E8 FD FF
равна 0x103.Вот почему сдвиг, если FD FF
, big-endian для 0xfffd
, то есть 16-битный -3
.