根據http://www.bitrange.com/mmix/install.html,我已經爲mmix編譯了gcc 4.6.0。在我嘗試使用簡單的hello world或任何其他調用printf的函數之後,只打印第一個字符串。例如。在mmix上使用gcc的printf問題
[email protected]:~/f/c> cat hellommix.c
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
printf ("hello, %s\n", argc > 1 ? argv[1] : "world");
exit (0);
}
[email protected]:~/f/c> mmix-gcc hellommix.c
[email protected]:~/f/c> mmix ./a.out "abc"
hello, [email protected]:~/f/c>
生成的程序集是這樣的:
# 1 "hellommix.c"
! mmixal:= 8H LOC Data_Section
.text ! mmixal:= 9H LOC 8B
.section .rodata
.p2align 2
LOC @+([email protected])&3
LC:0 IS @
BYTE "world",#0
.p2align 2
LOC @+([email protected])&3
LC:1 IS @
BYTE "hello, %s",#a,#0
.text ! mmixal:= 9H LOC 8B
.p2align 2
LOC @+([email protected])&3
.global main
main IS @
SUBU $254,$254,24
STOU $253,$254,16
ADDU $253,$254,24
GET $2,rJ
SET $3,$0
SUBU $0,$253,24
STOU $1,$0,0
SUBU $0,$253,12
STTU $3,$0,0
SUBU $0,$253,12
LDT $0,$0,0
SLU $0,$0,32
SR $0,$0,32
CMP $0,$0,1
BNP $0,L:2
SUBU $0,$253,24
LDO $0,$0,0
LDO $0,$0,8
JMP L:3
L:2 IS @
GETA $0,LC:0
L:3 IS @
GETA $5,LC:1
SET $6,$0
PUSHJ $4,printf
PUT rJ,$2
SETL $5,0
PUSHJ $4,exit
.data ! mmixal:= 8H LOC 9B
我不知道這樣的環境,但你可以從緩存是痛苦。許多環境都是行緩衝的,並在新行「\ n」上清空緩衝區。嘗試追加'\ n'到最後一個printf。 – cdarke
謝謝,但那並沒有解決。 –
這只是一個黑暗中的鏡頭,但'mmix-gcc hellommix.c -o hellommix'緊跟着'mmix hellommix'abc「'效果更好嗎? (與您發佈的鏈接中的示例更緊密匹配,並符合警告:__Caution:永遠不要使用相對路徑(../dir),始終使用絕對路徑(/ path/to/dir)__ ) –