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

Date: 2023-09-10 08:59 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Оно многопроцессорное или только на одно ядро?

Date: 2023-09-10 13:28 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Аплодисменты!

Что-то захотелось тоже на миксе попрограммировать, давненько не брал в руки шашки.

Date: 2023-09-10 19:54 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Я как-то наоптимизировал расчет даты пасхи, послал Кнуту; тот мне ответил, что меня уже обогнали, но получил он мое письмо как раз в пасху, так что ХВ.