|
Программаможеттакжекомбинироватьвычисляемыйадресбазыс
вычисляемыминдексом.КакпоказанонаФиг.3.2, программа может
использовать режим адресации сдвумя разными адресными регистрами.
Для формирования исполнительного
адресав команде могут сочетаться
любой изрегистров базы (BX иBP) с любым
изиндексных регистров
(SIиDI).Впрограмме можетбытьтакжеуказаносмещение,
добавляемоексуммезначенийэтихдвухрегистров. Этот способ
адресацииобладаетмаксимальнойгибкостью,таккакпозволяет
вычислять вовремя выполнения программы иадрес
базы, и индексное
значение.Такая возможностьневсегдатребуется, нодоступна в
любой момент.
Пример с классным журналом демонстрирует
случай, когда програм-
ма может вычислять и адрес базы,и индекс вектора. Для того, чтобы
определить отметкуI-го ученика заJ-ю
контрольную, потребовалось
бы установить адрес базы на J-йвектор и индексировать его по I-му
элементу.
Нарис.3.3приведенасводкавосьмиразличныхспособов
адресации,возможныхвмикропроцессоре8088.Вкомандемогут
использоваться любые из четырехадресных регистров и смещение либо
комбинациябазисного
регистраи индексноговместе сосмещением.
Смысл колонки, обозначенной R/M, будет
объяснен позже.
R/MАдрес операнда
-----------------------------
000[BX
+ SI + СМЕЩЕНИЕ]
001[BX
+ DI + СМЕЩЕНИЕ]
010[BP
+ SI + СМЕЩЕНИЕ]
011[BP
+ DI + СМЕЩЕНИЕ]
100[SI
+ СМЕЩЕНИЕ]
101[DI
+ СМЕЩЕНИЕ]
110[BP
+ СМЕЩЕНИЕ]
111[BX
+ СМЕЩЕНИЕ]
----------------------------- Фиг. 3.3
Способы адресации 8088
В наборе команд 8088поле смещения для адресации оптимизирова-
но таким образом, чтобы минимизировать
кличество треуемых байт. Ко-
манда может не содержать полесмещения, когда смещение равно нулю.
Если смещениенаходится в диапазонеот
-127 до127, то длянего
достаточноодного
байта.Когда жедля егообозначения требуется
полное 16-битовое поле адреса, тополе смещения будет занимать два
байта. Такимобразом, поле смещенияможет по необходимостииметь
длину 0, 1или
2 байта. Когда оно имеетдлину один
байт, двоичное
число перед форимроваием адереса получает
распостранение знака. Это
означает, что процессор перед выполнением
сложения помещает старший
бит смещенияв старшие 8бит
16-битового значения.Это позволяет
представлятьотрицательные смещенияв
одномбайте. Самоелучшее
здесьто, чтоассемблер самопределяет нужнуюдлину ивыбирает
правильную и наиболее короткую команду для
выполнения этой работы.
Нонесмотрядаженавсеэти возможности адресации, набор
команд8088 допускаеттолько поодному операндупамяти водной
команде.ДвухоперанднаякомандаADDпозволяетскладыватьлибо
регистр с ячейкой памяти, либо два
регистра. В одной команде нельзя
сложитьдве ячейкипамяти. Этои означает,что команда содержит
только один адрес памяти.
|