Начитавшись книжки Кнута про архитектуру MMIX, взялся я это дело попрограммировать. Перефразируя Чичикова, давненько не брал я в руки шашек ассемблера. Но вместо кнутовского mmixal задействуем GNU assembler. Он максимально повторяет стандартный синтаксис для MMIX, но в несколько более современном стиле. Где скачать или как собрать GCC тулчейн для MMIX я уже как-то рассказывал.
Адаптируем для GNU ассемблера стандартный пример hello.mms. Получается такой файл hi.S:
Справочник по системе команд MMIX, для интересующихся: mmix.cs.hm.edu/doc/instructions-en.html
Адаптируем для 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