x86128: (Default)
[personal profile] x86128
В качестве небольшого 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


Profile

x86128: (Default)
x86128

April 2023

S M T W T F S
      1
2345678
9101112131415
16171819202122
232425 26272829
30      

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 10:58 am
Powered by Dreamwidth Studios