vak: (Default)
[personal profile] vak
Начитавшись книжки Кнута про архитектуру MMIX, взялся я это дело попрограммировать. Перефразируя Чичикова, давненько не брал я в руки шашек ассемблера. Но вместо кнутовского mmixal задействуем GNU assembler. Он максимально повторяет стандартный синтаксис для MMIX, но в несколько более современном стиле. Где скачать или как собрать GCC тулчейн для MMIX я уже как-то рассказывал.

Адаптируем для GNU ассемблера стандартный пример hello.mms. Получается такой файл hi.S:
#define Halt    0
#define Fputs 7
#define StdOut 1

.text
.global _init
_init LDA $255, text // Put address of text message into register $255
TRAP 0, Fputs, StdOut // System call Fputs()
SET $255, 0 // Exit code
TRAP 0, Halt, 0 // System call Halt()

.section .rodata
text .asciz "Hi, GNU assembler!\n"
Компилируем:
$ mmix-gcc -nostdlib hi.S -o hi
Запускаем с трассировкой:
$ mmix -t2 hi
1. 0000000000000100: 23fffe00 (ADDUI) $255=g[255] = 272 = #110
Hi, GNU assembler!
1. 0000000000000104: 00000701 (TRAP) $255 = Fputs(StdOut,#110) = 19
1. 0000000000000108: e3ff0000 (SETL) $255=g[255] = #0
1. 000000000000010c: 00000000 (TRAP) Halt(0)
4 instructions, 0 mems, 12 oops; 0 good guesses, 0 bad
(halted at location #000000000000010c)
В следующий раз надо будет что-нибудь более сложное сварганить.

Справочник по системе команд MMIX, для интересующихся: mmix.cs.hm.edu/doc/instructions-en.html
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

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org