Данный транслятор представляет все инструкции "как есть", без каких-либо оберток. При создании сохранялись основные признаки синтаксиса FASM. Инструкции бывают безоперандовыми, однооперандовыми(инструкции UART), двухоперандовыми и трехоперандовыми.
- nop - пустая инструкция 0 оп
- hlt - конец программы 0 оп
- sets - задать скорость UART 1 оп
- ins - поучить инфорацию UART 1 оп
- in - прочитать с UART 1 оп
- out - отправить на UART 1 оп
- mov - копирование данных 2 оп
- shr - сдвиг вправо на 1 2 оп
- shl - сдвиг влево на 1 2 оп
- lds - загрузка из памяти 2 оп
- not - логическое "не" 2 оп
- add - сложение 3 оп
- sub - вычитание 3 оп
- and - логическое "и" 3 оп
- or - логическое "или" 3 оп
- xor - исключающее "или" 3 оп
- cmpa- op1 = op2 > op3 ? -1 : 0 3 оп
- cmpe- op1 = op2 == op3 ? -1 : 0 3 оп
- cmpb- op1 = op2 < op3 ? -1 : 0 3 оп
- jnz - op1 = op2 == -1 ? op3 : op1 3 оп
- jz - op1 = op2 == 0 ? op3 : op1 3 оп
instr op1, op2, op3
Где:
- op1 - назначение, может быть только регистром (r:n)
- op2 - может быть регистром или литералом, если op2 - литерал, то op3 не существует. Тогда op2 - длинный литерал (20 бит)
- op3 - существует только если op2 регистр. Можеть быть регистром или коротким литералом (15 бит). Количество операндов для каждой инструкции см. список инструкций. Синтаксис lds: Lds имеет два варианта:
- Загрузка в память по адресу в регистре lds [r:n], r:n
- Загрузка из памяти по адресу в регистре lds r:n, [r:n]
Программа имеет следующий формат:
format binary
include "ISA.inc" ;полный путь к ISA.inc, если программа в другой папке
... ;инструкции
Ему в качестве аргумента командной строки передается адрес файла с программой без расширения (расширение должно быть .asm). В папке с программой он создаст файлы формата .bin с инструкциями в двоичном виде и файл формата .mif для Quartus. Исходный код транслятора и exe-шник прилагаются в виде mif_converter.asm и mif_converter.exe
- Увеличенное количество макросов
- Авто сборку
- Циклы
- Условные операторы