Перейти к содержанию

CASM46

CASM46 (Cawas Assembler for i8046) - ассемблер для процессора i8046. Работает с 24-битным кодом Big Endian и сразу выдаёт плоский бинарник.

Параметр Значение
Целевой процессор i8046 (24 бита)
Порядок байтов Big Endian
Формат вывода .bin + .hex
Язык Python 3
Файл CASM46.py
Статус Архивный (I8046 заморожен)

Использование

python CASM46.py program.asm -o program.bin

Опции:

Опция Описание
-o file Имя выходного файла (по умолчанию output.hex)

На выходе получаются два файла: output.hex (Logisim v2.0 raw) и output.bin (сырой бинарник).

Синтаксис

  • Комментарии - ;.
  • Метки - идентификатор с :.
  • Сегменты .TEXT, .DATA, .RODATA, .BSS поддерживаются, но сливаются в один поток (объектный режим отсутствует).
  • Директивы .ORG, .DB, .DW, .DD, .DA (24-битные адреса).

Регистры

Имя Адрес Имя Адрес
R0 00h IX 10h
X1 01h IY 11h
XL1 02h SP 12h
XH1 03h BP 13h
X2 04h CS 14h
XL2 05h DS 15h
XH2 06h SS 16h
X3 07h ES 17h
XL3 08h SCS 18h
XH3 09h SDS 19h
X4 0Ah SSS 1Ah
XL4 0Bh SES 1Bh
XH4 0Ch A0 1Ch
X5 0Dh A1 1Dh
XL5 0Eh FL 1Eh
XH5 0Fh IC 1Fh

Система команд

Полный список - в разделе Система команд i8046. Кратко:

  • Арифметика: ADD, ADC, SUB, SBB, MUL, IMUL, DIV, IDIV.
  • Логика: AND, OR, XOR, NOT, INC, DEC, LSL, LSR, ASR, ROL, ROR.
  • Сравнение: CMP, ICMP.
  • Переходы: JMP (с условиями .C, .Z, .NZ, .GR, .GE, .LS, .LE, .EQ, .NE и т.д.).
  • Память: MOV, LDI.b/w/a, STR.b/w/a, LOD.b/w/a.
  • Стек: PUSH, POP, CALL, RET.
  • Система: NOP, HALT, CLI, STI, INT, IRET, WRINT, LOCK, UNLOCK.

Адресация STR/LOD

Ассемблер сам выбирает режим по синтаксису операнда:

Режим Пример Формат
Flat [0x00020018] D2F / D3F
Segment [rB:rA] D2S / D3S
Register [rA] D2R / D3R

Пример

        .ORG 0x000000
        .TEXT
main:
        LDI.a A0, 0x00020110    ; DISK_STATUS
        LOD.b XL1, [A0]
        CMP.b XL1, 0
        JMP.NZ main
        HALT