Читайте также:
|
|
После того, как программа написана на языке Ассемблера, ее необходимо оттранслировать (перевести) в машинные двоичные коды. Это может быть сделано двумя способами.
Первый предполагает использование средств автоматизированной разработки программного обеспечения (отладочных средств). Под отладочным средством понимается машина, позволяющая автоматически перевести исходный текст программы на языке Ассемблера в набор машинных кодов (исполняемый модуль, загрузочный модуль). Для этого необходимо наличие не только технических средств (машины), но и специальной программы-переводчика (транслятора) с языка Ассемблера. Кроме того, в процессе отладки могут быть выявлены ошибки, как связанные с неточным или ошибочным алгоритмом задачи, так и с чисто техническими причинами (ошибка записи команд). Отладочные средства позволяют быстро исправить эти ошибки (этап редактирования).
При всех достоинствах и желательности такого подхода к разработке программного обеспечения довольно часто возникает ситуация, когда требуемых отладочных средств нет в наличии. Поэтому в случае разработки относительно небольших программ (с длиной исходного текста 60 ¸ 100 команд Ассемблера) вполне приемлем второй, ручкой способ получения машинных кодов программы. Он заключается в том, что роль транслятора берет на себя человек. При этом используется табл. 5.2 машинных кодов команд.
По этой таблице каждой команде ставится в соответствие ее шестнадцатеричный код, получающийся приписываем справа к номеру строки, содержащей команду, номера столбца, содержащего эту же команду.
При этом необходимо помнить, что полная длина команды может быть один, два или три байта, в зависимости от того, что является операндом этой команды по табл. 5.1.
Примеры:
1) MOV А, В. Эта команда относится к типу MOV R1, R и не имеет операндов. Следовательно, она однобайтовая и ее код по таблице будет 78;
2.) ACI E6. Эта команда относится к типу ACI D8 и имеет однобайтовый операнд D8. Следовательно, она двухбайтовая и результат ее трансляции получается приписыванием к машинному коду СЕ кода операнда Е6, то есть получаем СЕ Е6, расположенные в двух последовательных ячейках памяти;
3) CALL 0810. Эта команда относиться к типу CALL ADR и имеет двухбайтовый операнд ADE. Следовательно, она трехбайтовая и результат ее трансляции получается приписыванием к ее машинному коду CD кодов операнда 0810, то есть еще двух байтов 10 и 08 (сначала идет младший байт, потом - старший). В памяти МПС эта команда занимает три последовательные ячейки памяти, в которых будут записаны коды CD 1008.
Осуществив такой перевод над каждой командой Ассемблера, подучим загрузочный модуль программы в виде последовательности шестнадцатеричных кодов. Теперь эти коды могут быть загружены в ОЗУ МПС, например с помощью мониторной функции П (п. 4.2.1). После загрузки программа может быть исполнена.
Определенные трудности возникают при переводе команд, использующих адреса с метками в случае, если эти метка следует за транслируемой командой. Действительно, в этом случае, пока перевод команды не сделан, не будет определен адрес ячейки памяти, с которой будет располагаться набор машинных кодов этой команды и, следовательно, неизвестен адрес, присвоенный метке команды. В этом случае при первом проходе оставляют незаполненными пары байтов, следующих за кодами таких команд. Этот прием позволяет определить полную длину программы и, соответственно, определить адреса всех меток. При втором проходе в определенные незаполненные пары байтов подставляют определенные при первом проходе адреса меток и символических имен.
Такой метод получения машинных программ называется двухпроходным ассемблированием и он, как правило, положен в основу работы трансляторов Ассемблера.
Пример: транслируется с адреса 0800 фрагмент программы
MOV A, B
JNZ MET1
LXI H, 0900
MET1: ORA B
При первом проходе производим кодирование по таблице 5.2 и располагаем коды с адреса 0800.
Получаем:
Адрес | Код | Метка | Команда |
MOV A, B | |||
С2 | JNZ METI | ||
** | |||
** | |||
LXI H, 0900 | |||
В0 | MET1 | ORA B |
При втором проходе заполняем пару байтов, следующих за кодом команды JNZ, адресом 0807, то есть в байте с адресом 0802 располагаем 07, в байте с адресом 0803 располагаем 08.
Получаем окончательно:
Адрес | Код | Метка | Команда |
MOV A, B | |||
С2 | JNZ MET1 | ||
LXI H, 0900 | |||
В0 | MET1 | ORA B |
Таблица 5.1.
СИСТЕМА КОМАНД МИКРОПРОЦЕССОРА КР 580 ВМ 80 А | ||||
Однобайтовые пересылки MOV R1,R; R ® R1 MVI R,D8; D8 ® R STAX YZ; A ® M(YZ) LDAX YZ; M(YZ) ® A. STA ADR; A ® M(ADR). LDA ADR; M(ADR)® A SPHL; HL ® SP. | Двухбайтовые пересылки LXI YZ,D16;D16 ® YZ SHLD ADR;H ® M(ADR+1), L ® M(ADR). LHLD ADR;M(ADR) ® L, M<(ADR+1) ® H. PUSH YZ;YZ ® M(SP-1) M(SP-2), SP-2 ® SP. POP YZ;M(SP) M(SP+1) ® YZ (POP' PSW);P+2 ® SP. | |||
Команды ввода и вывода IN N; (N) ® A OUT N; A ® (N) | Обмен байтами XCHG; HL «DE. XTHL; H «M(SP+1), L «M(SP). | |||
Арифметические и логические операции с одним операндом | ||||
CMC''; C ® C STC''; 1 ® C CMA; A ® A DAA'; десятичная коррекция | INR''' R; R+1 ® R DCR''' R; R-1 ® R INX YZ; YZ+1 ® YZ DCX YZ; YZ-1 ® YZ | |||
Арифметические и логические операции с двумя операндами | ||||
8-битовые операции ADD' R; A+R ® A ADC' R; A+R+C ® A SUB' R; A-R ® A SBB' R; A-R-C ® A ANA' R; A^R ® A ORA' R; A R ® A. XRA' R; A R ® A | ADI' D8; A+D8 ® A ACI' D8; A+D8+C ® A. SUI' D8; A-D8 ® A SBI' D8; A-D8-C ® A ANI' D8; A^D8 ® A. ORI' D8; A D8 ® A XRI' D8; A D8 ® A | CPI' D8 Установка CMP' R признаков в соответствии с A-D8 или A-R | ||
16-битовые операции DAD'' YZ; HL+YZ ® HL | ||||
Команды сдвига содержимого аккумулятора RLC''; сдвиг влево RAL''; сдвиг влево через бит признака С RRC''; сдвиг вправо RAR''; сдвиг вправо через бит признака С | Команды передачи управления PCHL; HL ® PC. JMP ADR; ADR ® PC. J-CON ADR; ADR ® PC. | |||
Специальные команды E1; разрешение прерывания D1; запрещение прерывания HLT; останов NOP; холостая операция | Команды вызова и возврата из подпрограммы CALL ADR; PC ® M(SP-1) M(SP-2) C-CON ADR; ADR ® PC RST X; PC ® M(SP-1) M(SP-2) ADD ® PC, где x = 0,1,...,7 ADD соответственно равен 0H,8H, 10H,18H, 20H,28H,30H,38H RET; M(SP) M(SP+1) ® PC R-CON; SP+2 ® SP | |||
Формат регистра F D7 D6 D5 D4 D3 D2 D1 D0 B Z 0 AC 0 P I C | ||||
У С Л О В Н Ы Е О Б О З Н А Ч Е Н И Я ' - команда оказывает воздействие на все признаки '' - команда оказывает воздействие на признак C ''' - команда оказывает воздействие на все признаки, кроме признака С R,R1 - содержимое регистров A, B, C, D, E, H, L или ячейки памяти M(HL) YZ - содержимое регистровой пары BC,DE,HL, регистра SP или PSW (YZ в мнемонике соответствующих команд заменяется на B, D, H, SP или PSW) SP - содержимое указателя стека перед выполнением команды D8 - 8-разрядный операнд (содержимое второго байта двухбайтовой команды) (N) - содержимое порта ввода или вывода с номером N (N = 0,1,...,255) D16 - шестнадцатиразрядный операнд (содержимое второго и третьего байта команды) ADR - шестнадцатиразрядный адрес в трехбайтовой команде M() - содержимое ячейки памяти (адрес ячейки указан в скобках) -CON - часть мнемоники команды, определяющая условие передачи управления, вызова и возврата из подпрограммы (-CON в мнемонике заменяется на NZ, Z, NC, C, PO, PE, P или M). В скобках указывается число тактов команды 2 0при выполнении условия передачи управления | ||||
N - номер порта ввода/вывода;
& - двухбайтовый операнд – D16;
* - двухбайтовый операнд – ADR;
# - однобайтовый операнд – D8;
ПРИМЕР:
Команда STAX D имеет код операции 12.
Код операции СА соответствует команде JZ ADR.
Дата добавления: 2015-07-20; просмотров: 220 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Команды передачи управления и работы с подпрограммами | | | ОБЩАЯ СХЕМА ШТАНГОВОЙ НАСОСНОЙ УСТАНОВКИ, ЕЕ ЭЛЕМЕНТЫ И НАЗНАЧЕНИЕ |