你如何獲得該C與SPARC彙編相當於:SPARC彙編參數中的printf格式說明符?
printf("Hello, my name is %s.\n", name);
使用的函數原型:
void printName(const char* msg, const char* name)
其中msg是 「你好,我的名字爲%s \ n」。
我知道我可以用.asciz在數據段中定義「你好,我的名字是%s。\ n」,而沒有第一個參數msg,但是有沒有辦法將一個字符串傳遞給一個彙編函數會有%s的標識符嗎? char *甚至可以採用格式標識符嗎?我試過以下,但我得到了一個核心轉儲。用C
函數調用:
char * msg = "Hello, my name is %s.\n";
char * name = "Foo";
printName(msg, name);
大會:
mov %i0, %o0
mov %i1, %o1
call printf, 2
nop
也許我沒有正確地接近函數原型?
我不明白的問題。該C代碼片段是否工作?如果是這樣,爲什麼不看一下編譯器生成的彙編器呢? – 2011-04-28 07:08:49
奧利是對的,看着生成的彙編程序將是你最簡單的方法。我不知道sparc彙編程序,但是你可能會發現C函數的參數被傳遞到堆棧上,而不是作爲寄存器(這看起來就像你在做什麼)。如果你還沒有,我會開始嘗試獲得'printf(「hello world \ n」);'先工作,即沒有參數說明符,然後從那裏開始工作。 – forsvarir 2011-04-28 14:46:07