Автор: Пользователь скрыл имя, 27 Октября 2013 в 08:45, курс лекций
На своем рабочем уровне МП выполняет список операций, называемый машинной программой.
Машинная программа - программа, написанная на машинном языке.
Программа - упорядоченный список команд или операторов, выполняя которые микро – ЭВМ осуществляет решение задачи.
Машинный язык - язык, непосредственно используемый МП. Программа на машинном языке не требует интерпретации.
Операторы машинного языка записываются в двоичных кодах.
Под номера регистров в поле команды отводятся определенные разряды: три младших (В 2 – В 0) кодируют номер регистра – источника, содержащего операнд, а три средних (В 5 - В 3) - номер регистра – приемника, в который засылается результат операции.
Принято следующее кодирование регистров:
000 – регистр В
001 – регистр С
010 – регистр D
011 - регистр Е
Неявная адресация
Примерами команд с неявной адресацией могут служить следующие команды: STC, CMA, NOP.
STC – установить индикатор переноса.
CMA – инвертировать содержимое аккумулятора.
NOP - нет операций.
При выполнении команд с неявной адресацией не требуется искать данные или адреса в других регистрах МП, в памяти или портах УВВ.
Например, команда STC устанавливает индикатор переноса (CY) 1 без воздействия на другие регистры или индикаторы. Таким образом, команда STC относится только к индикатору переноса и никакому другому регистру или памяти.
Команды с неявной адресацией занимают 1 байт памяти.
Непосредственная адресация
Код операции команды с непосредственной адресацией размещается в первом байте. Сразу же за КОП следуют данные, занимающие 1 или 2 байт. Эти данные берутся не из памяти. Их предоставляет программист при записи команды. Следовательно, при использовании данного способа адресации не требуется указание адреса памяти, необходим только код операции, после которого записываются данные. Таким образом, операнд следует в команде непосредственно за КОП. Рассмотрим пример этого типа команд. Команда загрузить данные в SP - это трехбайтовая команда.
2000 |
КОП 31 Н |
2001 |
0111 0000 |
2002 |
000 0010 |
младший байт загрузить SP
000 0010 |
01110000 |
старший байт
после операции
В рассматриваемом случае 2 байт данных берутся в памяти программы и помещаются в указатель стека. Младший байт 01110000 загружен первым, затем старший байт 000 0010.
Операции, задаваемые первым байтом команды (кодом операции), МП выполняет над данными, представленными её вторым байтом.
Прямая адресация
Команды с прямой адресацией имеют длину, равную 2 или 3 байт. Первый байт предназначен для КОП, второй и третий - для адреса.
Адрес указывает область памяти, в которой находятся подлежащие обработке данные. Совместное использование 2 и 3 байтов команды позволяет адресоваться к любой из 65536 областей памяти.
При этом способе адресации адрес операнда содержится в самой команде и для его формирования не используется никаких дополнительных источников или регистров.
При неявной адресации адрес местоположения данных встроен в команду, и программист лишен возможности самостоятельно обращаться к данным по их адресу. При непосредственной адресации данные указываются в самой команде, следуя сразу за кодом операции. В этом случае программист тоже не может адресоваться к данным. И только при прямой адресации у него имеется такая возможность, явным образом задавая адрес необходимых данных.
Примером использования такой адресации может служить команда записи содержимого аккумулятора в память по адресу 000ЕН. Этот адрес занимает второй и третий байты команды. Байты команды показаны на рисунке.
КОП М А |
0ЕН |
00Н |
2 – й байт
3 – й байт
Косвенная адресация
Этот тип адресации реализуется командами длиной в один байт. Помимо кода операции в такой команде указывается номер регистра, содержимое которого - адрес местоположения данных в памяти.
Указанная адресация называется косвенной. При косвенной адресации соответствующая команда указывает, в какой регистровой паре размещается адрес местоположения данных в памяти.
Рассмотрим
пример: загрузить в аккумулятор
данные из ячейки памяти, адрес
которой находится в
До операции
Память данных
2080H |
11110000 |
Адрес
Пара НL
На рисунке содержимое памяти по адресу 2080Н загружается в аккумулятор. Адрес ячейки памяти 2080Н указан содержимым пары НL, которая здесь играет роль адресного регистра.
Команды передачи данных
Команды общего назначения
Команды рассматриваемой группы выполняют передачу данных из регистра в регистр, размещение данных в памяти, размещение извлечённых из памяти данных в УВВ. В результате команд передачи данных никакие индикаторы не изменяются (биты регистра состояния). Некоторые характерные команды передачи данных приведены в следующей таблице.
Операция |
Адресация |
Мнемоника |
КОП |
Байты |
Формат команд |
Символика |
Передать А в r |
Регистровая |
MOV r, A |
….. |
1 |
КОП |
|
Передать r в А |
Регистровая |
MOV A, r |
….. |
1 |
КОП |
|
Передать HL в PC |
Регистровая |
PCHL |
E9 |
1 |
КОП |
|
Передать HL в SP |
Регистровая |
SPHL |
F9 |
1 |
КОП |
|
Загрузить А данными |
Непосредственная |
MVI A |
3E |
2 |
КОП данные |
|
Загрузить LOC(HL) в А |
Косвенная |
MOV A,M |
7E |
1 |
КОП |
|
Загрузить HL данными |
Непосредственная |
LXI H |
21 |
3 |
КОП Мл.байт Ст. байт |
|
Загрузить SP данными |
Непосредственная |
LXI P |
31 |
3 |
КОП Мл. байт Ст. байт |
|
Загрузить HL из LOC |
Прямая |
LHLD |
2A |
3 |
КОП Мл. адрес Ст. адрес |
|
Загрузить А из LOC |
Прямая |
LDA |
3A |
3 |
КОП Мл. адрес Ст. адрес |
|
Поместить А в LOC |
Прямая |
STA |
32 |
3 |
КОП Мл. адрес Ст. адрес |
|
Поместить HL в LOC |
Прямая |
SHLD |
22 |
3 |
КОП Мл. адрес Ст. адрес |
|
Поместить А в LOC (HL) |
Косвенная |
MOV M,A |
77 |
1 |
КОП |
|
Ввести в А из порта |
Прямая |
IN |
DB |
2 |
КОП Адр. порта |
|
Вывести А в порт |
Прямая |
OUT |
D3 |
2 |
КОП Адр. порта |
|
Установить индикатор переноса |
Неявная |
STC |
37 |
1 |
КОП |
|
LOC от LOCATION
Команды работы со стеком
К командам передачи данных относятся команды работы со стеком. При выполнении команд работы со стеком индикаторы не изменяются. В следующей таблице указаны некоторые команды работы со стеком.
Операция |
Адресация |
Мнемоника |
КОП |
Байт |
Формат команды |
Символика |
Поместить в стек А и индикаторы |
Косвенная |
PUSH PSW |
F5 |
1 |
КОП |
|
Поместить в стек HL |
Косвенная |
PUSH H |
E5 |
1 |
КОП |
|
Извлечь из стека А и индикаторы |
Косвенная |
POP PSW |
F1 |
1 |
КОП |
|
Извлечь из стека HL |
Косвенная |
POP H |
E1 |
1 |
КОП |
Команды PUSH и POP противоположны по своему действию и используются всегда совместно. Между этими командами располагаются другие команды программы, которые меняют содержимое регистров МП.
5. Арифметические команды
Команды арифметических действий устанавливают все индикаторы. Операции вычитания проводятся с использованием дополнительного кода.
Команды двоичной арифметики
Аккумулятор содержит одно из слагаемых. Каждая команда точно оговаривает различные источники другого слагаемого. Характеристики простых команд сложения и вычитания приведены в следующей таблице
Операция |
Адресация |
Мнемоника |
КОП |
Байты |
Формат команд |
Символика |
Сложить А с данными |
Непосредственная |
ADI |
C6 |
2 |
КОП данные |
|
Сложить r с А |
Регистровая |
ADD R |
….. |
1 |
КОП |
|
Сложить LOC (HL) с A |
Косвенная |
ADD M |
86 |
1 |
КОП |
|
Вычесть данные из А |
Непосредственная |
SUI |
D6 |
2 |
КОП данные |
|
Вычесть r из А |
Регистровая |
SUB R |
….. |
1 |
КОП |
|
Вычесть LOC (HL) из А |
Косвенная |
SUB M |
96 |
1 |
КОП |
|
Стандартный МП имеет для реализации арифметики больших чисел команды сложения с переносом и вычитания с заемом. Основные сведения об указанных командах приведены в следующей таблице.
Операция |
Адресация |
Мнемоника |
КОП |
Байты |
Формат команд |
Символика |
Сложить А с данными и переносом |
Непосредственная |
ACI |
CE |
2 |
КОП данные |
|
Сложить A c r и переносом |
Регистровая |
ADC r |
….. |
1 |
КОП |
|
Сложить память LOC (HL) c A и переносом |
Косвенная |
ADC M |
8E |
1 |
КОП |
|
Вычесть с заемом данные из А |
Непосредственная |
SBI |
DE |
2 |
КОП данные |
|
Вычесть с заемом r из А |
Регистровая |
SBB r |
….. |
1 |
КОП |
|
Вычесть с заемом содержимое памяти LOC (HL) из A |
Косвенная |
SBB M |
9E |
1 |
КОП |
Ниже рассматриваются команды положительного и отрицательного приращений:
INR r - содержимое регистра увеличивается на единицу, .
INR M - содержимое памяти, адрес которой находится в паре HL, увеличивается на единицу, .
DCR r - содержимое регистра уменьшается на единицу, .