Данный репозиторий содержит программу ассемблера и ISA для архитектуры CYBERcobra 3000 Pro 2.1.
Набор команд схож с набором rv32i
add
rd
,rs1
,rs2
sub
rd
,rs1
,rs2
xor
rd
,rs1
,rs2
or
rd
,rs1
,rs2
and
rd
,rs1
,rs2
sra
rd
,rs1
,rs2
sll
rd
,rs1
,rs2
srl
rd
,rs1
,rs2
slts
rd
,rs1
,rs2
sltu
rd
,rs1
,rs2
blt
rs1
,rs2
,imm
bltu
rs1
,rs2
,imm
bge
rs1
,rs2
,imm
bgeu
rs1
,rs2
,imm
beq
rs1
,rs2
,imm
bne
rs1
,rs2
,imm
li
rd
,imm
j
imm
in
rd
— Загрузка в регистрrd
данных с внешнего устройства.out
— Вывод данных на внешнее устройство. Является псевдоинструкцией для инструкцииadd
x0
,x1
,x0
Транслирует язык ассемблера обсуждаемой архитектуры в машинные коды киберкобры.
- Внешние зависимости:
- CatchV3 — нужен только для сборки тестов. Исполняемые файл можно собрать и без него.
- Система сборки — meson.
Программа взаимодействует со средой через дескрипторы stdin
, stdout
, stderr
. Таким образом можно использовать средства ОС для перенаправления соответствующих потоков.
На вход принимается текстовый файл, написанный на языке ассемблера, на выход поступает текстовый файл с транслированными машинными инструкциями записанными в шестнадцатеричной системе счисления. Если во входном тексте обнаружена ошибка, то программа сообщит об этом через соответствующий дескриптор ошибки.
Пример ассемблирования файла program.s
с записью результата в program.mem
в powershell
:
Get-Content .\test\program.s | .\build\cybercobra_assembler.exe > .\build\program.mem
-
Поддерживаются все инструкции из ISA.
-
Каждая инструкция должна быть на отдельной строке.
-
Регистровые операнды записываются в виде:
x0
-x31
, аimm
операнды в виде знаковых десятичных чисел. -
Пробельные символы игнорируются.
-
Поддерживаются однострочные комментарии (игнорируются).
add x1, x2, x3 # x1 = x2 + x3
-
Поддерживаются метки.
start: j start
Пример программы на языке можно найти здесь.