При вычислении АБСОЛЮТНОГО АДРЕСА / Реестр оценивает в Ассемблере (Intel 8086)

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

Я имею другие значения реестра в наличии, если они необходимы.

Какая-либо идея?

1
задан Raven Dreamer 15 June 2010 в 14:46
поделиться

1 ответ

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

Гении Intel решили использовать два регистра для формирования полного адреса - сегментный регистр (CS, DS, SS, ES), который сдвигается на 4 бита влево, затем складывается с регистром смещения для формирования полного 20-битного адреса.

Таким образом, значение в IP является смещением от значения в CS (сегмент кода). Из того, что вы сказали, значение в CS должно быть (0x50000 - 0x4000) >> 4 = 0x4c00.

2
ответ дан 2 September 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: