x86128: (Default)
x86128 ([personal profile] x86128) wrote2021-04-30 09:48 pm

Баловство на Python

В качестве небольшого pet-project состряпал на Python клон МЭСМ-6 и ассемблера к ней.

Машина проходит основные тесты от МЭСМ-6. В папке examples лежат не столько примеры кода на ассемблере, сколько недо тесты ассемблера. По сути рабочий там hello.asm который печатает в stdout "hello, world!!!"


# hello world using loop
org 1
ptr prn0 32767

# loop setup
vtm -15,2
lbl loop
xta hello+15,2
atx prn0
vlm loop,2
stop 0o12345,6
dorg 0o2000
arr hello "Hello, world!!!\n"


Скомпилировать его можно так:

python3 asm/asm.py -i examples/hello.asm


и запустить:

python3 pymesm.py -i examples/hello.oct


Hello, world!!!
CPU halted at 00003 with 12345
Success
Simulation finished.
Остальные тесты лежат в папке test/

Код реализации МЭСМ местами умышленно кучерявый :))))))))), например:

popcount(x) = bin(x).count("1") # раз Python то почему бы и нет!

Синтаксис ассемблера отличается от общепринятых.
Делал с ручной токенизацией по принципу "команда аргумент" для того чтобы понимать на практике во что превращается LL(1) грамматика принятая в языках типа Pascal или Go.
Хотел прикинуть сложность возможной реализации языка Оберон для МЭСМ.

https://github.com/x86128/pymesm



Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting