2010-06-15 2 views
1

Я знаю, что АБСОЛЮТНЫЙ АДРЕС следующей инструкции расположен 50000 (hex) , Мой вопрос ... Почему это работает так?Расчет АБСОЛЮТНОГО АДРЕСА/значений реестра в Assembler (Intel 8086)

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

Любая идея?

+1

Если вы находитесь в режиме сегментированной памяти, тогда существует регистр кода сегмента, который содержит смещение, которое вы должны добавить в IP, чтобы получить абсолютный адрес следующей инструкции. –

ответ

2

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

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

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

+0

Большая обязанность. Я знал, что что-то компенсируется, но я не был уверен, где. Благодаря! –

Смежные вопросы