kniga_mikroprotsessory
.pdfАлгоритм |
Пример |
|
|
|
|
(A[M]) (A[M+1]), где M=0-6 |
;(A)=85H, (C)=1 |
|
(A[7]) (A[0]) |
RR A |
|
|
|
RR A ;(A)=61H, (C)=1 |
|
|
|
RRC A |
|
|
|
0 0 0 1 0 0 1 1 |
|
|
|
|
Команда "сдвиг аккумулятора вправо через флаг переноса" сдвигает содержимое аккумулятора A на один бит вправо, причем содержимое бита 0
аккумулятора пересылается во флаг переноса C, а содержимое C - в бит 7
аккумулятора. Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
|
(A[M]) (A[M+1]), где M=0-6 |
;(A)=85H, (C)=0 |
(A[7]) (С), (С) (A[0]) |
RRC A ;(A)=42H, (C)=1 |
|
|
SETB C |
1 1 0 1 0 0 1 1 |
|
|
Команда "установить бит" устанавливает содержимое флага переноса C в "1".
Команда на состояние других флагов не влияет и имеет время выполнения 1
цикл.
Алгоритм |
|
|
|
Пример |
|
|
|
|
|
|
|
(C) 1 |
|
;(C)=0 |
|
|
|
|
|
SETB C ;(C)=1 |
|
|
|
|
|
|
|
|
|
SETB bit |
|
|
|
|
|
1 1 0 1 0 0 1 0 |
|
bit |
|||
|
|
|
|
|
|
Команда "установить бит" устанавливает в "1" содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или регистров специальных функций, 82
допускающей побитовое обращение. Команда имеет время выполнения 1 цикл и на состояние флагов не влияет, за исключением случая, когда флаг является операндом команды.
Алгоритм |
Пример |
|
|
(bit) 1 |
;(P2)=38H |
|
SETB P2.0 ;(P2)=39H |
|
|
SUBB A,Rn ;где n=0-7 |
1 0 0 1 1 r r r |
где rrrB=000B-111B. |
|
|
|
Команда "вычитание с заемом" вычитает содержимое заданного регистра Rn
выбранного банка вместе с содержимым флага переноса С из содержимого аккумулятора A, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении заема в разрядах 7 и 3 аккумулятора устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC
соответственно, в противном случае эти флаги сбрасываются в "0".
Содержимое флага переполнения OV устанавливается, если есть заем в бите 6 и
нет заема в бите 7, или есть заем в бите 7 и нет - в бите 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.
|
Алгоритм |
|
Пример |
||
|
|
|
|
||
(A) (A)-(C)-(Rn), где n=0-7 |
|
;(A)=0C9H, (R2)=54H, (C)=1 |
|||
(С) x, |
(OV) =x, |
(AC) =x, |
где |
SUBB A,R2 ;(A)=74H,(R2)=54H, |
|
x {0,1} |
|
|
|
;(AC)=0, (C)=0, (OV)=1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 0 0 1 0 1 1 i |
||
SUBB A,@Ri ;где i {0,1} |
|
|
|
Команда "вычитание с заемом" вычитает содержимое флага переноса С вместе с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, из содержимого аккумулятора A, помещая результат в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же,
как у рассмотренной выше команды с аналогичной мнемоникой.
83
Алгоритм |
|
|
Пример |
||
|
|
|
|
|
|
(A) (A)-(C)-((Ri)), где i {0,1} |
|
;(A)=49H, (R0)=3AH, |
|||
(С) x, (OV) =x, (AC) =x, где x {0,1} |
;в РПД (3AH)=68H, (C)=1 |
||||
|
|
|
SUBB A,@R0 ;(A)=0E0H, |
||
|
|
|
;(AC)=0, (C)=1, (OV)=0 |
||
|
|
|
|
|
|
SUBB A,direct |
|
|
|
|
|
|
1 0 0 1 0 1 0 1 |
direct |
|||
|
|
|
|
|
|
Команда "вычитание с заемом" вычитает из содержимого аккумулятора A
содержимое флага переноса С вместе с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
|
Алгоритм |
|
|
Пример |
||
|
|
|
|
|
|
|
(A) (A)-(C)-(direct) |
|
|
|
;(A)=97H, (C)=0, (B)=25H |
||
(С) x, |
(OV) =x, |
(AC) =x, |
где |
SUBB A,B ;(A)=72H, (B)=25H, |
||
x {0,1} |
|
|
|
|
;(AC)=0, (C)=0, (OV)=1 |
|
|
|
|
|
|
|
|
SUBB A,#data8 |
|
|
|
|
||
|
|
1 0 0 1 0 1 0 0 |
data8 |
|||
|
|
|
|
|
|
|
Команда "вычитание с заемом" вычитает содержимое флага переноса С вместе с байтом данных data8, непосредственно указанным в команде, из содержимого аккумулятора A, помещая результат в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.
Алгоритм |
Пример |
|
|
84
(A) (A)-(C)-data8 |
;(A)=0BEH, (C)=0 |
||
(С) x, (OV) =x, (AC) =x, где x {0,1} |
SUBB A,#3FH ;(A)=7FH, |
||
|
|
;(AC)=1, (C)=0, (OV)=1 |
|
|
|
|
|
SWAP A |
|
|
|
|
1 1 0 0 0 1 0 0 |
|
|
|
|
|
|
Команда "обмен тетрадой" осуществляет обмен содержимым младших четырех и старших четырех битов аккумулятора A. Команда на флаги не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
|
(A[3-0]) (A[7-4]) |
;(A)=49H |
(A[7-4]) (A[3-0]) |
SWAP A ;(A)=94H |
|
|
XCH A,Rn ;где n=0-7 |
1 1 0 0 1 r r r |
где rrrB=000B-111B. |
|
|
|
Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с
содержимым заданного регистра Rn выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
|
(A) (Rn), где n=0-7 |
;(A)=0FAH, (R6)=93H |
(Rn) (A) |
XCH A,R6 ;(A)=93H, (R6)=0FAH |
|
|
XCH A,@Ri ;где i {0,1}
Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с
содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
|
(A) ((Ri)), где i {0,1} |
;(A)=0FDH, (R1)=30H, |
((Ri)) (A) |
;в РПД (30H)=17H |
|
XCH A,@R1 ;(A)=17H, (R1)=30H, |
|
|
85
;в РПД (30H)=0FDH
XCH A,direct |
1 1 0 0 0 1 0 1 |
direct |
|
|
|
Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с
содержимым ячейки, адрес которой определяется символическим именем direct
в области резидентной памяти данных или в среде регистров специальных функций. Команда на состояние флагов не влияет и имеет время выполнения 1
цикл.
Алгоритм |
Пример |
||
|
|
|
|
|
;(A)=24H, (DPL)=3DH |
||
(A) (direct) |
|
|
|
(direct) (A) |
XCH A,DPL ;(A)=3DH, |
||
|
|
;(DPL)=24H |
|
|
|
|
|
|
|
|
|
|
|
1 1 0 1 0 1 1 i |
|
XCHD A,@Ri ;где i {0,1} |
|
|
|
Команда "обмен тетрадой" выполняет обмен содержимого младшей тетрады
(биты 3-0) аккумулятора A с содержимым младшей тетрады ячейки резидентной памяти данных (РПД), при этом содержимое старших тетрад A и
используемой ячейки, адресуемой содержимым заданного регистра Ri
выбранного банка, не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
|
|
Пример |
||
|
|
|
|
|
|
(A[3-0]) ((Ri))[3-0], где i {0,1} |
|
;(A)=0FDH, (R1)=30H, |
|||
((Ri))[3-0] (A[3-0]) |
|
;в РПД (30H)=17H |
|||
|
|
|
XCHD A,@R1 ;в РПД (30H)=1DH, |
||
|
|
|
;(A)=0F7H, (R1)=30H |
||
|
|
|
|
|
|
XRL A,Rn ;где n=0-7 |
|
|
|
где rrrB=000B-111B. |
|
|
0 1 1 0 1 r r r |
|
|||
|
|
|
|
|
|
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым заданного
86
регистра Rn выбранного банка, помещая результат в A. При этом содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм
(A) (A) (Rn), где n=0-7
XRL A,@Ri ;где i {0,1} |
0 1 1 0 0 1 1 i |
|
|
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
|
|
Алгоритм |
|
|
Пример |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
;(A)=22H, (R0)=55H, |
|
|
||
(A) |
(A) |
((Ri)), где i {0,1} |
|
|
|
|
|
|
|
|
|
|
|
;в РПД (55H)=33H |
|
|
|
|
|
|
|
|
XRL A,@R0 ;(A)=11H, |
|||
|
|
|
|
|
;(R0)=55H, в РПД (55H)=33H |
|||
|
|
|
|
|
|
|
||
XRL A,direct |
|
|
|
|
|
|||
|
0 1 1 0 0 1 0 1 |
|
direct |
|||||
|
|
|
|
|
|
|
|
|
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-
разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
Пример |
|
|
87
(A) (A) (direct) |
;(A)=23H, (PSW)=34H |
|
XRL A,PSW ;(A)=17H, (PSW)=34H |
|
|
XRL A,#data8 |
0 1 1 0 0 1 0 0 |
data8 |
|
|
|
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с байтом данных data8,
непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм |
|
|
Пример |
|
|
|
|
|
|
(A) (A) data8 |
|
;(A)=36H |
|
|
|
|
XRL A,#22H ;(A)=14H |
||
|
|
|
|
|
XRL direct,A |
|
|
|
|
0 1 1 0 0 0 1 0 |
direct |
|||
|
|
|
|
|
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-
разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.
Алгоритм
(direct) (A) (direct)
XRL direct,#data8 |
0 1 1 0 0 0 1 1 |
direct |
data8 |
|
|
|
|
Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется
88
символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.
Алгоритм |
Пример |
|
|
(direct) (direct) data8 |
;(P1)=0FFH |
|
XRL P1,#11H ;(P1)=0EEH |
|
|
2.Задание на лабораторную работу.
1.Изучить группы команд арифметических и логических операций
2.Запустить программу AVSIM
3.Используя программу симулятора проверить выполнение команд,
приведенных в примерах, убедится в правильности их выполнения.
4. По заданию преподавателя составить одну из программ:
-суммирование многобайтных чисел;
-вычитание многобайтных чисел;
-перемножение однобайтовых чисел;
-деление многобайтного целочисленного числа на однобайтное.
Ввести программу в поле команд программы симулятора, проверить работу программы в пошаговом режиме, оценить результаты вычисления.
3.Содержание отчета
1.Результаты выполнения команд.
2.Ассемблерный листинг программы.
3.Результат выполнения программы.
4.Контрольные вопросы
1.Состав группы команд арифметических операций.
2.Состав группы команд логических операций.
3.Представление числа в дополнительном коде.
89
4.Алгоритм суммирования многобайтных чисел.
5.Алгоритм вычитания многобайтных чисел.
6.Алгоритм умножения многобайтных чисел.
7.Алгоритм деления многобайтных чисел.
90
Лабораторная работа №4
Тема: Программирование операций передачи управления, операций работы со стеком
Цель работы: изучение программирования микро-ЭВМ МК-51 с
использованием группы команд ветвления, передачи управления и команд
работы со стеком.
Указания по выполнению работы
1.Изучение команд передачи управления и работы со стеком
ACALL addr11 |
addr11[10-8] 1 0 0 0 1 |
addr11[7-0] |
|
|
|
Команда "абсолютный вызов подпрограммы" вызывает безусловно подпрограмму, размещенную по адресу addr11. При этом содержимое счетчика команд PC увеличивается на 2 для получения адреса следующей команды,
после чего полученное 16-разрядное значение PC помещается в стек, и
содержимое указателя стека SP также увеличивается на 2. Адрес перехода образуется с помощью конкатенации (сцепления) 5-ти старших бит увеличенного содержимого счетчика команд PC, содержимого 7-5 битов старшего байта команды и содержимого второго байта команды. Адрес перехода и указанная команда должны находиться внутри одной страницы памяти программ (ПП) объемом 2 Кбайт, определяемой содержимым пяти старших бит PC. Время выполнения команды 2 цикла.
Алгоритм |
Пример |
|
(PC) (PC)+2, (SP) (SP)+1 |
;(SP)=07H, (PC)=28DH, |
|
((SP)) (PC[7-0]), (SP) (SP)+1 |
;MT1 соответствует адресу ;345H в |
|
((SP)) (PC[15-8]) |
ПП |
|
(PC[10-0]) addr11[10-8] addr11[7-0], |
ACALL MT1 ;(PC)=345H, |
|
где есть знак конкатенации |
;(SP)=09H, |
|
;в РПД (09H)=02H, (08H)=8FH |
||
|
91