Язык ассембера VitASM

Архитектура вычислительной машины

    • Три непересекающиеся типа памяти: данные, код и стек
      • Программа и данные находятся в разных адресных пространствах. (Архитектура не Фон-Неймоновская)
    • Адресуемое пространство данных (память) — 2^20 байт:
      • Адреса находятся в диапазоне (0, 2^20-1)
      • Адресуемая ячейка памяти — целое 32 битовое число со знаком
    • Программа — это упорядоченный набор инструкций.
      • Каждая инструкция имеет номер, на который могут ссылаться команды условного и безусловного переходов.
      • Команды нумеруются целыми числами, начиная с 0
    • Стек является внутренней памятью вычислителя
      • Арифметические команды могут принимать только операнды на стеке.

    Набор команд

      • ld <адрес> — загрузить число на вершину стека из указанной ячейки памяти.
      • st <адрес> — выгрузить число с вершины стека в указанную ячейку памяти.
      • ldc <целое> — загрузить указанную константу на вершину стека.
      • add — сложить два верхних числа на стеке и положить результат на вершину стека.
      • sub — вычесть из верхнего числа на стеке следующее за ним и положить результат на вершину стека.
      • cmp — сравнить два верхних числа на стеке и положить на вершину стека
        • 0, если числа равны
        • 1, если первое число больше
        • -1, если первое число меньше
      • jmp <метка> — передать управление команде с указанным номером.
      • br <метка> — передать управление команде с указанным номером, если на вершине стека не 0.
      • ret – корректное завершение работы.

      Порядок выполнения

        • Начальное состояние:
          Стек пуст, состояние пямяти не определено, уазатель команд IP равно 0
        • Пока не встретили команду ret делать следующее:
          • Выполнить инструкцию №IP
          • Если была выполнена инструкция перехода, то IP := <метка>, иначе увеличить IP на 1.
        • Результатом выполнения программы считается состояние стека после завершения.

        Структуры данных

        Предполагайте, что программа представлена в типом AssemblerCode :

        data Instruction a
         = Ldc Integer
         | Ld Addr
         | St Addr
         | Add
         | Sub
         | Cmp
         | Br a
         | Jmp a
         | Lbl a
         | Ret
         deriving Show               

        type AssemblerCode = [Instruction String]

        Пример использования:

        import System
        import VasmParser
        main = do { getArgs >>= readFile . head >>= print . parseVA }

        ċ
        VAParser.0.1.7z
        (2k)
        Victor Polozov,
        8 апр. 2009 г., 4:39
        Comments