Как сделать 20-битный адрес, используя два 16-битных регистра?

IAPX88 может работать с 1 мегабайтом памяти (20-битная адресация), теперь мой вопрос заключается в том, как мы можем сделать 20-битный адрес, используя два 16-битных регистра. Пожалуйста, приведите пример.


person Zia ur Rahman    schedule 20.03.2010    source источник


Ответы (2)


Физические адреса IAPX88 вычисляются путем взятия сегментного регистра, его сдвига влево на 4 бита и добавления регистра смещения.

Например, физический адрес в памяти, который выполняет код, равен (CS<<4)+IP, где CS — это сегмент кода, а IP — указатель инструкции.

Подробную информацию можно найти на странице Intel 8086 в Википедии.

person vy32    schedule 20.03.2010

Мы можем сделать это, используя сложение со сдвигом. мы имеем дело с двумя адресами: логический адрес, который представлен двумя 16-битными адресами, и физический адрес, который является фактическим 20-битным адресом.

Помните, что, поскольку мы имеем дело с шестнадцатеричными числами, каждое число представляет 4 бита.

например мы хотим представить адрес: 7 2 3 A 5 с помощью двух 16-битных адресов, мы можем сделать с помощью двух адресов: 7 2 3 A и 0 0 0 5.

Сначала мы сдвигаем первый адрес на четыре бита влево: 7 2 3 A 0, который называется базовым.

Затем мы добавляем второй адрес: 0 0 0 5, который называется смещением.

Результатом этой операции является новый 20-битный адрес: 7 2 3 A 5.

Если нашей базой является CS, который является началом сегмента кода, а нашим смещением является указатель инструкции IP, мы можем описать предыдущую операцию следующим образом: (CS << 4) + IP

Примечание: мы можем описать любой 20-битный физический адрес, используя множество логических адресов 16:16, но каждый 2-битный логический адрес будет иметь только один физический адрес.
введите здесь описание изображения

person Mostafa Wael    schedule 31.10.2020