Skip to content

Commit

Permalink
Repo(README):Доб-ие
Browse files Browse the repository at this point in the history
  • Loading branch information
BROsandr committed Mar 12, 2024
1 parent bad76b3 commit 8490254
Showing 1 changed file with 69 additions and 0 deletions.
69 changes: 69 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# CYBERcobra assembler

Данный репозиторий содержит программу ассемблера и ISA для архитектуры [CYBERcobra 3000 Pro 2.1](https://github.com/MPSU/APS/tree/master/Labs/04.%20Primitive%20programmable%20device).

## ISA

Набор команд схож с набором *rv32i*

1. `add` `rd` , `rs1`, `rs2`
1. `sub` `rd` , `rs1`, `rs2`
1. `xor` `rd` , `rs1`, `rs2`
1. `or` `rd` , `rs1`, `rs2`
1. `and` `rd` , `rs1`, `rs2`
1. `sra` `rd` , `rs1`, `rs2`
1. `sll` `rd` , `rs1`, `rs2`
1. `srl` `rd` , `rs1`, `rs2`
1. `slts` `rd` , `rs1`, `rs2`
1. `sltu` `rd` , `rs1`, `rs2`
1. `blt` `rs1`, `rs2`, `imm`
1. `bltu` `rs1`, `rs2`, `imm`
1. `bge` `rs1`, `rs2`, `imm`
1. `bgeu` `rs1`, `rs2`, `imm`
1. `beq` `rs1`, `rs2`, `imm`
1. `bne` `rs1`, `rs2`, `imm`
1. `li` `rd` , `imm`
1. `j` `imm`
1. `in` `rd` — Загрузка в регистр `rd` данных с внешнего устройства.
1. `out` — Вывод данных на внешнее устройство. Является псевдоинструкцией для инструкции `add` `x0`, `x1`, `x0`

## Программа ассемблера

Транслирует язык ассемблера обсуждаемой архитектуры в машинные коды киберкобры.

### Сборка

* **Внешние зависимости**:
* CatchV3 — нужен только для сборки тестов. Исполняемые файл можно собрать и без него.
* **Система сборки** - meson.

### Запуск программы

Программа взаимодействует со средой через дескрипторы `stdin`, `stdout`, `stderr`. Таким образом можно использовать средства ОС для перенаправления соответствующих потоков.

На вход принимается текстовый файл, написанный на языке ассемблера, на выход поступает **текстовый** файл с транслированными машинными инструкциями записанными в шестнадцатеричной системе счисления.

Пример ассемблирования файла `program.s` с записью результата в `program.mem` в `powershell`:

```powershell
Get-Content .\test\program.s | .\build\cybercobra_assembler.exe > .\build\program.mem
```

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

1. Поддерживаются все инструкции из [ISA](#isa).
1. Каждая инструкция должна быть на отдельной строке.
1. Пробельные символы игнорируются.
1. Поддерживаются однострочные комментарии (игнорируются).

```
add x1, x2, x3 # x1 = x2 + x3
```
1. Поддерживаются метки.
```
start:
j start
```
Пример программы на языке можно найти [здесь](./test/program.s).

0 comments on commit 8490254

Please sign in to comment.