2016-02-19 76 views
0

我試圖學習彙編語言,我不確定我是否在正確的軌道上。我在彙編語言程序,我需要轉換爲C.從彙編語言編寫C程序

addq %rsi, %rdi 
addq %rdi, %rdx 
movq %rdx, %rax 
ret 

試圖通過它自己我帶着沿着

long p1(long x, long y, long z) 
{ 
x = x + y; 
z = z + x; 
long a = z; 
return a; 
} 

線的東西工作起來不管我看看哪種方式在我看來,我感覺我很親密,但當我objdump我什麼也沒有。尋找一些指導..謝謝!

+2

換個方向走。 'gcc -S ur_c.c'會產生彙編輸出來查看。 – dawg

+0

請編輯代碼。 '''應該''''。你的代碼是否有編譯錯誤? – Nik

+0

這就是我一直在嘗試但裝配輸出不匹配的問題。我不認爲我走了,但也許我是? – Ben

回答

3

你的C代碼看起來很好,並且據我所知,它和你的彙編代碼一樣。

你不應該期望編譯你的C代碼會給出和這個例子完全相同的程序集。有很多不同的方法可以將C轉換成彙編。例如,如果我用gcc -O0(沒有優化)編譯你的C代碼,我會得到更長的程序集,它將所有函數參數和變量存儲到堆​​棧中。這是不必要的(而且速度較慢),但使調試器更容易。如果我有gcc -O2編譯,我得到

leaq (%rdi,%rsi), %rax 
    addq %rdx, %rax 
    ret 

這裏編譯器取得了巧妙地利用了lea instruction做加法和一個指令一個動作。

+0

啊,這就是我混淆的地方。我想如果我要給它正確的C代碼,我可以反彙編它。 – Ben

+0

這就是說,這將是同樣的事情,以簡化它,並使其長期= a + x + y + z; 是否正確? – Ben

+0

@Ben:是的,或者甚至是一行'return x + y + z;' –