0
原始編碼:額外的步驟以彙編語言
void main()
{
int x = 1;
printf("%d\n", x);
}
對應彙編代碼是:
|0x80483f5 <main+17> mov $0x80484e0,%eax
│0x80483fa <main+22> mov 0x1c(%esp),%edx
│0x80483fe <main+26> mov %edx,0x4(%esp)
│0x8048402 <main+30> mov %eax,(%esp)
│0x8048405 <main+33> call 0x8048300 <[email protected]>
It first moves the string "%d\n" in %eax ---->Extra Step
Then it moves the value of 0x1c(%esp) in %edx ---->Extra Step
然後這兩個值被放置在堆棧的頂部爲一個標準的過程調用即打電話給printf()
我的問題是,爲什麼兩個額外的步驟?爲什麼不能直接從內存中獲取這些值,並直接將其保存在堆棧中而不是使用兩個寄存器?
如果在開啓所有優化(假設您還沒有)的情況下進行編譯,程序集是否會大不相同? – NPE