Язык ассемблера StudentAsm
Архитектура вычислительной машины
Архитектура вычислительной машины
- Три непересекающиеся типа памяти: данные, код и стек
- Программа и данные находятся в разных адресных пространствах. (Архитектура не Фон-Неймоновская)
- Адресуемое пространство данных (память) — 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 1
ld 0
sub
br l
ret
Реализация
Реализация
Пример структуры данных и синтаксического анализатора ядра StudentASM на языке Haskell: Haskell.