Архитектура вычислительной машины- Три непересекающиеся типа памяти: данные, код и стек
- Программа и данные находятся в разных адресных пространствах. (Архитектура не Фон-Неймоновская)
- Адресуемое пространство данных (память) — 2^20 байт:
- Адреса находятся в диапазоне (0, 2^18-1)
- Адрес — целое 32 битовое число со знаком
- Адресуемая ячейка памяти — целое 32 битовое число со знаком
- Программа — это упорядоченный набор инструкций.
- Каждая инструкция имеет номер, на который могут ссылаться команды условного и безусловного переходов.
- Команды нумеруются целыми числами, начиная с 0
- Стек является внутренней памятью вычислителя
- Арифметические команды могут принимать только операнды на стеке.
- Любая команда, работающая с операндами на стеке, удаляет их.
Набор команд- ld <адрес> — загрузить число на вершину стека из указанной ячейки памяти.
- st <адрес> — выгрузить число с вершины стека в указанную ячейку памяти.
- ldc <целое> — загрузить указанную константу на вершину стека.
- add — сложить два верхних числа на стеке и положить результат на вершину стека.
- sub — вычесть из верхнего числа на стеке следующее за ним и положить результат на вершину стека.
- cmp — сравнить два верхних числа на стеке и положить на вершину стека
- 0, если числа равны
- 1, если верхнее число больше
- -1, если верхнее число меньше
- jmp <метка> — передать управление команде с указанной меткой.
- br <метка> — передать управление команде с указанной меткой, если на вершине стека не 0.
- hlt – корректное завершение работы.
Комментарий начинается символом ";" и заканчиивается концом строки. Перед командой может установлена метка: "<имя метки>:" Порядок выполнения- Начальное состояние:
Стек пуст, состояние пямяти не определено, уазатель команд IP равен 0 (указывает на первую команду) - Пока не встретили команду ret делать следующее:
- Выполнить инструкцию №IP
- Если была выполнена инструкция перехода, то IP := <метка>, иначе увеличить IP на 1.
- Результатом выполнения программы считается состояние стека после завершения.
РасширенияДоступны следующие расширения базового синтаксиса: ПримерСложение чисел:
ldc 1 ldc 2 add ret
цикл:
ldc 10 st 0 l: ldc 1ld 0 sub br l ret
РеализацияПример структуры данных и синтаксического анализатора ядра StudentASM на языке Haskell: Haskell. |
|