#include void main()
{ std::cout<<"hello world"<7?1:4;
if (b==1)
{ std::cout<<"b equal 1"<
判斷語句有幾種
1.條件表示式:表示式1?表示式2:表示式3
2.if語句
3.switch語句
首先來分析if語句吧:
debug版:
0040117d . 68 3c404300 push offset test3.??_c@_0m@bni@hello?5wo>; ascii "hello world"
00401182 . 68 50b54300 push offset test3.std::cout
00401187 . e8 14ffffff call test3.004010a0
0040118c . 83c4 08 add esp,8 ; a賦值為8
0040118f . 8bc8 mov ecx,eax ; 申明b
00401191 . e8 ddfeffff call test3.00401073
00401196 . c745 fc 08000>mov dword ptr ss:[ebp-4],8 ; 傳值8到 ebp-4 中
0040119d . 33c0 xor eax,eax ; 清空eax
0040119f . 837d fc 07 cmp dword ptr ss:[ebp-4],7 ; 8與7比較
004011a3 . 0f9ec0 setle al ; 是否大於7 大於則al為1
004011a6 . 48 dec eax ; 運算元自減1 eax為0
004011a7 . 24 fd and al,0fd ; al與 11111101作與運算
004011a9 . 83c0 04 add eax,4 ; eax加4
004011ac . 8945 f8 mov dword ptr ss:[ebp-8],eax ; 4 mov 到 b中
004011af . 837d f8 01 cmp dword ptr ss:[ebp-8],1 ; 比較指令 b值與1比較
004011b3 . 75 20 jnz short test3.004011d5 ; 與1不相等則跳轉到 位址004011ee 輸出b equal 2語句
004011b5 . 68 28104000 push test3.00401028
004011ba . 68 30404300 push offset test3.??_c@_09mflh@b?5equal?>; 相等 則輸出b equal 1
004011bf . 68 50b54300 push offset test3.std::cout
004011c4 . e8 d7feffff call test3.004010a0
004011c9 . 83c4 08 add esp,8
004011cc . 8bc8 mov ecx,eax
004011ce . e8 a0feffff call test3.00401073
004011d3 . eb 1e jmp short test3.004011f3
004011d5 > 68 28104000 push test3.00401028
004011da . 68 24404300 push offset test3.??_c@_09dkao@b?5equal?>; ascii "b equal 2"
004011df . 68 50b54300 push offset test3.std::cout
004011e4 . e8 b7feffff call test3.004010a0
004011e9 . 83c4 08 add esp,8
004011ec . 8bc8 mov ecx,eax
004011ee . e8 80feffff call test3.00401073
004011f3 > 68 1c404300 push offset test3.??_c@_05pbcn@pause?$aa>; /command = "pause"
004011f8 . e8 737e0000 call test3.system ; \system
if語句主要呼叫了 cmp指令 和 jnz指令。 switch語句反彙編分析
switch語句如下 反彙編 為 將區域性變數flag存放現在棧底即 ebp 8 然後通過 eax做中轉,在 ebp 4 存放乙個 flag 的備份,複製到 ecx中對其進行減一操作,其中的1則是 case 分支中的最小值,然後將操作完的數儲存到 ebp 4 中,此時為 flag 1 2 接著進行 ...
switch語句反彙編分析
假設switch語句的分支比較少的時候 例如3,少於4的時候沒有意義 沒有必要使用此結構,相當於if 可觀察反彙編得出此結論 1 各個分支常量的差值較大的時候,編譯器會在效率還是記憶體進行取捨,這個時候編譯器還是會編譯成類似於if,else的結構。2 在分支比較多的時候 在編譯的時候會生成乙個大表 ...
C 反彙編四 SWITCH語句
004015d0 push ebp 004015d1 mov ebp,esp 004015d3 sub esp,48h 004015d6 push ebx 004015d7 push esi 004015d8 push edi 004015d9 lea edi,ebp 48h 004015dc mo...