Печать номера, содержащегося в реестре

Я изучаю 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
Другие вопросы по тегам