我正在查看一些通過反彙編一些C程序生成的程序集,我很困惑我經常重複的單個優化。爲什麼GCC發射「lea」而不是「sub」進行減法?
當我對GCC編譯器沒有優化使用subl
指令減法,但是當我有優化接通(-O3
要準確)編譯器使用一個leal
指令而不是減法,例如下面:
沒有優化:
83 e8 01 subl $0x1, %eax
與優化
8d 6f ff leal -0x1(%edi), %ebp
這兩個指令都是3個字節長,所以我在這裏沒有看到優化。有人可以幫我解釋一下編譯器的選擇嗎?
任何幫助,將不勝感激。
我沒有從這個角度考慮它,因爲非優化版本只使用減法中的立即值。謝謝,這非常有幫助。 –