Алфавит языка Ассемблера, данные, адресное пространство
Алфавит языка Ассемблер содержит:
1. 26 букв латинского алфавита от А до Z.
2. Цифры от 0 до 9.
3. Знаки # .,%;=()"+-&! и пробел.
4. Управляющие символы формата: ВК (возврат каретки), ПС (перевод строки), ПФ (перевод формата) и ГТ (горизонтальная табуляция).
МикроЭВМ «Электроника-60» является двухадресной ЭВМ, построенной на базе шестнадцатиразрядного микропроцессора серии К581. Внутреннее представление чисел, адресов и команд выполнено в восьмеричной системе счисления. Слово состоит из двух байтов, причем старший 15-й разряд является знаковым (рис. 27).
Старший байт Младший байт байт | |||||||||||||||
Рисунок 27 – Представление чисел в микроЭВМ
Если в 15-м разряде записан 0, то знак числа в слове «+», если , то «-»• Отрицательные числа представляются в дополнительном коде. Команды записываются в одном, двух или трех последовательно ^доложенных словах (в зависимости от формата команды). Команды расширенной арифметики, т.е. операции над словами двойной длины (умножение, деление, сдвиги) и операции с плавающей запятой используют двойные слова, т.е. 32-разрядные целые числа.
Адресное пространство, доступное программисту, показано на рис. 28. Оно состоит из восьми РОН, регистра состояния RS, входящих в состав микропроцессора и ОЗУ или ПЗУ.
RS | ОЗУ или ПЗУ (28К слов) | Регистры периферийных устройств (4К слов) 160000-177777 | |
РОН | RO | ||
R1 | |||
R2 | Векторы прерыва- ния 000-377 | Данные и программы 400-157777 | |
R3 | |||
R4 | |||
R5 | |||
R6 (SP) | |||
R7 (PC) |
Рисунок 28 – Распределение адресного пространства
Полный объем адресного пространства, исключая РОН и RS, составляет 216=64Kбaйт или 32К слов. Из них первые 28К являются ОЗУ или ПЗУ (от 0 до 157777g), начальные 256 адресов которого (от О до 377g) хранят исходные данные для прерывающихся программ (системная область памяти), а последние 4К слов отведены для адресации регистров состояний и данных периферийных устройств.
Система команд
Система команд микроЭВМ «Электроника-60» содержит более 80 команд, полный список которых приведен в литературе. В таблице 10 сведены основные команды «Электроника-60», используя которые, можно освоить программирование на языке Ассемблер как для ЭВМ СМ-4, так и для других ЭВМ различных типов, поскольку принципы программирования для всех ЭВМ одинаковы.
Таблица 10 – Основные команды
Формат | Мнемокод | Восьмеричный код | Признаки | Содержание команды | |||
N | z | V | с | ||||
MOV | 01SSDD | + | + | - | (D)->(S) - передача слова | ||
MOVB | 11SSDD | + | + | о | - | (D)->(S) - передача байта | |
СМР | 02SSDD | + | + | + | + | (S) - (D) - сравнение слов | |
СМРВ | 12SSDD | + | + | + | + | (S) - (D) - сравнение байтов | |
ADD | 06SSDD | + | + | + | + | ((S) + (D))->(D) – сложение | |
SUB | 16SSDD | + | + | + | + | ((S) - (D))->(D) – вычитание | |
MUL | 070RSS | + | + | + | (RxS) - умножение (старшие ряды в R1, младшие - в Rу1) | ||
DIV | 071RSS | + | + | + | + | (RuRv1)/(S) – деление (частное в R1, остаток –в Rу1) | |
SWAB | 0003DD | + | + | Перестановка байтов | |||
CLRB | 1050DD | Очистка | |||||
COMB | 1051DD | + | + | Инвертирование | |||
INCB | 1052DD | + | + | + | - | Прибавление единицы | |
DECB | 1053DD | + | + | + | - | Вычитание единицы | |
NEGB | 1054DD | + | + | + | + | Дополнение кода | |
ASRB | 1062DD | + | + | + | + | Арифметический сдвиг вправо | |
ASLB | 1063DD | + | + | + | + | Арифметический сдвиг влево | |
JMP | 0001DD | - | - | - | - | Засылка (D) в СК | |
JSR | 004RDD | - | - | - | - | Обращение к подпрограмме | |
RST | 00020R | - | - | - | - | Возврат из подпрограммы | |
SOB | 077RKK | - | - | - | - | Счет циклов | |
MARK | 0064KK | - | - | - | - | Восстановление указателя стека | |
NOP | - | - | - | - | Нет операции | ||
HALT | - | - | - | - | Останов | ||
WAIT | - | - | - | - | Ожидание прерываний | ||
RTI | + | + | + | + | Возврат из прерывания | ||
BPT | + | + | + | + | Прерывание для отладки | ||
IOT | + | + | + | + | Прерывание по вводу-выводу | ||
RTT | + | + | + | + | Возврат из программы прерывания | ||
TRAP | 104400+E | + | + | + | + | Командное прерывание | |
ВР | 000400+E | - | - | - | - | Безусловный переход | |
BNE | 001000+E | - | - | - | - | Условный переход по # 0 | |
BEQ | 001400+E | - | - | - | - | —//— по = 0 | |
BGE | 002000+E | - | - | - | - | —//— по > 0 | |
BLT | 002400+E | - | - | - | - | —//— по < 0 | |
BGT | 003000+E | - | - | - | - | —//— по > 0 | |
BLE | 003400+E | - | - | - | - | —//— по <. 0 | |
BPL | 100000+E | - | - | - | - | —//— по плюсу | |
BMI | 100400+E | - | - | - | - | —//— по минусу |
В таблице 10 приняты обозначения:
SS – адресация операнда-источника (S), символ S записан дважды, так как операнд S в команде занимает два восьмеричных (или шесть двоичных) разряда;
DD – тип адресации операнда-приемника (D), символ D записан дважды, так как операнд D занимает в команде два восьмеричных (или шесть двоичных) разряда;
КК – восьмеричная константа (число);
Е – смещение PC;
R – один из РОН;
V – дизъюнкция (логическое ИЛИ).
Действие над признаками N, Z, V, С:
«+» - формируется по результату операции;
«- » - не изменяется;
«О» - очищается;
«I» - устанавливается.
Взятие в скобки означает, что в команде используется не сам операнд, например D, а адрес, в котором расположен операнд D, т.е. (D).
Все команды микроЭВМ двухбайтовые, т.е. занимают в памяти одно машинное слово.
б) |
В системе команд используются четыре формата.
г)
Рисунок 29 – Форматы команд микроЭВМ «Электроника-60»
На рисунке 29 приняты обозначения:
КО – код операции, записывается в четырех разрядах (12-15) т.е. имеет всего 24=16 комбинаций, из них используются в виде кодов 14 комбинаций, коды 0001-0111 и 1001-1111, а коды 0000 и 1000 указывают на принадлежность команды к 2, 3 или 4-му форматам и совместно с другими разрядами образуют расширенные коды операций;
S – адрес первого операнда, занимает шесть двоичных разрядов (6-11);
D – адрес второго операнда (он же адрес результата) занимает шесть двоичных разрядов (0-5).
Адреса S и D определяют способы адресации операндов. Формат 1 используется для оформления операций с плавающей запятой и операций расширенной арифметики. Он имеет вид, представленный на рисунке 29, а.
Формат 2 используется для одноадресных арифметических и логических операций (рис. 29, б).
Код операции занимает 10 разрядов, адрес операнда D – шесть двоичных разрядов.
Формат 3 используется для безадресных команд изменения признаков N, Z, V, С и команд управления работой процессора и периферийных устройств. КО занимает все 16 разрядов (рис. 29, в).
Формат 4 используется для команд ветвления (рис. 29, г). КО и Е занимают по восемь разрядов.
Смещение Е – это приращение счетчика команд. Максимальное приращение составляет ±127, т.е. число, равное ±27 слов. Если условие перехода выполнено, то к значению PC прибавляется два байта и еще ±Е слов, т.е. выполняется команда с адресом (РС+2байта ±Е). Если условие перехода не выполнено, то выполняется следующая, с адресом (РС+2байта), команда.
Способы адресации
Под адресацией понимается обращение к памяти (регистрам РОН, ОЗУ или ПЗУ) для произведения над их содержимым (операндами) каких-либо операций. Адресация производится с помощью команд, в которых кодируются как вид операции, так и способ обращения к операндам.
Различают четыре основных способа адресации: непосредственную, регистровую, прямую и косвенную. При непосредственной адресации адрес ячейки, в которой находится операнд, содержится в самой команде. Команда состоит из двух машинных слов.
В мнемокоде команда с непосредственной адресацией имеет конструкцию КО # К, RM (где КО - код операции, # - символ, означающий «номер», «число»; К - регистр памяти с операндом, указываемый во втором слове команды; R - регистр РОН; М - номер R), восьмеричном коде записывается как КО 27 D К, где 27 - восьмеричный код непосредственной адресации.
Пример.
MOV # 425, RO или 012700 000425. Команда в мнемокоде читается как «передать» (MOV) содержимое регистра ОЗУ или ПЗУ номер д25 в регистр RO, или в восьмеричном коде для первого машинного слова: 01 - код операции MOV (табл. 9), 27 - код непосредственной адресации первого операнда (S), 00 - код регистра 0; для второго машинного слова: 000425 - восьмеричный код регистра памяти номер 425, в котором записан операнд.
Регистровая адресация используется только для операций между регистрами РОН.
Команда с регистровой адресацией имеет конструкцию КЛ RM, RM, где операнд-источник S и операнд-приемник D строятся одинаково в виде RM, или в кодах КО: ОМ ОМ.
Пример.
СМР R5, RQ или 02 0500, т.е. сравнить содержимое регистров общего назначения R5 и RO (02 - код операции СМР из табл. 9, 05 и 00 - адреса РОН R5 и R0).
Рисунок 30 – Структурная схема CAP привода станка с ЧПУ
Команда занимает одно машинное слово.
Рисунок 31 – Алгоритм расчета CAP
Рассмотрим программу расчета управляющего воздействия системы автоматического регулирования (CAP) приводом одной из координат станка с ЧПУ (рис. 30). Он производится по формуле
,
где
П - заданное перемещение координат станка;
U - фактическое перемещение;
ДОС - датчик обратной связи.
Алгоритм расчета приведен на рисунке 31.
Распределение памяти:
П - ячейка номер 400;
U - ячейка номер 401;
DU - РОН R0.
Счетчик команд организует с ячейки ОЗУ номер 500, т.е. начальное значение СК=500. В левой части программы (табл. 11) приведено мнемоническое описание команд, в правой - в восьмеричных кодах. В первой и второй командах (блоки 2 и 3 алгоритма) производится подача содержимого ячеек ОЗУ номеров 400 и 401 (т.е. П и U) в регистры РОН RO и R1. Команды используют непосредственную адресацию.
Программа представлена в табл. 11.
Таблица 11 – Команды адресации
Метки | КО | Операнды | PC | Команда | |
1 слово | 2 слово | ||||
МО | MOV | #400, RO | |||
MOV | #401, R1 | ||||
SUB | R1, R0 | ||||
BNE | МО | (т.е. Е=-6) | |||
HALT |
Третья команда SUB и блок 4 определяют разность П-U с записью результата в RO. Команда использует регистровую адресацию.
Четвертая команда BNE - условный переход, если результат (содержимое RO) не равен 0. Если условие выполнено, программа переходит на начало, к метке МО, т.е. на шесть слов назад (в кодах команды BNE: 001000-000006=000772). Величина перехода определяется как сумма машинных слов от кода команды перехода (включая его) по начальное слово команды, к которой производится переход, или по формуле Рснач=Рскон+2байтаЕ), где РСнач и РСкон - начальное и конечное содержимое PC, т.е. 500=510+2Е, откуда Е=12 байт или шесть слов.
Если условие не выполнено (1=0), выполняется следующая команда HALT - останов, конец программы. Счетчик команд PC получает приращение в два байта, если команда занимает одно машинное слово, и в четыре байта - если два машинных слова.
Прямая адресация используется, если все данные (операнды) расположены в ячейках памяти. Ассемблер микроЭВМ «Электроника-60» располагает развитой системой способов прямой, а также косвенной адресации. Способы отличаются как объемом используемой памяти, так и скоростью обмена данными. Прямая адресация в Ассемблере реализуется пятью способами: абсолютной, относительной, автоинкрементной, автодекрементной и индексной адресациями.
При абсолютной прямой адресации команда имеет вид:
КО @#К, @#К, где К - номера ячеек в памяти, или в кодах:
1-е слово 2-е слово 3-е слово
КО 37 37 , К К
где 37 - код абсолютной адресации.
Пример.
1-е слово 2-е слово 3-е слово
MOV @ # 676, @ # 672 или 013737 000676 000672
т.е. переслать операнд ячейки ОЗУ номер 676 в ячейку номер 672, или в кодах: первое слово - КО = 01, S = 37, D = 37 (т.е. адресация абсолютная), второе слово - 000676 - номер абсолютного адреса первого операнда, третье слово - 000672 номер абсолютного адреса второго операнда. Таким образом, команда занимает в памяти ЭВМ три машинных слова.
Составим программу (табл.12) суммирования импульсов, поступающих от датчика перемещения стола фрезерного станка с ЧПУ по какой-либо координате. Переход каждого импульса соответствует перемещению стола на один элементарный шаг (дискрету). При этом используем абсолютную адресацию. Алгоритм приведен на рисунке 32.
Рисунок 32. Алгоритм расчета перемещения стола станка с ЧПУ
Распределение памяти:
№ 500=П - заданное перемещение стола станка;
№ 501=AL - ячейка памяти, в которую поступают от датчика импульсы перемещения;
№ 502=L - текущее перемещение стола, , начальное значение ячейки - 0;
№ 503=0 - служебная ячейка, в которую записывается ноль;
№ 400=РС - начальный адрес.
В первой и второй командах (блок 2 алгоритма) сравнивается состояние ячейки 501 с нулем ячейки 503. Если импульс перемещения пришел, программа переходит к третьей команде, если нет - опять проверяет поступление импульса от датчика. По третьей команде импульсы складываются и накапливаются в ячейке 502 (блок 3), по четвертой (блок 4) - их сумма L сравнивается с конечным значением перемещения П, если ПL (команда 5), счет продолжается (возврат к метке Ml), если нет - останов.
Таблица 12
Метки | КО | Операнды | PC | Команда | ||
1-е слово | 2-е слово | 3-е слово | ||||
Ml: | СМР | @#501, @#503 | ||||
BEQ | Ml | (т.е. E=-38) | ||||
ADD | @#501, @#502 | |||||
СМР | @#500, @#502 | |||||
BGT | Ml | (т.е. Е=-1110 = -138) | ||||
HALT |
В команде 5 величина Е должна вычисляться в восьмеричной системе счисления, так как необходимо вернуться на 11 слов назад к метке Ml, а в восьмеричной системе 1110=138, тогда для кода команды BGT (исходный код 003000) получим 0030008 - 0000138 = 002765.
Относительная адресация названа так потому, что в ней вместо абсолютных адресов используются их приращения относительно значения PC, т.е. адрес операнда формируется сложением значения PC и приращения адреса. Команда с относительной адресацией имеет вид
КО К, К, где К - обозначения операндов (в кодах - приращения их адресов или в кодах)
1-е слово 2-е слово 3-е слово
КО 67 67 К К
Приращения указываются в команде на месте второго и третьего слов (S и D), причем для определения их значений необходимо учесть, что после считывания очередного слова команды содержимое PC автоматически увеличивается на 2 (указывает, какое слово считывается следующим).
Пример.
Первые три команды программы (рис. 32) в относительной адресации запишутся как (табл. 13):
Таблица 13
Метки | Операнды | Команда | ||||
1-е слово | 2-е слово | 3-е слово | ||||
Ml: | CMP | DL, Ф | ||||
BEQ | Ml | |||||
ADD | DL, L |
Первая команда сформирована следующим образом:
- в 1-м слове 026767 код 02 означает операцию сравнения (см. табл. 10), коды 67 на позициях операндов S и D указывают на относительную адресацию в команде;
- 2-е слово (операнд S), т.е. приращение, рассчитывается по правилу: текущее значение РС==400 после считывания первого слова PC станет равным 402, после считывания приращения операнда AL значение PC будет равным 404. Так как операнд DL записан по адресу 501, то величина приращения должна быть 501 - 404 = 97, т.е. 2-е слово имеет вид 000097;
- 3-е слово (операнд D) формируется аналогично: значение PC после его считывания составит 406, следовательно, приращение равно 503 - 406 = 97.
Для третьей команды получим: приращение DL = 501 - 412 = 89, приращение L = 502 - 414 = 88.
Относительная адресация облегчает написание мнемокодовой части программы, так как в ней используются обозначения переменных, а не их адреса, но усложняет написание кодовой части.
Команда с автоинкрементной адресацией имеет вид:
КО (RM)+, или в кодах: КО 2М.
После считывания операнда (RM)+ содержимое регистра R с номером М (т.е. RM) автоматически наращивается на 1 при операциях с байтами и на 2 при операциях со словами.
Пример.
MOV (R5)+, R1 или в кодах: 012501, т.е. выбрать адрес операнда из R5, затем содержимое R1 увеличивается на 2, или в кодах: 01 = КО MOV, 25 = 2М, 01 + R1.
Команда с автодекрементной адресацией имеет вид КО - (RM), Или в кодах: КО 4М, приее выполнении сначала уменьшается содержимое РОН RM (на 1 при операциях с байтами и на 2 при операциях go словами), а затем считывается операнд.
Пример.
СМР R5, - (R1) или 020541, т.е. сравнить содержимое РОН R5 содержимым РОН R1 после его уменьшения на 2 байта.
Команды с автоинкрементной и автодекрементной адресациями используются при обработке массивов, организации стековой памяти счетчиков циклов.
Команда с индексной адресацией имеет вид:
КО К (RM), S или в кодах: К06МК, применяется для обработки массивов, при этом содержимое RM является индексом, т.е. изменяемой частью адреса, константа К - базовым адресом, исполнительный адрес равен сумме содержимого R1 и константы К. S является операндом-источником. Индексная адресация удобна при обращении к массивам и таблицам. Они объединяют функции ряда команд с командами INC (прибавление 1) и DEC (вычитание 1), повышая тем самым быстродействие работы программы и уменьшая объем занимаемой ею памяти. Вместе с командами INC и DEC в циклических программах часто применяется команда SOB (счет циклов в РОН), которая должна быть последней в программе. Если число циклов РОН равно 0, счет прекращается, если нет - происходит возврат к началу цикла (не более чем на 63 слова назад).
Косвенная адресация характерна тем, что в команде указывается не операнд или адрес памяти с операндом, а код регистра, в который помещен адрес операнда. Косвенную адресацию можно разделить на косвенно-регистровую, косвенно-автоинкрементную, косвенно-автодекрементную, косвенно-индексную и косвенно-относительную.
Косвенно-регистровая адресация в командах записывается как:
КО @ RM или КО (RM), в кодах: КО 1М.
Пример.
MOV @ Rl, @RO или 011110
СМР (RO), (R1) или 021011
Таблица 14 – Адресация в командах
Метки | КО | Операнды | PC | Команда | ||
1-е слово. | 2-е слово | |||||
MOV | #540, RO | |||||
MOV | #538, Rl | |||||
MOV | #40, R2 | |||||
BR | МО | |||||
М2: | СМР | @RO, -(Rl) | ||||
BGT | Ml | |||||
М0: | MOV | @R1, @R2 | ||||
Ml: | SOB | R2, M2 | ||||
HALT | ||||||
Рисунок 33 – Алгоритм поиска наибольшего элемента массива
Рассмотрим программу (табл. 14) поиска наибольшего элемента массива с использованием автодекрементной, косвенно-регистровой адресации и команды SOB. Алгоритм показан на рисунке 33. Распределение памяти:
Массив А (40) занимает ячейки с номера 500 по номер 539;
540 - ячейка памяти результата;
RO - РОН результата;
R1 = 539 - адрес ячейки последнего элемента массива А (40);
R2 = 40 - размерность массива (количество элементов);
PC = 400 - начальное значение PC.
В программе Команда 7 написана с косвенно-регистровой адресацией, команда 5 сочетает косвенно-регистровую и автодекрементную адресации. В ней сравниваются значения ячеек текущего массива с адресом, меньшим на 2 байта.
Дата добавления: 2019-02-07; просмотров: 943;