Я знаю, что АБСОЛЮТНЫЙ АДРЕС следующей инструкции расположен 50000 (шестнадцатеричное число), и я знаю, что шестнадцатеричное значение, которое должно быть в Регистре IP, 4000 (шестнадцатеричное число). Мой вопрос... Почему это работает как это?
Я имею другие значения реестра в наличии, если они необходимы.
Какая-либо идея?
Странностью адресации 8086 (унаследованной всеми последующими чипами Intel) является сегментация. Регистры все 16-битные, но адресуемая память - 1 мегабайт = 2 мощность 20, т.е. для адреса нужно 20 бит.
Гении Intel решили использовать два регистра для формирования полного адреса - сегментный регистр (CS, DS, SS, ES), который сдвигается на 4 бита влево, затем складывается с регистром смещения для формирования полного 20-битного адреса.
Таким образом, значение в IP является смещением от значения в CS (сегмент кода). Из того, что вы сказали, значение в CS должно быть (0x50000 - 0x4000) >> 4 = 0x4c00
.