C++反汇编->if语句分析

#include <iostream>

void main()
{
	std::cout<<"hello world"<<std::endl;
	int a=8;
	int b;
	b=a>7?1:4;
    
	if (b==1)
	{
		std::cout<<"b equal 1"<<std::endl;
	} 
	else
	{
		std::cout<<"b equal 2"<<std::endl;
	}
	system("pause");
}
先贴一段代码,对于if语句的分析,首先理清想做什么。

判断语句有几种

    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指令。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值