Странность адресации 8086 (унаследованная всеми более поздними чипами Intel) равна segmentation. Регистры все 16-разрядные, но адресная память составляет 1 Meg = 2 power 20, т. Е. Вам нужно 20 бит для адреса.
Гении в Intel решили использовать два регистра, чтобы сформировать полный адрес - это сегмент регистре (CS, DS, SS, ES), который смещается слева 4 бита, затем добавляют регистр смещения, чтобы сформировать полный 20 -битный адрес.
Таким образом, значение в IP является смещением от значения в CS (сегмент кода). Из того, что вы сказали, значение в CS должно быть (0x50000 - 0x4000) >> 4 = 0x4c00
.
Если вы находитесь в режиме сегментированной памяти, тогда существует регистр кода сегмента, который содержит смещение, которое вы должны добавить в IP, чтобы получить абсолютный адрес следующей инструкции. –