我正在学习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
我做错了什么?
答案 0 :(得分:2)
在看到代码here后,我最终搞清楚了。我必须首先创建一个字节,然后将寄存器的值存储到字节中。然后通过打印出该字节,我得到ADD y,n,1的结果。
答案 1 :(得分:0)
Robert自己的回复中的链接已断开。解释也不尽人意。
主要问题是MMIX程序集中没有printf
。因此,您不能直接打印数字。需要将其转换为字符串,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