Ассемблер машины 3m

Синтаксис

Строка программы может содержать: Синтаксис комментария: Описание метки:
Название_метки:
Метка может находиться только в начале строки.
Формат команды:
Название_команды аргумент1 аргумент2 ... аргументN
Пример1:
        ; comment
        label: mov reg1 reg2 ;mov reg2 to reg1
          { creating
            tree }
               crtree 100 reg1
      
Пример 2:
        mov r1 "Hello, World!"
        prn [r1]    ; напечатает "Hello, World!"
        prn r1      ; напечатает символ в кодом 0
      

Общее описание системы команд

  1. Команды общего назначения
    Название командыАргументы командыОписание команды
    movdest srcСкопировать значение источника в приемник
    prnstrНапечатать строку на stdout
    xchgreg1 reg2Обменять значения регистров местами
    pushvalueПоложить значение в стек
    popregВытолкнуть значение из стека

  2. Арифметические команды
    Название командыАргументы командыОписание команды
    adddest srcСложение
    subdest srcВычитание
    muldest srcУмножение
    divdest srcДеление
    moddest srcОстаток от деления
    shrdest valueСдвиг вправо
    shldest valueСдвиг влево
    negdestПолучение противоположного числа
    incdestИнкремент
    decdestДекремент
    anddest srcПобитовое И
    ordest srcПобитовое ИЛИ
    xordest srcПобитовое исключающее ИЛИ
    notdestПобитовый инкремент

  3. Команды перехода
    Название командыАргументы командыОписание команды
    jelabelПерейти, если равно
    jnelabelПерейти, если не равно
    jllabelПерейти, если меньше
    jlelabelПерейти, если меньше или равно
    jglabelПерейти, если больше
    jgelabelПерейти, если больше или равно
    jnllabelПерейти, если не меньше
    jnglabelПерейти, если не больше
    jmplabelПерейти безусловно
    calllabelПерейти и положить в стек адрес возврата
    retВернуться по адресу на вершине стека
    cmpvalue1 value2Сравнить 2 числа
    exitПрервать выполнение программы
    nopПустая операция

  4. Строковые операции
    Название командыАргументы командыОписание команды
    scatdest srcКонкатенация строк
    scmpstr1 str2Сравнение строк
    sindstr indexПолучение символа в строке
    slenstrПолучение длины строки
    movsdest srcЗагрузка строки

  5. Команды работы с деревьями
    Название командыАргументы командыОписание команды
    crtreenodecnt attrcntСоздание дерева с ...
    rmtreeУдаление активного дерева
    gettcПолучение количества деревьев
    actreeindexАктивация дерева
    getactreeПолучение номера активного дерева в теблице деревьев
    getrtПолучение корня активного дерева
    getccindexПолучение количества детей
    getdcindexПолучение количества всех потомков
    getcindexc indexПолучение ребенка
    getpindexПолучение родителя
    addcindexc indexpДобавление нового ребенка
    rmnindexУдаление узла
    addattindex name valueДобавление атрибута
    rmattindex name valueУдаление атрибута
    getattindex nameПолучение атрибута
    getacindexПолучение количества атрибутов
    xchgnindex1 index2Перестановка узлов дерева
    sntreeЗаполнить поля с дополнительной информацией об узле
    gctindexСобрать мусор в дереве с указанным номером

    Результат команд записывается в регистр r1, в случае ошибки в этот же регистр посылается -1