kniga_mikroprotsessory
.pdf*запись «;(A)=55H, (DPTR)=1234H, в ВПД с=11H» означает, что до момента выполнения команды в аккумуляторе (А) содержится число 55Н, в регистре (DPTR)-число 1234H, в ячейке внешней памяти данных с адресом (1234H) содержится число 11H
**на данном этапе происходит выполнение команды (по нажатию клавиши F10)
***после выполнения команды контролируется результат (проверяется содержимое ячеек памяти) и сверяется с результатом, приведенным в примере
3.Содержание отчета
1.Назначение и особенности применения команд пересылки данных.
2.Систематизация команд пересылки данных по способу адресации.
3.Файл с результатами выполнения работы.
4.Контрольные вопросы:
1.Перечислите команды пересылки в пределах резидентского ЗУПД.
2.Перечислите команды пересылки за пределами резидентского ЗУПД.
3.Перечислите команды обмена.
4.Перечислите команды прямой и косвенной адресации.
62
Лабораторная работа №3
Тема: Программирование арифметических и логических операций,
битовых операций на языке ассемблер МК-51
Цель работы: изучение программирования арифметических и логических
операций микро-ЭВМ МК-51.
Указания по выполнению работы
1. Изучение команд арифметических и логических операций.
ADD A,Rn ;где n=0-7 |
0 0 1 0 1 r r r |
где rrrB=000B-111B |
|
|
|
Команда "сложение" складывает содержимое аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении переносов из разрядов 7
и 3 результата устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в
"0". Флаг переполнения OV устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет - из бита 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.
|
Алгоритм |
|
Пример |
||
|
|
|
|
|
|
|
|
|
|
;(A)=0C3H, (R6)=0AAH |
|
(A) (A)+(Rn), где n=0-7 |
|
|
|
||
(С) x, |
(OV) =x, |
(AC) =x, |
где |
ADD A,R6 ;(A)=6DH,(R6)=0AAH, |
|
x {0,1} |
|
|
|
;(AC)=0, (C)=1, (OV)=1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 0 1 0 0 1 1 i |
||
ADD A,@Ri ;где i {0,1} |
|
|
|
Команда "сложение" складывает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое
используемой ячейки не изменяется. Логика установки (сброса) флагов и время
63
выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм |
Пример |
|
|
(A) (A)+((Ri)), где i {0,1} |
;(A)=95H, (R1)=31H, |
(С) x, (OV) =x, (AC) =x, где x {0,1} |
;в РПД (31H)=4CH |
|
ADD A,@R1 ;(A)=0E1H, (C)=0, |
|
;(AC)=1, (OV)=0, (31H)=4CH |
|
|
ADD A,direct |
0 0 1 0 0 1 0 1 |
direct |
|
|
|
Команда "сложение" складывает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-
разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм |
Пример |
|
|
(A) (A)+(direct) |
;(A)=77H, (P1)=0FFH |
(С) x, (OV) =x, (AC) =x, где x {0,1} |
ADD A,P1 ;(A)=76H, |
|
;(AC)=1, (C)=1, (OV)=0 |
|
;(P1)=0FFH |
|
|
ADD A,#data8 |
0 0 1 0 0 1 0 0 |
data8 |
|
|
|
Команда "сложение" складывает содержимое аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A.
Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
64
Алгоритм |
Пример |
|
|
|
;(A)=09H |
(A) (A)+data8 |
|
(С) x, (OV) =x, (AC) =x, где x {0,1} |
ADD A,#0D3H ;(A)=0DCH, |
|
;(AC)=0, (C)=0, (OV)=0 |
|
|
ADDC A,Rn ;где n=0-7 |
0 0 1 1 1 r r r |
где rrrB=000B-111B. |
|
|
|
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса С и содержимое заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении переносов из разрядов 7
и 3 результата устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в
"0". Флаг переполнения OV устанавливается, если есть перенос из бита 6 и нет переноса из бита 7, или есть перенос из бита 7 и нет - из бита 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.
|
Алгоритм |
|
|
Пример |
||
|
|
|
|
|
||
(A) (A)+(C)+(Rn), где n=0-7 |
|
|
;(A)=0B2H, (R3)=99H, (C)=1 |
|||
(С) x, |
(OV) =x, |
(AC) =x, |
где |
ADDC A,R3 ;(A)=4CH,(R3)=99H, |
||
x {0,1} |
|
|
|
|
;(AC)=0, (C)=1, (OV)=1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 0 1 1 0 1 1 i |
||
ADDC A,@Ri ;где i {0,1} |
|
|
|
|
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат помещается в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
65
Алгоритм |
|
|
Пример |
|
|
|
|
|
|
|
|
|
|
|
|
;(A)=0D5H, (R0)=3AH, |
|
|
||
(A) (A)+(C)+((Ri)), где i |
{0,1} |
|
|
|
|
|
(С) x, (OV) =x, (AC) =x, где x {0,1} |
;в РПД (3AH)=1AH, (C)=1 |
|||||
|
|
|
ADDC A,@R0 ;(A)=0F0H, |
|||
|
|
|
;(AC)=1, (C)=0, (OV)=0, |
|
|
|
|
|
|
;(3AH)=1AH |
|
|
|
|
|
|
|
|
|
|
ADDC A,direct |
|
|
|
|
|
|
|
|
0 0 1 1 0 1 0 1 |
|
direct |
||
|
|
|
|
|
|
|
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и содержимое ячейки резидентной памяти данных (либо регистра специальных функций), 8-
разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм |
Пример |
|
|
(A) (A)+(C)+(direct) |
;(A)=11H, (C)=1, |
(С) x, (OV) x, (AC) x, |
;(DPH)=0DFH |
где x {0,1} |
ADDC A,DPH ;(A)=0F1H, |
|
;(AC)=1, (C)=0, (OV)=0, |
|
;(DPH)=0DFH |
|
|
ADDC A,#data8 |
0 0 1 1 0 1 0 0 |
data8 |
|
|
|
Команда "сложение с переносом" одновременно складывает содержимое аккумулятора A, содержимое флага переноса C и байт данных data8,
непосредственно указанный в команде. Результат размещается в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
66
Алгоритм
(A) (A)+(C)+data8
(С) x, (OV) x, (AC) x, где x {0,1}
ANL A,@Ri ;где i {0,1}
Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД),
адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
|
(A) (A) ((Ri)), где i {0,1} |
;(A)=0BCH, (R0)=35H, |
|
;в РПД (35H)=47H |
|
ANL A,@R0 ;(A)=04H, |
|
;в РПД (35H)=47H |
|
|
ANL A,direct |
0 1 0 1 0 1 0 1 |
direct |
|
|
|
Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого)
определяется символическим именем direct. Результат помещается в A.
Содержимое используемой ячейки или используемого регистра не изменяется.
Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
|
(A) (A) (direct) |
;(A)=0A3H, (PSW)=85H |
|
ANL A,PSW ;(A)=81H,(PSW)=85H |
|
|
67
ANL A,#data8 |
0 1 0 1 0 1 0 0 |
data8 |
|
|
|
Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде.
Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
|
Алгоритм |
|
|
Пример |
|
|
|
|
|
|
|
|
|
|
;(A)=36H |
|
|
(A) |
(A) data8 |
|
|
|
|
|
|
|
ANL A,#0DDH ;(A)=14H |
||
|
|
|
|
|
|
ANL direct,A |
|
|
|
||
0 1 0 1 0 0 1 0 |
direct |
||||
|
|
|
|
|
|
Команда "логическое И" выполняет поразрядную конъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого)
определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр.
Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
|
(direct) (direct) (A) |
;(A)=55H, (P2)=0AAH |
|
ANL P2,A ;(A)=55H,(P2)=00H |
|
|
ANL direct,#data8 |
0 1 0 1 0 0 1 1 |
direct |
data8 |
|
|
|
|
Команда "логическое И" выполняет поразрядную конъюнкцию байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-
разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
68
Алгоритм |
|
|
|
Пример |
||||
|
|
|
|
|
|
|
|
|
|
|
data8 |
|
;(P1)=0FFH |
|
|
||
(direct) (direct) |
|
|
|
|
|
|
||
|
|
|
|
|
ANL P1,#73H ;(P1)=73H |
|||
|
|
|
|
|
|
|
|
|
ANL C,bit |
|
|
|
|
|
|
|
|
|
|
|
1 0 0 0 0 0 1 0 |
|
bit |
|||
|
|
|
|
|
|
|
|
|
Команда "логическое И" выполняет конъюнкцию содержимого флага переноса
C с содержимым бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД)
или регистров специальных функций, допускающей побитовое обращение.
Результат помещается в С. Содержимое используемого бита не изменяется.
Команда на состояние других флагов не влияет и имеет время выполнения 2
цикла.
|
Алгоритм |
Пример |
|
|
|
|
|
;(C)=1, (P1[0])=0, |
(C) |
(C) (bit) |
|
|
|
;в РПД (24H)=0FH |
|
|
ANL C,P1.0 ;(C)=0, (P1[0])=0 |
|
|
ANL C,20H ;(C)=0, (24H)=0FH |
|
|
|
ANL C,/bit |
1 0 1 1 0 0 0 0 |
bit |
|
|
|
Команда "логическое И" выполняет конъюнкцию содержимого флага переноса
C с инвертированным значением бита из области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение, при этом содержимое используемого бита, 8-разрядный адрес которого определяется символическим именем bit, не изменяется. Результат помещается в С. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.
|
|
|
|
Алгоритм |
Пример |
|
|
|
|
||
|
|
(bit) |
;(C)=1, (AC)=0 |
||
(C) |
(C) |
|
|
|
ANL C,/AC ;(C)=1, (AC)=0 |
|
|
|
|
|
|
|
|
|
|
|
|
69
CJNE A,direct,addr |
1 0 1 1 0 1 0 1 |
direct |
rel |
Команда "сравнение и переход, если не равно" сравнивает содержимое аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого)
определяется символическим именем direct, и выполняет переход по адресу addr, если содержимое A не равно содержимому используемой ячейки или используемого регистра, в противном случае выполняется следующая команда.
Адрес перехода addr определяется при помощи сложения 8-битового числа rel (со знаком), размещенного в последнем байте команды, с содержимым счетчика команд PC после увеличения его на три. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Флаг переноса C сбрасывается в "0",
если содержимое A больше (равно) содержимого (содержимому) используемой ячейки или используемого регистра, в противном случае флаг устанавливается в "1". Команда не изменяет (A) и (direct) и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
|
|
|
|
если (direct) (A), то |
;(A)=97H, (P2)=0F0H, (C)=0, |
|
(PC) (PC)+3+rel и (C) 0 |
;(PC)=3FFH, MT3 соответству- |
|
если (direct) (A), то |
;ет адресу 41FH, rel=1DH |
|
(PC) (PC)+3+rel и (C) 1 |
CJNE A,P2,MT3 ;(C)=1, |
|
;(A)=97H, (P2)=0F0H, |
||
если (direct)=(A), то (PC) (PC)+3 и |
||
(C) 0 |
;(PC)=41FH |
|
|
||
|
|
CLR A |
1 1 1 0 0 1 0 0 |
|
|
Команда "сброс аккумулятора" сбрасывает (обнуляет) содержимое аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1
цикл.
70
Алгоритм |
Пример |
|
|
|
|
|
;(A)=6CH, (C)=0, (AC)=1 |
|
(A) 0 |
|
|
|
|
CLR A ;(A)=00H, (C)=0, (AC)=1 |
|
|
|
CLR C |
|
|
|
1 1 0 0 0 0 1 1 |
|
|
|
|
Команда "сброс флага переноса" сбрасывает (обнуляет) содержимое флага переноса C, на состояние других флагов не влияет и имеет время выполнения 1
цикл.
Алгоритм |
|
|
|
Пример |
||
|
|
|
|
|
|
|
(C) 0 |
|
;(C)=1 |
|
|
||
|
|
|
CLR C ;(C)=0 |
|
|
|
|
|
|
|
|
|
|
CLR bit |
|
|
|
|
|
|
|
1 1 0 0 0 0 1 0 |
|
bit |
|||
|
|
|
|
|
|
|
Команда "сброс бита" сбрасывает (обнуляет) содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций,
допускающей побитовое обращение. Команда на состояние не используемых флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм
(bit) 0
CPL A
Команда "инверсия аккумулятора" инвертирует содержимое каждого бита аккумулятора A, на состояние флагов не влияет и имеет время выполнения 1
цикл.
71