2011-06-30 48 views
2

根據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 
+0

我不知道這樣的環境,但你可以從緩存是痛苦。許多環境都是行緩衝的,並在新行「\ n」上清空緩衝區。嘗試追加'\ n'到最後一個printf。 – cdarke

+0

謝謝,但那並沒有解決。 –

+0

這只是一個黑暗中的鏡頭,但'mmix-gcc hellommix.c -o hellommix'緊跟着'mmix hellommix'abc「'效果更好嗎? (與您發佈的鏈接中的示例更緊密匹配,並符合警告:__Caution:永遠不要使用相對路徑(../dir),始終使用絕對路徑(/ path/to/dir)__ ) –

回答

1

嘗試那些:

  • fflush (stdout);飛去。 (雖然通常,posix'man 3 exit告訴所有緩衝區都刷新;也許mmix具體)
  • 轉儲所有參數,只是爲了看看有什麼。

-

for (int x=0; x!=argc; ++x) { 
    printf ("arg %d: \"%s\"\n", x, argv[x]); 
} 
+0

感謝您的建議。遺憾的是,沒有比這更好的了。 mmix也許是gcc-4.6的一些迴歸。對於使用for循環的代碼,我會得到輸出「arg arg hello」,即使沒有換行符也會被打印出來。 –

+0

奇怪。那麼我會認爲glibc(或者不是glibc,在你的平臺上的C庫)是越野車,而不是gcc本身。也許嘗試適當的錯誤跟蹤器或郵件列表? –

+0

另一個說明:開發人員是否認爲mmix支持已經成熟? (只是一個想法) –