Учебник по ассемблеру (ASM)
 

Ассемблер в примерах - Принципы адресации

Вопрос:
Почему смещение пишется в ЧЕТЫРЁХ цифро-буквенных обозначениях (2 байта), ведь все регистры 16-ти битные (2 байта), а память 20-ти битная (2,5 байта). Смещение (т.е. разница 20h-16h) при этом составляет 4 бита. Но эти 4 бита можно записать и одним числом от 0h до 0Fh. Где я неправ в своих рассуждениях?

Ответ:
Скажу вам по секрету: смещение пишется не в 4-х цифро-буквенных обозначениях. Оно пишется так, как угодно программисту. Так, как ему будет удобно.
Например, смещение 0F457h занимает 5 символов (6, если считать символ h на конце) и не может занимать 4. Также оно может быть записано так: 62551. Это в десятичном виде. Или так 172127o, если вы отлично владеете 8-ричной системой счисления. Или даже так 1111010001010111b, если вы маньяк двоичной. Память не может быть 20-ти битной при всех 16-ти битных регистрах. В данном случае речь идет о 20-ти битной адресации памяти. Значение сегментного регистра уможенное на 16-ть складывается со значение регистра общего назначения. Механизм получения физического адреса реализован на аппаратном уровне и для программиста практически прозрачен. С помощью такого метода можно работать с 1мб памяти. Да ещё Смещение (т.е. разница 20h-16h) при этом составляет 4 бита. , тут Вы тоже ошиблись т.к. 20h-16h=0Аh или 10 в десятичной системе.


   Вперёд
   Содержание