MCS-51 (1031646), страница 16
Текст из файла (страница 16)
В системе команд имеются команды условных и безусловных переходов относительно начального адреса следующей команды впределах от (PC)—128 до (РС)+127. Команды проверки отдельных разрядов позволяютосуществлять условные переходы по состоянию "0" или "1" прямоадресуемых битов. Команды проверки содержимого аккумулятора (на ноль / не ноль) позволяют осуществлятьусловные переходы по содержимому А.Косвенно-регистровые переходы в системе команд ОМЭВМ обеспечивают ветвление относительно базового регистра (содержимого DPTR или PC) со смещением, находящимся в аккумуляторе А.2.4.6.
Способы адресации операндовСуществуют следующие способы адресации операндов-источников:—регистровая адресация;—прямая адресация;—косвенно-регистровая адресация;—непосредственная адресация;—косвенная адресация по сумме базового и индексного регистра.Первые три способа используются также для адресации операнда назначений Указанные пять способов адресации, используемые в различных сочетаниях, обеспечивают 21режим адресации.Многие команды содержит поля: "приемник", "источник", которые определяют типданных, метод адресации и участвующие операнды.Для команд, не выполняющих операции перезаписи, операнд назначения являетсяи операндом-источником.Большое количество команд включает операнды, расположенные во внутреннемОЗУ данных ОМЭВМ. Выбор адресного пространства памяти программ или внешней памяти данных в качестве второго операнда определяется командной мнемоникой (еслитолько второй операнд не является непосредственной величиной).Адресуемая область внутреннего ОЗУ данных определяется способом адресации ивеличиной адреса.
Например, обращение к регистрам специального назначения можетоыть выполнено только с помощью прямой адресации.2.4.6.1 Регистровая адресацияРегистровая адресация используется для обращения к восьми рабочим регистрамвыбранного банка рабочих регистров (эти же регистры могут быть выбраны с помощьюпрямой адресации и косвенно-регистровой адресации как обычные ячейки внутреннегоОЗУ данных).Регистровая адресация используется также для обращения к регистрам А, В АВ(сдвоенному регистру), DPTR и к флагу переноса С. Использование регистровой адресации позволяет получать двухбайтовый эквивалент трехбайтовых команд прямой адресации.2.4.6.2 Прямая адресацияПрямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (0—127) и к регистрам специального назначения.Прямая побитовая адресация используется для обращения к отдельно адресуемым128 битам, расположенным в ячейках с адресами 20Н—2FH и к отдельно адресуемым битам регистров специального назначения.Старший бит байта кода прямого адреса выбирает одну из двух групп отдельно адресуемых битов, расположенных в ОЗУ или регистрах специального назначения.
Прямоадресуемые биты с адресами 0—127 (00Н—7FH) расположены в блоке из 16 ячеек внутреннего ОЗУ, имеющих адреса 20Н—2FH. Указанные ячейки последовательно пронумерованы от младшего бита младшего байта до старшего бита старшего байта. Отдельно ад-73ресуемые биты в регистрах специального назначения пронумерованы следующим образом: пять старших разрядов адреса совпадают с пятью старшими разрядами адреса самогорегистра, а три младших — определяют местоположение отдельного бита внутри регистра.2.4.6.2 Косвенно-регистровая адресацияКосвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных.
В качестве регистров-указателей используется регистры R0, R1 выбранного банка регистров.В командах PUSH и POP используется содержимое указателя стека (SP).Косвенно-регистровая адресация используется также для обращения к внешней памятиданных.
В этом случае с помощью регистров-указателей R0 и R1 (выбранного банка рабочих регистров) выбирается ячейка из блока в 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2.16-разрядный указатель данных (DPTR) может быть использован для обращения к любойячейке адресного пространства внешней памяти данных объемом до 64 Кбайт.2.4.6.4 Непосредственная адресацияНепосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде.2.4.6.5 Косвенно-регистровая адресация по сумме базового и индексногорегистров.Косвенно-регистровая адресация по сумме: базовый регистр плюс индексный регистр (содержимое аккумулятора А) упрощает просмотр таблиц, зашитых в памяти программ.
Любой байтиз таблицы может быть выбран по адресу, определяемому суммой содержимого DPTR или PC исодержимого А.2.5 Описание машинных командОписание каждой приводимой машинной команды ОМЭВМ типа МК51 состоит из предложения языка ассемблера, кода, длины команды в байтах, времени выполнения, алгоритма ипримера. При описании операций используются обозначения, приведенные в табл.
2.23.Команда ACALL <addr 11>Команда "абсолютный вызов подпрограммы" вызывает безусловно подпрограмму, размещенную по указанному адресу. При этом счетчик команд увеличивается на 2 для получения адреса следующей команды, после чего полученное 16-битовое значение PC помещается в стек (сначала следует младший байт), и содержимое указателя стека также увеличивается на два.
Адрес перехода получается с помощью конкатенации старших бит увеличенного содержимого счетчика команд, битов старшего байта команды и младшего байта команды.Ассемблер:ACALL <метка>А10 А9 А8 1 0 0 0 1 А7 А6 А5 А4 A3 А2 Al A0Код:2 циклаВремя:(РС):=(РС)+2Алгоритм:(SP):=(SP)+1(SP)):=(PC[7-0])(SP):=(SP)+1((SP)):=(PC[l5-8l)(PC[10-0]):=A10A9A8 II A7A6A5A4A3A2A1A0,где II - знак конкатенации (сцепление);Д0 ВЫПОЛНЕНИЯ КОМАНДЫ ACALLПример:;(SP)=07H;метка МТ1 соответствует адресу: 0345Н,;т.е. (РС)=0345Н;расположена по адресу 028DH, т.е.;(PC)=028DH;ПОСЛЕ ВЫПОЛНЕНИЯ КОМАНДЫACALL MT1;(SP)=09H, (PC)=0345H,;03У [08]=8FH, ОЗУ [09]=02Н.74Команда ADD А, <байт-источник>Эта команда ("сложение") складывает содержимое аккумулятора А с содержимым байтаисточника, оставляя результат в аккумуляторе.
При появлении переносов из разрядов 7 и 3, устанавливаются флаги переноса (С) и дополнительного переноса (АС) соответственно, в противномслучае эти флаги сбрасываются. При сложении целых чисел без знака флаг переноса "С" указывает на появление переполнения. Флаг переполнения (0V) устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет — из бита 6, в противном случаефлаг 0V сбрасывается. При сложении целых чисел со знаком флаг 0V указывает на отрицательнуювеличину, полученную при суммировании двух положительных операндов или на положительнуюсумму для двух отрицательных операндов.Для команды сложения разрешены следующие режимы адресации байта-источника:1)регистровый;2)косвенно-регистровый;3)прямой;4)непосредственный.1) Ассемблер:ADD A,Rn; где n=0-700101rrr, где rrr=000-111Код:1 циклВремя:(A):=(A)+(Rn), где п=0-7Алгоритм:С:=Х, 0V:=X, AC:=X, где Х=(0 или 1);(А)=СЗН, (R6)=AAHПример:;(A)=6DH, (R6)=AAHADD A,R6;(AC)=0, (C)=l, (OV)=12) Ассемблер:ADD A,@Ri ; где i=0,l, где i=0,l0010011i, где i=0-1Код:1 циклВремя:(A):=(A)+((Ri)), где i=0,lАлгоритм:C:=X, 0V:=X, AC:=X, где Х=(0 или 1);(A)=95H, (R1)=31H, (ОЗУ [31))=4СНПример:;(A)=E1H, (ОЗУ [3lI)=4CH,ADD A,@R1;(C)=0, (AC)=1, (OV)=03) Ассемблер:ADD A,<direct>00100101 direct addressКод:1 циклВремя:(A):=(A)+(direct)Алгоритм:C:=X, 0V:=X, AC:=X, где Х=(0 или 1);(A)=77H, (ОЗУ [90])=FFHПример:;(A)=76H, (ОЗУ [90])=FFH,ADD A,90H;(C)=1, (OV)=0, (АС)=14) Ассемблер:ADD A,<#data>00100100 #dataКод:1 циклВремя:(A):=(A)+#dataАлгоритм:C:=X, 0V:=X, AC:=X, где Х=(0 или 1); (A)=09HПример:;(A)=DCH,ADD A,#0D3H;(C)=0, (OV)=0, (AC)=0Команда ADDC А.<байт-источник>Эта команда ("сложение с переносом") одновременно складывает содержимое байтаисточника, флаг переноса и содержимое аккумулятора А, оставляя результат в аккумуляторе.
Приэтом флаги переноса и дополнительного переноса устанавливаются, если есть перенос из бита 7или бита 3, и сбрасываются в противном случае. При сложении целых чисел без знака флаг переноса указывает на переполнение. Флаг переполнения (0V) устанавливается, если имеется перенос75бита 6 и нет переноса из бита 7 или есть перенос из бита 7 и нет — из бита 6, в противном случае0V сбрасывается. При сложении целых чисел со знаком 0V указывает на отрицательную величину,полученную при суммировании двух положительных операндов или на положительную сумму отдвух отрицательных операндов.Для этой команды разрешены следующие режимы адресации байта-источника:1)регистровый;2)косвенно-регистровый;3)прямой;4)непосредственный.1) Ассемблер:ADDC A,Rn ; где п=0-700111rrr, где rrr =000 - 111Код:1 циклВремя:(A):=(A)+(C)+(Rn)Алгоритм:(С):=Х, (АС):=Х, (OV):=X, где Х=(0 или 1);(А)=В2Н, (R3)=99,Пример:ADDCA,R3 ;(C)=1;(A)=4CH, (R3)=99,;(C)=1, (AC)=0, (OV)=l2) Ассемблер:ADDC A,@Ri ; где i=0,l0011011i, где i=0,lКод:1 циклВремя:(А): = (А)+(С) + ((Ri))Алгоритм:(С):=Х, (АС):=Х, (0V):=X, где Х=(0 или 1);(A)=D5H.