簡體   English   中英

用匯編語言編寫C程序

[英]Writing a C program from Assembly language

我正在嘗試學習匯編語言,但不確定自己是否走對了。 我有一個需要用匯編語言轉換為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;
}

不管我以哪種方式看,我都感覺自己已經接近,但是當我轉儲時,我什么也收不到。 尋找一些指導..謝謝!

您的C代碼看起來不錯,據我所知,它與匯編代碼具有相同的作用。

您不必一定期望編譯C代碼會提供與示例完全相同的匯編。 有很多不同的方法可以將C轉換為匯編語言。

例如,如果我用gcc -O0編譯您的C代碼(沒有優化),我得到的匯編時間會更長,它將所有函數參數和變量存儲到堆​​棧中。 這是不必要的(並且速度較慢),但對於調試器而言則更容易。 如果我用gcc -O2編譯,我得到

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

在這里,編譯器巧妙地使用lea指令對一條指令進行加法和移動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM