Системы адресации в мини- и микро-ЭВМРефераты >> Программирование и компьютеры >> Системы адресации в мини- и микро-ЭВМ
Рассмотрим этот режим адресации используя команду MOVL (R0),(R2)+. В памяти инструкция будет представлена как D0 60 82, где 60 - как уже говорилось косвенная адресация с регистром R0, а 82 - косвенная адресация с использованием регистра R2 и автоувеличение. Восьмерка в последнем случае как раз и означает данный режим адресации.
До операции MOVL (R0),(R2)+
R0 = 00001000
R2 = 00001050
(00001000) = 000000AC (R3)
(00001050) = 00000000 (R2)
После .
R0 = 00001000
R2 = 00001054 <—— Увеличилось на 4
(00001000) = 000000AC
(00001050) = 000000AC
Как видно произошла пересылка числа из ячейки 00001000 в 00001050 и значение регистра R2 увеличилось на 4. ( Инструкция MOVL пересылает двойные слова. Об этом говорит суффикс 'L' - Long - длинное или двойное слово. Поэтому R2 увеличился на 4. Вообще предусмотрены операции работающие с байтами, словами, двойными словами и иногда с учетверенными словами и имеющие суффиксы B,W,L и Q соответственно.)
2.4 РЕЖИМ С АВТОУМЕНЬШЕНИЕМ
Этот режим идентичен режиму с автоувеличением, однако здесь после выполнения операции следует не увеличение, а уменьшение операнда по тем же правилам. Для примера рассмотрим команду CLRB -(R5), которая в памяти будет выглядеть как 94 75. Здесь 94 - код операции, а 75 - значит: использовать регистр R5 ( ?5 ) и произвести уменьшение после исполнения ( 7? ).
До операции CLRB -(R5)
R5 = 00001000
(00000FFF) = 0000001A
(000001000) = 0000001A (R5)
После .
R5 = 00000FFF <—— уменьшилось на 1
(00000FFF) = 0000001A (R5)
(000001000) = 00000000 <—— 0
Изменения хорошо видны. Ячейка 00001000, на которую первоначально указывал регистр R5 очистилась ( CLRB - CLeaR Byte - очистить байт ),значение регистра R5 уменьшилось на 1 и теперь указывает на ячейку памяти расположенную перед ячейкой 00001000, т.е. 00000FFF.
2.5 КОСВЕННЫЙ РЕЖИМ С АВТОУВЕЛИЧЕНИЕМ
В этом режиме содержимое выбранного регистра является адресом адреса операнда, а после выполнения операции производится увеличение содержимого этого регистра на 4, независимо от размера операнда. Это определяется тем, что регистр содержит адрес адреса ( т.е. адрес ячейки, содержимое которой в свою очередь используется как адрес для получения действительного операнда ), а адрес всегда представляется как двойное слово.
Для примера возьмем операцию очистки байта, мнемоника которой на ассемблере будет выглядеть как CLRB @(R5)+. Символ '@' ( зюха ) означает использование не просто режима с автоувеличением, а именно косвенного. Представление этой операции в памяти будет 94 95, где 94 - код операции, 95 - означает использование регистра R5 и косвенной адресации с автоувеличением (цифра 9).
До операции CLRB @(R5)+
R5 = 00001000
(00001000) = 000000AC (R5)
(000000AC) = 0A (00001000)
После .
R5 = 00001004 <—— увеличилось на 4
(00001000) = 000000AC
(000000AC) = 00 <—— 0
В результате выполнения этой команды содержимое ячейки 000000AC, адрес которой cодержался в ячейке 00001000, на которую указывал регистр R5 обнулилось, а значение регистра R5 увеличилось на 4.
2.6 РЕЖИМ СМЕЩЕНИЯ
В этом режиме содержимое выбранного регистра складывается с содержимым байта, слова или двойного слова, следующего непосредственно за спецификатором операнда. Полученная сумма является адресом операнда. Мнемоники на ассемблере для 3ех случаев имеют вид: B^X(Rn), W^X(Rn), L^X(Rn), где X смещение, относительно (Rn). Возможность задавать размерность смещения предусмотрена для экономии памяти.
Рассмотрим этот способ адресации на примере команды CLRB B^2(R4), которая очистит 3ий байт байтового массива, адрес которого содержится в регистре R5. Ее машинное представление выглядит как 94 A4 02, где 94 - код операции, A4 - регистр R4 и смещение представлено байтом ( для слова и двойного слова было бы C4 и E4 соответственно, а третье поле представляло бы смещение как слово или двойное слово ), а 02 собственно смещение, представленное в виде байта.
До операции CLRB B^2(R4)
R4 = 00001000
(00001000) = 00 (R4)
(00001001) = 01
(00001002) = 02 (R4)+2
После .
R4 = 00001000
(00001000) = 00 (R4)
(00001001) = 01
(00001002) = 00 <—— 0
В результате выполнения команды действительно произошло очищение ячейки 00001002, заданной начальным адресом 00001000 и смещением 2. Этот режим адресации позволяет легко обращаться к отдельным элементам массивов, что очень удобно.
2.7 КОСВЕННЫЙ РЕЖИМ СМЕЩЕНИЯ
В этом режиме содержимое выбранного регистра складывается со смещением ( байт, слово или двойное слово следующее непосредственно за спецификатором операнда ) и полученная сумма рассматривается как адрес двойного слова, которое является адресом операнда. Мнемоническое представление на ассемблере @B^X(Rn), @W^X(Rn) и @L^X(Rn) для смещения X в байт, слово или двойное слово соответственно. Rn - это регистр,используемый в данном способе адресации.
В качестве примера возьмем инструкцию MOVW @B^8(R5),(R2), которая должна занести в память по адресу (R2) число, на которое указывает двойное слово, по адресу получаемому при сложении содержимого регистра R2 со смещением 8. На машинном языке эта инструкция будет иметь вид B0 B5 08 62, где В0 - код инструкции, B5 - регистр R5 и байтовое смещение, 08 - смещение и 62 - косвенная адресация с использованием регистра R2.
До операции MOVW @B^8(R5),(R2)
R5 = 00001000
R2 = 00000400
(00001000) = 00000100 (R5)
(00001004) = 00000200
(00001008) = 00000300 (R5)+8
(00000300) = AAAA @(R5)+8
(00000400) = 0000 (R2)
После .
R5 = 00001000
R2 = 00000400
(00001000) = 00000100 (R5)
(00001004) = 00000200
(00001008) = 00000300 (R5)+8
(00000300) = AAAA
(00000400) = AAAA
Как видно из примера в ячейку 00000400 было занесено содержимое ячейки 00000300. Адрес 0000300 был вычислен как содержимое R5 ( 00001000 ) плюс 8 т.е. 00001008. Эта ячейка, как видно, действительно содержит адрес 00000300.
2.8 РЕЖИМ КОРОТКОГО ЛИТЕРАЛА
Так как многие литералы (числа), используемые в программах, имеют небольшой размер, то в СМ1700 предусмотрен специальный режим адресации, называемый режимом короткого литерала. В этом режиме константа содержится непосредственно в самом спецификаторе операнда. Любой спецификатор операнда, два старших разряда которого равны нулю содержит литеральную константу в младших шести разрядах.
00 ?????? <—— байт спецификатор операнда
литерал
С помощью литерала в инструкции могут быть представлены целые числа в диапазоне от 0 до 63. Мнемоника на ассемблере S^#n, где n - литерал. Рассмотрим инструкцию MOVL S^#18,R3 которая в памяти будет представлена в виде D0 18 53. Здесь D0 - код инструкции, 18 - литерал, 53 - регистр R3 при прямой адресации.
До операции MOVL S^#18,R3
R3 = 00001234
После .
R3 = 00000018
Из примера видно, что литерал был занесен в регистр R3