C++笔记:for / while / do while 运用时机

综述:
执行效率: do while > while / goto > for


1. goto

1.1 源码
	int password{ 98765432 };
	int crackPass{};
	//goto
lcrack:
	if (crackPass != password)
	{
		crackPass ++;
		goto lcrack;
	}
	std::cout << "密码为 " << crackPass <<std::endl;
1.2. 汇编代码
//goto 7行汇编代码
lcrack:
	if (crackPass != password)
00D32646  mov         eax,dword ptr [crackPass]  
00D32649  cmp         eax,dword ptr [password]   // 比较
00D3264C  je          lcrack+13h (0D32659h)   //判断是否相等
	{
		crackPass ++;
00D3264E  mov         eax,dword ptr [crackPass]  
00D32651  add         eax,1  
00D32654  mov         dword ptr [crackPass],eax  
		goto lcrack;
00D32657  jmp         lcrack (0D32646h)  
	}
	std::cout << "密码为 " << crackPass <<std::endl;

2. for 循环

2.1. 源码
	for (crackPass = 0; crackPass != password; crackPass++)
		if (crackPass == password) break;
	std::cout << "密码为 " << crackPass << std::endl;
2.2. 汇编
	//for  汇编代码 12行
	for (crackPass = 0; crackPass != password; crackPass++)
00D32698  mov         dword ptr [crackPass],0      //初始化
00D3269F  jmp         lcrack+64h (0D326AAh)     // 跳转到 0D326AA
00D326A1  mov         eax,dword ptr [crackPass]  
00D326A4  add         eax,1  
00D326A7  mov         dword ptr [crackPass],eax  
00D326AA  mov         eax,dword ptr [crackPass]  
00D326AD  cmp         eax,dword ptr [password]  
00D326B0  je          lcrack+78h (0D326BEh)  
		if (crackPass == password) break;
00D326B2  mov         eax,dword ptr [crackPass]  
00D326B5  cmp         eax,dword ptr [password]  
00D326B8  jne         lcrack+76h (0D326BCh)  
00D326BA  jmp         lcrack+78h (0D326BEh)  
	std::cout << "密码为 " << crackPass << std::endl;

3. while

3.1. 源码
crackPass = 0;
while (crackPass != password)crackPass++;
std::cout << "密码为 " << crackPass << std::endl;
3.2. 汇编
	crackPass = 0;
00D326FD  mov         dword ptr [crackPass],0  
	while (crackPass != password)crackPass++;
00D32704  mov         eax,dword ptr [crackPass]  
00D32707  cmp         eax,dword ptr [password]  
00D3270A  je          lcrack+0D1h (0D32717h)  
00D3270C  mov         eax,dword ptr [crackPass]  
00D3270F  add         eax,1  
00D32712  mov         dword ptr [crackPass],eax  
00D32715  jmp         lcrack+0BEh (0D32704h)  
	std::cout << "密码为 " << crackPass << std::endl;

4. do while

4.1. 源码
crackPass = -1;
	do crackPass++; while (crackPass != password);
	std::cout << "密码为 " << crackPass << std::endl;
4.2. 汇编
	crackPass = -1;
00D32756  mov         dword ptr [crackPass],0FFFFFFFFh  
	do crackPass++; while (crackPass != password);
00D3275D  mov         eax,dword ptr [crackPass]  
00D32760  add         eax,1  
00D32763  mov         dword ptr [crackPass],eax  
00D32766  mov         eax,dword ptr [crackPass]  
00D32769  cmp         eax,dword ptr [password]  
00D3276C  jne         lcrack+117h (0D3275Dh)  
	std::cout << "密码为 " << crackPass << std::endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值