Автор работы: Пользователь скрыл имя, 12 Июня 2015 в 10:47, практическая работа
Цель работы: Изучить систему команд микроконтроллеров серии MCS51, способы адресации операндов в командах и получить практические навыки в применении команд при разработке программного обеспечения.
Практическая работа №2
Тема работы: Изучение системы команд в микроконтроллерах серии MCS51. Изучение способов адресации.
Цель работы: Изучить систему команд микроконтроллеров серии MCS51, способы адресации операндов в командах и получить практические навыки в применении команд при разработке программного обеспечения.
Теоретические сведения.
Команда микропроцессора представляется машинным кодом . Для выполнения команды микропроцессор всегда выполняет определенную последовательность действий:
Написание программного обеспечения в машинных кодах довольно трудоемкий процесс,
поэтому для упрощения создан язык программирования – Assembler. В языке Assembler применяется мнемоническое обозначение команд (машинных кодов) микропроцессора. Мнемонические обозначения представляют собой несколько символов (как правило 3 – 4 буквы) от сокращенного названия операции (функции), выполняемой микропроцессором при выполнении данной команды. Команда, зависимости от выполняемой ей функции, может в своем составе иметь операнды. Таким образом, команда может быть без операндов или иметь один или несколько операндов (обычно количество операндов от 1-го до 3-х).
Применительно к микроконтроллерам серии MCS-51 система команд имеет 42 мнемонических обозначения команд для реализации 33 функций. Полный перечень мнемонического обозначения команд микроконтроллеров серии MCS-51 приведен в приложении А. В машинном коде команды занимают один, два или три байта и выполняются за один или два машинных цикла (команды умножения и деления – четыре). Синтаксис большинства команд языка Assembler состоит из мнемонического обозначения функции , вслед за которым идут операнды, указывающие методы адресации и типы данных. Различные типы данных или режимы адресации определяются указанными операндами, а не изменениями мнемонических обозначений.
Способы адресации операндов-источников:
Регистровая адресация.
Регистровая адресация используется для обращения к восьми регистрам общего назначения (текущего банка регистров общего назначения). Следует отметить, что обращение к этим регистрам может быть осуществлено с использованием прямой адресации и косвенно-регистровой адресации (как к обычным ячейкам внутренней памяти данных).
Регистровая адресация также используется для обращения к регистровой паре AB, регистрам A, B, DPTR и к флагу переноса С. Использование регистровой адресации позволяет получить двухбайтовый эквивалент трехбайтовых команд прямой адресации.
1
Прямая адресация.
Прямая байтовая адресация используется для обращения к внутренней памяти данных и к регистрам специальных функций.
Прямая битовая адресация используется для обращения к 128-ми битам в битовой области внутренней памяти данных и к отдельно адресуемым битам в регистрах специальных функций. Старший бит прямого адреса определяет обращение к битовой области внутренней памяти данных или к отдельно адресуемым битам в регистрах специальных функций.
Косвенно-регистровая адресация.
Косвенно -регистровая адресация используется для обращения к ячейкам внутренней памяти данных. В качестве указателей могут использоваться регистры R0, R1 текущего банка регистров общего назначения.
При выполнении команд PUSH и POP (запись в стек и чтение из стека) в качестве указателя используется регистр SP – указатель стека.
Косвенно-регистровая адресация также используется для обращения к ячейкам внешней памяти данных. Возможны два варианта организации косвенно -регистровой адресации к внешней памяти данных. Использование первого или второго способа определяется схемным решением подключения внешней памяти данных к микроконтроллеру.
В первом варианте – шина адреса внешней памяти данных подключена к портам P0, P2, что обеспечивает доступ ко всему адресному пространству внешней памяти данных. В этом случае в качестве указателя может использоваться регистр DPTR, который имеет разрядность 16бит. Это позволяет получить доступ к любой ячейке внешней памяти данных в пределах 64Кбайт.
Во втором варианте – шина адреса внешней памяти данных подключена: восемь младших разрядов – к порту P0, а старшие разряды – через какие либо линии портов P1, P2, P3 (возможно с дополнительным схемным решением, обеспечивающим переключение страниц внешней памяти). В этом случае внешняя память данных имеет страничную организацию размер (страницы 256байт) и в качестве указателя могут использоваться регистры R0, R1 текущего банка регистров общего назначения.
ПРИМЕЧАНИЕ: Подробности по подключению внешней памяти данных изложены в [1].
Непосредственная адресация.
Непосредственная адресация позволяет выбрать из адресного пространства памяти программ данные (константы), указанные в командах явным образом.
Косвенно-регистровая адресация по сумме базового и индексного регистров.
Косвенно-регистровая адресация по сумме базового и индексного регистров позволяет осуществлять выбор данных (констант) из таблиц, размещенных в памяти программ.
В качестве базового регистра может выступать регистр DPTR или счетчик команд PC, а в качестве индексного регистра – аккумулятор A.
Примеры, демонстрирующие различные способы адресации.
Рассмотренные выше способы адресации операндов наиболее наглядно можно рассмотреть на примере команд пересылок.
Примеры приведены в виде листингов, где первое поле – адрес по которому команда находится в памяти программ, второе поле – команда, переведенная в машинные коды, третье поле – мнемокод команды, четвертое поле – операнды. В первом и втором поле значения представлены в шестнадцатеричной форме. В начале и конце примеров добавлены команды NOP – «пустая операция» для большей наглядности размещения машинных кодов в памяти программ.
Пример №1 |
00 |
NOP |
||||
0000 |
A,#3EH |
;Пример |
1.1 |
|||
0001 |
743E |
MOV |
||||
0003 |
7464 |
MOV |
A,#01100100B |
;Пример |
1.2 |
|
0005 |
00 |
NOP |
2
0001 и 0002.
Этот пример иллюстрирует – второй операнд указан в виде непосредственной адресации (т.е. задано непосредственное значение) и находится в памяти программ вторым байтом команды.
Пример №2 |
00 |
NOP |
||||
0000 |
A,49H |
;Пример |
2.1 |
|||
0001 |
E549 |
MOV |
||||
0003 |
E52E |
MOV |
A,2EH |
;Пример |
2.2 |
|
0005 |
00 |
NOP |
Этот пример иллюстрирует – второй операнд указан в виде прямой адресации (т.е. указан прямой адрес ячейки памяти) и находится в памяти программ вторым байтом команды.
Пример №3 |
00 |
NOP |
|||
0000 |
A,R0 |
;Пример 3.1 |
|||
0001 |
E8 |
MOV |
|||
0002 |
E9 |
MOV |
A,R1 |
;Пример 3.2 |
|
0003 |
EF |
MOV |
A,R7 |
;Пример 3.3 |
|
0004 |
00 |
NOP |
В примере 3.1 значение из регистра R0 пересылается в аккумулятор A. В результате выполнения команды в аккумуляторе будет значение, которое находится в регистре R0. В примере 3.2 значение из регистра R1 пересылается в аккумулятор A. В результате выполнения команды в аккумуляторе будет значение, которое находится в регистре R1. В примере 3.3 значение из регистра R7 пересылается в аккумулятор A. В результате выполнения команды в аккумуляторе будет значение, которое находится в регистре R7.
Во всех примерах (примеры 3.1, 3.2, 3.3) в машинном коде данная команда представлена одним байтом. В двоичном виде машинные коды примеров 3.1, 3.2, 3.3 будут иметь вид:
1110 1000 |
для примера 3.1 |
1110 1001 |
для примера 3.2 |
1110 1111 |
для примера 3.3 |
Старшие пять бит являются кодом команды, а младшие три – адресом (номером регистра). Этот пример иллюстрирует – второй операнд указан в виде регистровой адресации (т.е.
адрес источника информации задан неявно) и находится в памяти программ непосредственно в коде команды. Этот способ адресации позволяет получить более короткую команду и как правило выполняющуюся за меньшее время, что эффективно сказывается как на объеме программного обеспечения, так и на времени выполнения программы.
3
Пример №4 |
00 |
NOP |
|||||
0000 |
R0,#33H |
;Запись в |
R0 значения 33H |
||||
0001 |
7833 |
MOV |
|||||
0003 |
7940 |
MOV |
R1,#40H |
;Запись в |
R1 значения 40H |
||
0005 |
7411 |
MOV |
A,#11H |
;Запись в |
A |
значения 11H |
|
0007 |
F6 |
MOV |
@R0,A |
;Пример 4.1 |
R0 увел. на 1 |
||
0008 |
08 |
INC |
R0 |
;Значение |
в |
||
0009 |
F6 |
MOV |
@R0,A |
;Пример 4.2 |
R0 увел. на 1 |
||
000A |
08 |
INC |
R0 |
;Значение |
в |
||
000B |
F6 |
MOV |
@R0,A |
;Пример 4.3 |
|||
000C |
F7 |
MOV |
@R1,A |
;Пример 4.4 |
|||
000D |
00 |
NOP |