Печать номера, содержащегося в реестре
Я изучаю MMIX, поэтому я попытался создать простую программу, чтобы добавить ее себе и распечатать результат. К сожалению, это ничего не печатает. Вот моя программа:
n IS $4
y IS $3
t IS $255
LOC #100
Main SET n,1 %let n = 1
ADD y,n,1 %add 1 to n and store the result in y
LDA t,y
TRAP 0,Fputs,StdOut
TRAP 0,Halt,0
Что я делаю неправильно?
1 ответ
Я понял это, увидев здесь код. Я должен был сначала создать байт, а затем сохранить значение регистра в байте. Затем, распечатав этот байт, я получаю результат ADD y,n,1.
Ссылка в собственном ответе Роберта не работает. И объяснение неудовлетворительное.
Основная проблема в том, что нет
printf
в сборке MMIX. Таким образом, вы не можете просто напечатать число напрямую. Его нужно преобразовать в строку для
Fputs
работать.
Как только вы это узнаете, решение будет простым. Задача состоит в том, чтобы закодировать его в MMIX. Программа ниже обрабатывает одно беззнаковое число.
// printnum.mms
// run with MMIX simulator or visual debugger: https://mmix.cs.hm.edu
n IS $4
y IS $3
t IS $255
// a register for extracting a digit
digit IS $5
// a 16-byte buffer for the converted string
buf OCTA 0
LOC #100
Main SET n,1 %let n = 1
ADD y,n,1 %add 1 to n and store the result in y
// convert y to ascii digits and store in buf
GETA t,buf+16
// divide and set digit to the remainder register rR
1H DIV y,y,10
GET digit,rR
// convert digit to ascii character
INCL digit,'0'
// fill buffer from the end
SUB t,t,1
STBU digit,t,0
// loop back to 1H for more digits
PBNZ y,1B
// print the converted string
// this works because string offset is already in register $255
TRAP 0,Fputs,StdOut
TRAP 0,Halt,0