modelmachine/docs/assembler.md at main · cmc-python/modelmachine

Latest commit

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

Ассемблер транслирует мнемоники кодов в шестнадцатиричные машинные коды.

Язык ассемблера доступен для всех модельных машин. Модель машины нужно задать первой директивой .cpu, как и для файлов в машинных кодах.

Для использования языка ассемблера нужно использовать директиву .asm вместо директивы .code.

  • modelmachine asm FILENAME - ассемблировать файл;
  • modelmachine run FILENAME - выполнить ассемблерный файл;
  • modelmachine debug FILENAME - отладить ассемблерный файл, отладчик выводит исходный текст программы на ассемблере рядом с текущим состоянием памяти; при изменении состояния памяти исходный текст не меняется.

Ассемблер нечувствителен к регистру. В том числе метки нечувствительны к регистру. Директивы ассемблера начинаются с точки.

Директивы верхнего уровня:

  • .cpu - задает модель машины;
  • .input, .output - могут принимать не только адрес, но и метку; в остальном работают так же, как для машинных кодов;
  • .enter - работает так же, как для машинных кодов;
  • .asm - секция кода на ассемблере;
  • .code - секции машинного кода также разрешены;

В секции .asm находится код программы на языке ассемблера, он состоит из:

  • op r1, label[r2] - код операции с использоваем регистров (от r0 до rf) и меток;
    • расчет адресов происходит автоматически;
    • .imm(10) - при необходимости можно всесто метки-операнда записать число директивой .imm;
  • label: - объявление метки; имя метки состоит из латинских букв, цифр, _ и ., начинается не с цифры;
  • .label - локальная метка;
  • .word список_чисел - список чисел в памяти, каждое число занимает столько ячеек, сколько требуется для арифметической операции на данной машине;

Примеры программ на ассемблере