Вычисление АБСОЛЮТНЫХ АДРЕСОВ / значений реестра в Ассемблере (Intel 8086) - PullRequest
1 голос
/ 15 июня 2010

Я знаю, что АБСОЛЮТНЫЙ АДРЕС следующей инструкции находится в 50000 (шестнадцатеричное), и я знаю, что шестнадцатеричное значение, которое должно быть в реестре IP, равно 4000 (шестнадцатеричное).У меня вопрос ... Почему это работает так?

У меня есть другие доступные значения реестра, если они нужны.

Есть идеи?

1 Ответ

2 голосов
/ 15 июня 2010

Странность адресации 8086 (унаследованная всеми более поздними чипами Intel) составляет сегментация .Все регистры 16-разрядные, но адресуемая память составляет 1 Мег = 2 степени 20, т. Е. Вам нужно 20 бит для адреса.

Гении Intel решили использовать два регистра для формирования полного адреса - a сегментный регистр (CS, DS, SS, ES), который сдвинут влево на 4 бита, а затем добавлен с помощью смещенного регистра для формирования полного 20-битного адреса.значение в IP - это смещение от значения в CS (сегмент кода).Из того, что вы сказали, значение в CS должно быть (0x50000 - 0x4000) >> 4 = 0x4c00.

...