
Kharakhnin / Аналоговые и цифр. устройства авт. пособие
.pdf;После выполнения команды:
;(SP) =09H, (PC) = 01FFH, (ОЗУ[08])= 03Н, (ОЗУ[09])=04Н.
Команда LJMP <addr>.
Команда “длинный переход” выполняет безусловный переход по указанному адресу. Адрес перехода может находиться в любом месте 64 - килобайтного пространства. На флаги команда не влияет.
Алгоритм: (PC) <addr[15-0]>.
Команда MOV <байт-назначения>,<байт-источника>.
Команда "переслать переменную-байт" пересылает переменнуюбайт, указанную во втором операнде, в ячейку, указанную в первом операнде. Содержимое байта источника не изменяется. Эта команда на флаги и другие регистры не влияет. Команда MOV допускает 15 комбинаций адресации байта-источника и байта-назначения.
1. MOV A,Ri , где Ri - один из регистров R0 - R7, (A) (Ri).
Пример: ;До выполнения команды: (A)=EEH, (R5) = 3FH. MOV A,R5 ;
;После выполнения команды: (A)=3FH, (R5) = 3FH.
2.MOV A,<direct>, где direct – прямоадресуемый байт, который может быть ячейкой внутреннего ОЗУ (00Н - 7FH) или регистром спе-
циальных функций, (A) <direct>.
Примеры: ;До выполнения команд: (Р1)=0FFH, (ОЗУ[2EH])=5BH, (PSW)=01H.
MOV A,P1 ;пересылка состояния порта Р1 в аккумулятор, (A) =0FFH.
MOV A,2EH ; переслать в А содержимое 2ЕН ячейки ОЗУ,
(A)=5BH.
MOV A,PSW;переслать в А содержимое регистра состояния PSW, (A)=01H.
;После выполнения команд:(A)=01H, (Р1)=0FFH,(ОЗУ[2EH])=5BH, (PSW)=01H.
3. MOV A,@Ri , где Ri – один из регистров R0 или R1, (A) ((Ri)).
Пример: ;До выполнения команд: (ОЗУ[20H])=01H, (ОЗУ[21H])=02H, (R0)=20H, (R1) = 21H.
MOV A,@R0 ; (А) = 01Н.
61
|
MOV A,@R1 ; (А) = 02Н. |
|
|
|
||
|
;После выполнения |
команд: |
(А)=02Н, |
: |
(ОЗУ[20H])=01H, |
|
(ОЗУ[21H])=02H. |
|
|
|
|
||
4. |
MOV A,#<data> , |
(А) <data>. |
|
|
||
Пример: ; До выполнения команды: (А)=0ААН. |
|
|
||||
|
|
MOV A,#11H ; |
|
|
|
|
|
|
; После выполнения команды: (А) =11Н. |
|
|||
5. |
MOV Ri,A , где Ri - один из регистров R0 - R7, |
(Ri) (A). |
||||
Пример: ; До выполнения команды: (А)=5EH, (R7)= 34H. |
||||||
|
|
MOV R7,A ; |
|
|
|
|
|
|
; После выполнения команды: (А)=5ЕН, (R7) =5EH. |
||||
6. |
MOV Ri ,<direct> , |
(Ri) <direct>. |
|
|||
Пример: |
;До выполнения команды: (Р3) =0FH, (R3) =0AAH. |
|||||
|
MOV R3,P3 ; |
|
|
|
|
|
|
|
; После выполнения команды: (Р3)=0FH, (R3)=0FH. |
||||
7. |
MOV Ri ,#<data> , |
(Ri) |
<data>. |
|
||
Пример: |
;До выполнения команды: (R6) = 00H |
|
|
|||
|
MOV R6,#45H ; |
|
|
|
|
|
|
|
;После выполнения команды: (R6) =45H. |
|
|||
8. |
MOV <direct>, A , |
<direct> (A). |
|
|||
Пример: |
; До выполнения команды: (А)=12Н, (Р2) = 0FFH. |
|||||
|
|
MOV P2,A ; |
|
|
|
|
|
|
;После выполнения команды: (А)=12Н, |
(Р2) = 12H. |
|||
9. |
MOV <direct>,Ri , |
<direct> (Ri). |
|
|||
Пример: |
; До выполнения команды: (TLO)=61H, (R5)=0AEH. |
|||||
|
|
MOV TLO,R5 ; |
|
|
|
|
|
|
; После выполнения команды: (TLO)=0АЕH, (R5)=0AEH. |
||||
10. MOV <direct>, <direct>, <direct> <direct>. |
||||||
Пример: |
; До выполнения команды: (P2)=00H, (P1)= 22H. |
|||||
|
|
MOV P2,P1 ; |
|
|
|
|
|
|
; После выполнения команды: (P2)=22H, (P1)= 22H. |
||||
|
|
|
62 |
|
|
|
11. MOV <direct>,@Ri , |
<direct> ((Ri)). |
|
|
||||
Пример: |
;До выполнения |
команды: (ОЗУ[70H])=5AH, |
(R1)=70H, |
||||
(TH0)=23H. |
|
|
|
|
|
|
|
MOV TH0,@R1 |
; |
|
|
|
|||
;После выполнения команды: (ОЗУ[70H])=5AH, |
(R1)=70H, |
||||||
(TH0)=5AH. |
|
|
|
|
|
|
|
12. MOV <direct>,#<data>, |
<direct> <data>. |
|
|||||
Пример: ;До выполнения команды: (P0) =55H. |
|
|
|||||
MOV P0,#0F0H ; |
|
|
|
|
|
||
; После выполнения команды: (Р0)=0F0H. |
|
||||||
13. MOV @Ri ,A , |
((Ri)) A. |
|
|
|
|||
Пример: |
;До |
выполнения |
команды: |
(A)=19H, |
(R0)=40H, |
||
(ОЗУ[40H])=99H. |
|
|
|
|
|
|
|
MOV @R0,A ; |
|
|
|
|
|
||
;После |
выполнения |
команды: |
(A)=19H, |
(R0)=40H, |
|||
(ОЗУ[40H])=19H. |
|
|
|
|
|
|
|
14. MOV |
@Ri ,<direct> , |
((Ri)) <direct>. |
|
|
|||
Пример: |
; До выполнения команды: (TL1)=0B1H, (ОЗУ[19H])=02H, |
||||||
(R1)=19H. |
|
|
|
|
|
|
|
MOV @R1,TL1 ;
;После выполнения команды: (TL1)=0B1H, (ОЗУ[19H])=0B1H, (R1)=19H.
15. MOV @Ri , #<data> , |
((Ri)) <data>. |
|
Пример: ;До выполнения команды: (ОЗУ[7AH]) = 13H, (R0)=7AH. |
||
MOV @R0,#0EEH ; |
|
|
;После выполнения команды: (ОЗУ[7AH]) = 0EEH, (R0)=7AH. |
||
Команда |
MOV С, <bit >. |
|
Команда |
“ переслать бит данных” пересылает значение прямоадресу- |
|
емого бита в разряд переноса С, который указан в первом операнде. |
||
Алгоритм: |
(С) (bit). |
|
Команда |
MOV <bit>, C. |
|
Команда “ переслать бит данных” пересылает значение бита переноса С в прямоадресуемый бит, который указан в первом операнде.
63
Алгоритм: (bit) (C).
Пример: ;До выполнения команд:(P3.0)=0, (ACC.5)=0, (ОЗУ[2CH.3])=0,(С)=1.
MOV |
P3.0,C ; |
MOV |
ACC.5,C ; |
MOV |
2CH.3,C ; |
; После выполнения команд: (P3.0)=1, (ACC.5)=1,(ОЗУ[2CH.3])=1,(С)=1.
Команда MOV DPTR,#<data>.
Команда “загрузить указатель данных 16 - битовой константой” загружает указатель регистр DPTR шестнадцатиразрядной константой, указанной в 2 и 3 байтах команды.
Алгоритм: (DPTR) (data), (DPL) (data[7-0]), (DPH) (da- ta[15-8]).
Пример: ;До выполнения команды: (DPTR) = 0200H. MOV DPTR,#0300H ;
; После выполнения команды: (DPTR) = 0300H.
Команда MOVC A,@A+DPTR.
Команда “переслать байт из памяти программ ” загружает в аккумулятор байт кода или константу из ПЗУ. Адрес считываемого байта вычисляется как сумма восьмибитного содержимого аккумулятора и шестнадцатиразрядного содержимого DPTR. На флаги команда не влияет.
Алгоритм: (A) ((A) + (DPTR)).
Пример: ;До выполнения команды: (A) = 0BH, (DPTR) = 0300H, (ПЗУ[030BH]) = 23H.
MOVC A,@A+DPTR ;
;После выполнения команды: (A) = 23H, (DPL)=0BH, (DPH)=03H.
Команда MOVC A,@A + PC.
Команда “переслать байт из памяти программ ” загружает в аккумулятор байт кода или константу из ПЗУ. Адрес считываемого байта вычисляется как сумма восьмибитного содержимого аккумулятора и шестнадцатиразрядного содержимого счетчика команд. На флаги команда не влияет.
Алгоритм: (A) ((A) + (PC)).
64
Команда MOVX <байт приемника>,<байт источника>.
Команда “переслать во внешнюю память ( из внешней памяти ) данных (ОЗУ) ” пересылает данные между аккумулятором и байтом внешней памяти данных. Имеются два типа команд, которые обеспечивают восьмибитовый или шестнадцатибитовый косвенный адрес при обращении к ячейке внешнего ОЗУ. В первом случае адрес указывается в регистрах указателях R0 или R1, адрес выставляется в мультиплексном порте Р0, микросхема внешнего ОЗУ должна иметь информационную емкость не более 256 байт. Во втором случае адрес внешней ячейки памяти данных указывается в DPTR и выставляется в двух портах в Р0 (младший байт) и в Р2 (старший байт). В этом случае максимальный объем адресуемой памяти может быть 64 кБайта.
Рассмотрим имеющиеся команды и алгоритмы:
1. MOVX |
A,@Ri , где Ri или R0 или R1 (A) (внешнее RAM((Ri))). |
||
2. |
MOVX |
A,@DPTR , |
(A) (внешнее RAM ((DPTR))). |
3. |
MOVX |
@Ri ,A , |
(внешнее RAM((Ri))) (A). |
4. |
MOVX |
@DPTR,A , |
(внешнее RAM((DPTR))) (A). |
Примеры: ;До выполнения команды:
; (DPTR)=0300H, (внешнее RAM(0300H))=4CH, (A) =00. MOVX A,@DPTR ;
;После выполнения команды:
;(A) = 4CH.
Команда MUL AB.
Команда “умножение” умножает восьмибитное целое без знака в аккумуляторе на восьмибитное целое без знака в регистре В. Старший байт 16-битного произведения помещается в регистр В, а младший байт в аккумулятор. Если результат произведения больше 255, то устанавливается флаг переполнения OV, в противном случае OV = 0. Флаг переноса С сбрасывается всегда.
Алгоритм: (А[7-0]) (A) *(B), (B[15-8]) (A) * (B).
Пример: ; До выполнения команды:(А)=14H(20DEC), (B)=32H(50DEC).
MUL AB ;
;После выполнения команды:(A)=0E8H, (B)=03H. ; (03E8H) = (1000DEC).
65
Команда NOP.
Команда “нет операции” не выполняет никаких операций, не влияет на флаги. Команда используется для создания задержек, NOP выполняется за 1 мкс ( при fBQ=12 МГц).
Алгоритм: (PC) (PC) + 1.
Команда ORL <байт назначения>,< байт источника>.
Команда “ логическое ИЛИ ” для переменных байтов выполняет операцию логического “ИЛИ” над битами указанных переменных байтов, записывая результат в байт назначения. Команда не влияет на флаги.
Имеются следующие команды:
1. ORL A,Ri; (A) (A) (Ri), где Ri – один из регистров R0 – R7.
Пример: ; До выполнения команды
; (A) = 0FEH, (R6) = 0C5H. ORL A,R6 ;
;После выполнения команды
;(A) = 0FFH, (R6) =0C5H
2.ORL A,<direct>; (A) (A) (<direct>), где direct – прямоадресуе-
мый байт, который может быть ячейкой внутреннего ОЗУ (00Н-7FH) или регистром специальных функций.
Пример: ; До выполнения команды
; (A) = 0A3H, (P1) = 86H. ORL A,P1 ;
;После выполнения команды
;(A) = 0A7H, (R6) =86H
3. ORL <direct>,A ; (<direct>) (<direct>) (A).
Пример: ; До выполнения команды
; (A) = 0FEH, (P1) = 0C5H. ORL P1,A ;
; После выполнения команды
; (A) = 0FEH, (P1) =0C5H
4. ORL <direct>,#<data>; (<direct>) (<direct>) |
(<data>), где |
data – байтовое непосредственное данное, входящее |
в код операции |
(КОП). |
|
Пример: ; До выполнения команды |
|
; (P1) = 0F0H. |
|
ORL P1,#73H ; |
|
66 |
|
;После выполнения команды
;(P1) = 0F3H.
5. ORL A,#<data>; |
(A) (A) (<data>). |
Пример: ; До выполнения команды |
|
; (A) = 00H. |
|
ORL A,#0DDH |
; |
;После выполнения команды
;(A) = 0DDH.
6. ORL A,@Ri ; |
(A) (A) ((Ri)). |
|
|
|
|
|||
Пример: |
; |
До |
выполнения команды: |
(A) |
= 07H, |
(R1) |
=21H, |
|
(ОЗУ[21H])=0FFH. |
|
|
|
|
|
|
||
ORL A,@R1 ; |
|
|
|
|
|
|
||
;После |
выполнения команды: |
(A) |
= |
0FFH, |
(R1) |
=21H, |
||
(ОЗУ[21H])=0FFH. |
|
|
|
|
|
|
||
Команда |
ORL C,< бит источника >. |
|
|
|
|
|||
Команда |
“ логическое “ИЛИ” для |
переменных битов” выполняет |
||||||
операцию логического “ИЛИ” над указанными битами. |
|
|
||||||
Алгоритм: |
|
(С) (С) (<bit>), где bit – прямоадресуемый бит |
||||||
источника. |
|
|
|
|
|
|
|
|
Команда ORL C,/<bit>.
Команда “ логическое “ИЛИ” для переменных битов” выполняет операцию логического “ИЛИ” над битом переноса и инверсией прямоадресуемого бита. Сам бит источника не изменяется.
Алгоритм: (С) (С) /(<bit>), где bit – прямоадресуемый бит источника.
Пример:
ORL
Команда POP <direct>.
Команда “ чтение из стека ” считывает содержимое ячейки ОЗУ, которая адресуется с помощью указателя стека, в прямоадресуемый байт, при этом указатель стека уменьшается на единицу. Команда на флаги не воздействует.
Алгоритм: |
<direct> ((SP)), |
(SP) (SP) – 1. |
|
67 |
|
Пример: ; До выполнения команд: (SP)=0BH, (TL0)=0ABH,
(TH0)=0FFH.
; (ОЗУ[0BH])=55H, (ОЗУ[0AH])=0AAH. POP TL0 ;Загрузить из стека TL0, POP TH0 ;Загрузить из стека TH0.
; После выполнения команд: (SP)=09H, (TL0)=55H,
(TH0)=0AAH.
; (ОЗУ[0BH])=55H, (ОЗУ[0AH])=0AAH.
Команда PUSH <direct>.
Команда “ запись в стек ” увеличивает указатель стека на единицу. После этого содержимое указанного байта копируется в ячейку внутреннего ОЗУ, адресуемой посредством указателя стека. На флаги команда не влияет.
Алгоритм: (SP) (SP) + 1, ((SP)) <direct>.
Пример: ; До выполнения команд: (SP)=07H, (DPTR)=030AH. PUSH DPL ;
PUSH DPH ;
;После выполнения команд: (SP)=09H,
(DPTR)=030AH,
; (ОЗУ[08H])=0AH, (ОЗУ[09H])=03H.
Команда RET.
Команда “ возврат из подпрограммы ” последовательно выгружает старший и младший байты счетчика команд из стека, уменьшая указатель стека на 2. Выполнение основной программы продолжается по адресу команды, следующей за ACALL или LCALL. На флаги команда не влияет.
Алгоритм: (PC[15 - 8]) ((SP)), (SP) (SP) – 1, (PC[7 - 0]) ((SP)), (SP) (SP) – 1.
Команда RETI.
Команда “возврат из подпрограммы обслуживания прерывания” выгружает старший и младший байты счетчика команд из стека и устанавливает логику прерываний, разрешая прием других прерываний с уровнем приоритета, равным уровню приоритета только что обработанного прерывания. Указатель стека уменьшается на 2. PSW не восстанавлива-
68
ется автоматически. Выполнение основной программы продолжается с команды, следующей за командой, на которой произошел запрос на прерывание системы. Если при выполнении команды RETI обнаружено прерывание с таким же или меньшим уровнем приоритета, то одна команда основной программы успевает выполниться до обработки такого прерывания.
Алгоритм: (PC[15 - 8]) ((SP)), (SP) (SP) – 1, (PC[7 - 0]) ((SP)), (SP) (SP) – 1.
Команда RL A.
Команда “ сдвиг содержимого аккумулятора влево ” сдвигает 8 бит аккумулятора на один бит влево, 7 - й бит посылается на место бита 0. На флаги эта команда не влияет.
Алгоритм: (A[N+1]) (A[N]), где N =0 - 6, (A[0]) (A[7]).
Пример: ; До выполнения команды: (А) =10000001B=81H. RL A;
; После выполнения команды: (A)=00000011B=03H.
Команда RLC A.
Команда “ сдвиг содержимого аккумулятора влево через флаг переноса С ” сдвигает восемь бит аккумулятора и флаг переноса влево на один бит. Содержимое флага переноса помещается на место бита 0 аккумулятора, а содержимое бита 7 переносится в бит С. На другие флаги эта команда не влияет.
Алгоритм: (A[N+1]) (A[N]), где N = 0 – 6, (A[0]) (C),
(C) (A[7]).
Пример: ; До выполнения команды: (A)=01000111B=47H, (C)=1. RLC A ;
; После выполнения команды: (A)=10001111B=8FH, (C)=0.
Команда RR A.
Команда “сдвиг содержимого аккумулятора вправо ” сдвигает вправо на один бит все восемь бит аккумулятора. Содержимое бита 0 помещается на место бита 7. На флаги эта команда не влияет.
Алгоритм: (A[N]) (A[N+1]), где N=0 – 6.
69
(A[7]) (A[0]).
Пример: ; До выполнения команды: (A)=11010110B=0D6H, (C)=1.
RRA ;
;После выполнения команды: (A)=01101011B=6BH, (C)=1.
Команда RRC A.
Команда “ сдвиг содержимого аккумулятора вправо через флаг переноса ” сдвигает восемь бит аккумулятора и флаг переноса на один бит вправо. Бит 0 перемещается в флаг переноса С, а содержимое флага С помещается в бит 7. На флаги эта команда не влияет.
Алгоритм: (A[N]) (A[N+1]), где N = 0 – 6, (A[7]) (C),
(C) (A[0]).
Пример: ; До выполнения команды: (A)=10010101B=95H, (C)=0.
RRС A ;
; После выполнения команды: (A)=01001010B=4АH, (C)=1.
Команда SETB <bit>.
Команда “установить бит” устанавливает указанный бит в “1”.
1. |
SETB |
C, |
(C) 1. |
2. |
SETB <bit>, |
где <bit> - прямоадресуемый бит, (bit) 1. |
Примеры: ; До выполнения команд: (С)=0, (Р3.4)=0, (20Н.2)=0,
(A)=00.
SETB ACC.1; SETB C; SETB P3.4; SETB 20H.2;
; После выполнения команд: (С)=1, (Р3.4)=1, (20Н.2)=1,
(A)=02H.
Команда SJMP <addr>.
Команда “ короткий безусловный переход по адресу” выполняет ветвление в программе по указанному адресу. Адрес ветвления вычисляется сложением смещения со знаком во втором байте команды с содержимым счетчика команд после прибавления к нему 2. Таким образом, адрес перехода должен находиться в диапазоне от 128 байт, предшествующих команде, до 127 байт, следующих за ней.
Алгоритм: (PC) <addr>.
70