Вопрос 22 “Язык ассемблера для МП ВМ80”
Представляет собой машинно-ориентированный язык. (Для каждого МП свой язык ассемблера).
Язык ассемблера – это язык символического кодирования .
Вместо двоичных кодов операций и адресов используются символические имена то есть последовательности букв и цифр обязательно начинающиеся с буквы. Длина данной последовательности в принципе не ограничена , но транслятор различает только определенное количество символов в имени. (старые-от 5 до 8 ; современные- до 30).
Все имена делятся на два типа :
1).Постоянные;
2).Определяемые пользователем ;
-Постоянные имена не нуждаются в дополнительных определениях в программе.
К ним относятся:
1) Мнемокоды команд МП (mov,mvi …);
2) Псевдокоманды ассемблера (оrg,end,equ…);
3) Наименования регистров МП (A,B,…,SP,PC);
4) Условное обозначение арифметических и логических операций выполняемых транслятором (NOT,AND,+,-,/,…);
5) Апострофы ('А','С') – обозначает что буква или символ берется в коде КОИ-7 или ASCII.
-Символические имена пользователя должны быть определены в программе.В процессе трансляции (перевода в машинные коды) транслятор вместо символических имен записывает их двоичный код.
Программа состоит из предложений (длина не более 80 символов).
В общем случае предложение содержит 4 поля.
Метка операция операнды комментарий
Они не являются обязательными (пустое предложение).Для разделения полей используется пробел.
1.метка – это символическое имя ячейки памяти ,в которой хранится отмеченная команда или операнд. В процессе трансляции ассемблер заменяет метку действительным адресом. Метка всегда используется с двоеточием (: -признак метки).
2.В поле операции помещается мнемоника команды МП или псевдокоманды.
3.В поле операндов размещаются операнды учавствующие в команде.(Имена регистров,символические имена констант или адресов,цифровые значения констант).
В поле операндов могут быть символы логических операций :
Adi not(C+D)/E ;
Mvi MEM,MEM1+2 ;
4.Поле комментариев. Содержит описание действий выполняемых командой.Отделяется от других полей “;”
Для того чтобы корректно осуществлялась трансляция программы необходимо определить исходные данные (с какой ячейки памяти размещается программа,какие значения присваивать символическим именам пользователя и т.д.).Для этого используются псевдокоманды – директивы транслятора .(ORG,END,EQU,SET,DB,DW,DS).
1) ORG(origin)
<МЕТКА> : ORG <ВЫРАЖЕНИЕ>
ORG 0800H – с какой ячейки памяти транслятор должен размещать программу.Если отсутствует , то по умолчанию с нулевой ячейки.
2) END
<МЕТКА>: END <ВЫРАЖЕНИЕ>
Ставится END в конце программы - указание транслятору закончить трансляцию программы.
3) EQU (equel) – присваивание
<ИМЯ>: EQU <ВЫРАЖЕНИЕ> - присваивает символическому имени определенное значение.
Имена определяемые EQU не должны переопределяться в данной программе .
4) SET – используется для присвоения значений именам ,которые могут переопределяться в программе.
Пример : TRAP SET 10H ;
MOV A,B;
…….
TRAP SET 11H ;
MOV A,C;
5) DB (define byte)
<МЕТКА>: DB <СПИСОК> - формирует в оперативной памяти массив 8-битных констант , значения которых задаются в списке – последовательности выражений языка ассемблера , разделенных запятыми.
6) DW (define word) – определить слово.
<МЕТКА>: DW <ВЫРАЖЕНИЯ> - формирует в ОЗУ массив 16-битных констант.
Пример : М: DW 1000H,2000H;
7) DS – определить память ;
<МЕТКА>: DS <ВЫРАЖЕНИЕ>
Резервируется определенное количество ячеек памяти . Никаких значений в резервируемые ячейки не заносится .
Пример : TABLE: DS 100 - МП резервирует 100 ячеек памяти.
Пример :
0100н org 100h ;начальный адрес программы пр1:
;Программа подсчета числа единиц в байте, содержащемся в аккумуляторе
0100h mvi C,0 ;очистка счетчика единиц
0101h mvi B,8 ;загрузка счетчиков сдвигов
0102h M2: rlc ;сдвиг влево
0103h jnc M1 ;переход на М1, если (CY=0)
0104h inr C ;
0105h M1: dcr B ;
0106h jnz M2 ;переход на М2, если (В) не равен нулю
0107h hlt ;остановка МП
0108h end ;конец трансляции
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.