- •2202. Целью курса является изучение принципов построения
- •In out | разряды
- •000 До fff. В каждом слове памяти могут храниться четыре
- •1.2 Язык ассемблера простой эвм
- •4. Псевдокоманды указывают ассемблеру, каким образом разместить
- •1.2 Структуры данных ассемблера и алгоритм его работы
- •1.2 Пpимеpы использования макpоязыка. Обсуждение.
- •2. Имеется два макроопределения, предназначенных для
000 До fff. В каждом слове памяти могут храниться четыре
шестнадцатиричные цифры и знак, представляющие собой команду
или число.
Гипотетическая ЭВМ имеет в своем составе одно
устройство ввода ( in ) и одно устройство вывода ( out ).
Формат команд простой ЭВМ следующий :
Каждая команда занимает одно слово оперативной памяти
и имеет формат:
+СААА
или
-СААА ,
где:
+С/-С - код операции (КОП). Адресные команды имеют КОП > -7.
ААА - представляет собой адрес (для адресных команд)
или расширение кода операции (для безадресных комманд).
Все числовые комбинации вида +С/-С (для адресных
команд) или вида +СААА/-СААА (для безадресных команд) не
представлящие собой код команды (см. Таблицу команд)
являются запрещенными в качестве команд.Поступление
запрещенной кодовой комбинации в качестве команды приводит к
особой 'Ошибке Выборки Команды' во время выполнения
программы и к останову работы Гипотетической ЭВМ.
Гипотетическая ЭВМ может выполнять 46 команд, каждая
из которых имеет мнемоническое обозначение. Мнемонические
обозначения команд имеют длину от двух до четырех символов.
Все команды Гипотетической ЭВМ приведены в таблице 1, где:
A - аккумулятор (сумматор).
X - регистр X.
Y - регистр Y.
PC - программный счетчик.
SP - указатель стека.
<adr> - содержимое ячейки памяти по адресу <adr>.
[Reg] - содержимое ячейки памяти по адресу, хранящемуся
в регистре Reg.
Команды гипотетической ЭВМ Таблица 1
+====+======+======+=====+===================================+
|Ном.|Мнем. | КОП |Расш.| Описание |
| |обозн.| |КОП | Команды |
+====+======+======+=====+===================================+
| 1 | ADD | 0x5 | 0x0 | A=A+<adr> (сложение с памятью ) |
| 2 | ADX | -0xA | 0xA | A=A+X (сложение с рег. X ) |
| 3 | CALL | -0x3 | 0x0 | Переход на подпр. по адресу <adr> |
| 4 | DEC | -0xA | 0x3 | A=A-1 (вычитание с памятью) |
| 5 | DIV | 0x8 | 0x0 | A=A/<adr> (деление с памятью ) |
| 6 | DVX | -0xA | 0xD | A=A/X (деление с рег. X ) |
| 7 | IN | -0xC | 0x1 | Y=<port> (ввод с устр. ввода ) |
| 8 | INC | -0xA | 0X2 | A=A+1 (инкремент рег. A ) |
| 9 | JC | 0xC | 0x0 | IF flag C PC= adr + |
| 10 | JE | -0x1 | 0x0 | E PC= adr | условные |
| 11 | JS | 0xE | 0x0 | S PC= adr | переходы |
| 12 | JZ | 0xA | 0x0 | Z PC= adr + |
| 13 | JMP | 0x9 | 0x0 | PC=adr> (безусл. переход) |
| 14 | JNC | 0xD | 0x0 | IF NOT(flag C) PC= adr + |
| 15 | JNE | -0x2 | 0x0 | E PC= adr |условные |
| 16 | JNS | 0xF | 0x0 | S PC= adr |переходы |
| 17 | JNZ | 0xB | 0x0 | Z PC= adr + |
| 18 | LDA | 0x1 | 0x0 | A=<adr> (загрузка рег.A из памяти)|
| 19 | LDX | 0x2 | 0x0 | X=<adr> (загрузка рег.X из памяти)|
| 20 | LDY | -0x4 | 0x0 | Y=<adr> (загрузка рег.Y из памяти)|
| 21 | LDAX | -0xD | 0x1 | A=[X] косв. загр. рг.A через рг.X |
| 22 | LOOP | -0x6 | 0x0 | X=X-1,if(X>0){ PC= adr } (цикл ) |
| 23 | MAX | -0xB | 0x3 | A=X ( пересылка рг.X в рг.A ) |
| 24 | MAY | -0xB | 0x5 | A=Y ( пересылка рг.Y в рг.A ) |
| 25 | MLX | -0xA | 0xC | A=A*X ( умножение с рег.X ) |
| 26 | MUL | 0x7 | 0x0 | A=A*<adr> (умножение с памятью ) |
| 27 | MXA | -0xB | 0x4 | X=A ( пересылка рг.A в рг.X ) |
| 28 | MXY | -0xB | 0x7 | X=Y ( пересылка рг.Y в рг.X ) |
| 29 | MYA | -0xB | 0x6 | Y=A ( пересылка рг.A в рг.Y ) |
| 30 | MYX | -0xB | 0x8 | Y=X ( пересылка рг.X в рг.Y ) |
| 31 | MASP | -0xB | 0x9 | A=SP ( пересылка рг.SP в рг.A) |
| 32 | MSPA | -0xB | 0xA | SP=A ( пересылка рг.A в рг SP) |
| 33 | NEG | -0xA | 0x8 | A=A*-1 (изменение знака ) |
| 34 | NOP | 0x0 | 0x0 | Нет операции |
| 35 | OUT | -0xC | 0x2 | <port>=Y (запись в порт содерж. Y)|
| 36 | POP | -0xB | 0x2 | A=[SP], SP=SP-1 (взять со стека) |
| 37 | PUSH | -0xB | 0x1 | [SP]=A, SP=SP+1 (положить на стек)|
| 38 | RET | -0xC | 0x4 | возврат из подпрограммы |
| 39 | SBX | -0xA | 0xB | A=A-X (вычитьнание с рг. Х ) |
| 40 | STA | 0x3 | 0x0 | <adr>=A (выгрузка рг.A в память) |
| 41 | STX | 0x4 | 0x0 | <adr>=X (выгрузка рг.Х в память) |
| 42 | STY | -0x5 | 0x0 | <adr>=Y (выгрузка рг.Y в память) |
| 43 | STAX | -0xD | 0x2 | [X]=A (косв. выгр. рг.A в память) |
| 44 | STOP | -0xC | 0x3 | останов эвм |
| 45 | SUB | 0x6 | 0x0 | A=A-<adr> (вычитание ) |
| 46 | ZERO | -0xA | 0x1 | A=0 (обнуление рг. A ) |
+====+======+======+=====+===================================+