#include
#include
#include "base.h"
int main(int argc, char* argv, char* envp)
下面是彙編:
01291000 >/$ 55 push ebp
01291001 |. 8bec mov ebp,esp
01291003 |. 56 push esi
01291004 |. 8b35 a0202901 mov esi,dword ptr ds:[<&msvcr100.printf>>; msvcr100.printf
0129100a |. 57 push edi
0129100b |. 8b7d 08 mov edi,dword ptr ss:[ebp+8] ; edi的值變為1
0129100e |. 8d47 0c lea eax,dword ptr ds:[edi+c] ; eax的值變為9
01291011 |. 50 push eax ; /<%d>
01291012 |. 68 f4202901 push offset bug_c++.??_c@_04hgipldbl@?$c>; |format = "%d
"01291017 |. ffd6 call esi ; \printf
01291019 |. 83c7 09 add edi,9
0129101c |. 57 push edi
0129101d |. 68 f4202901 push offset bug_c++.??_c@_04hgipldbl@?$c>; ascii "%d
"01291022 |. ffd6 call esi
01291024 |. 47 inc edi
01291025 |. 57 push edi
01291026 |. 68 f4202901 push offset bug_c++.??_c@_04hgipldbl@?$c>; ascii "%d
"0129102b |. ffd6 call esi
0129102d |. 83c4 18 add esp,18
01291030 |. 5f pop edi
01291031 |. 33c0 xor eax,eax
01291033 |. 5e pop esi
01291034 |. 5d pop ebp
01291035 \. c3 retn
0129100b |. 8b7d 08 mov edi,dword ptr ss:[ebp+8] ; edi的值變為1
0129100e |. 8d47 0c lea eax,dword ptr ds:[edi+c] ; eax的值變為9
mov edi, dword ptr ss:[ebp + 8]
把記憶體單元中的內容送入edi
lea eax, dword ptr ds:[edi + c]
這裡之所以要用lea是因為lea載入的是相對偏移位址...就是edi + c的結果..
如果用add做
mov eax, 8(或者在記憶體中取)
add eax, edi
因為兩個數不可能是立即數...所以只能從記憶體中拿...如果用mov 則一共需要3條指令
mov eax, 9
mov edi, ***x
add eax, edi
但是用lea就可以將指令縮短為2條..因為它支援3個op的操作...
lea eax, dword ptr ds:[edi + 9]
這樣無形中節約了一條指令..
有乙個地方
今天早上的比賽終於還是勇士獲得了勝利,當時是有點小情緒,不過還好,畢竟我是較中立的球迷,當然卻還是希望雷霆贏。籃球嘛已經體會很多了。今天世界上最失落的人之一會有杜蘭特和威少吧。晚上跑步在操場遇見了隔壁班的乙個女生,挺好的,因為終於能在操場看到自己喜歡的影子了,重點當然是我認識。最近在進行乙個是軟體工...
python乙個注意的地方
class test l def init self self.l 1 2 7 a1 test a1.init 如果我這樣定義乙個類的話,執行了init方法後,a1.l的值為 1 2 7 test.l的值為。但是如果改成這樣子 class test l def init self a1 test a...
乙個關於js 優化的問題
在我們遍歷陣列 for 迴圈的時候,通常習慣的寫法是這樣 for var i 0 i myarray.length i 但是在這段 中,有乙個十分明顯的問題,就是每次在迴圈的時候,都會計算一邊 myarray.length 的值,這就意味著每次都要實時查詢dom,而dom的操作又是十分昂貴的。在這個...