asm source code note 1.6_if else分支的实现
发布日期:2021-06-30 22:06:02
浏览次数:2
分类:技术文章
本文共 3315 字,大约阅读时间需要 11 分钟。
源代码
// test1020.cpp : Defines the entry point for the console application.//#include "stdafx.h"#includeOD反汇编代码#include enum eNumberRange{ eNumberRange_0_100 = 1, eNumberRange_100_200, eNumberRange_200_300, eNumberRange_Unknown};/// 判断一个输入数的范围eNumberRange NumJudge(int iNumber);int _tmain(int argc, _TCHAR* argv[]){ int iDigIn = 0; srand( (unsigned)time( NULL ) ); iDigIn = rand(); _tprintf(L"NumJudge(%d) = %d\r\n", iDigIn, NumJudge(iDigIn)); getwchar(); return 0;}/// 如果iNumber在源代码中给定值, Release版编译后, 会优化掉eNumberRange NumJudge(int iNumber){ if ((iNumber >= 0) && (iNumber < 100)) return eNumberRange_0_100; else if ((iNumber >= 100) && (iNumber < 200)) return eNumberRange_100_200; else if ((iNumber >= 200) && (iNumber < 300)) return eNumberRange_200_300; return eNumberRange_Unknown;}
01091000 >/$ 6A 00 push 0 ; 调用srand01091002 |. FF15 B0200901 call dword ptr [<&MSVCR90._time64>] ; MSVCR90._time6401091008 |. 50 push eax ; /seed01091009 |. FF15 AC200901 call dword ptr [<&MSVCR90.srand>] ; \srand0109100F |. 83C4 08 add esp, 801091012 |. FF15 A8200901 call dword ptr [<&MSVCR90.rand>] ; [rand01091018 |. 85C0 test eax, eax ; rand的出参在eax0109101A |. 7C 0C jl short 01091028 ; < 0 , 不是 >=0 ~ <100, next judge0109101C |. 83F8 64 cmp eax, 640109101F |. 7D 0C jge short 0109102D ; >= 100, 不是>=0 ~ <100, next judge01091021 |. B9 01000000 mov ecx, 1 ; 0 < N <= 10001091026 |. EB 2B jmp short 01091053 ; 判断完成01091028 |> 83F8 64 cmp eax, 640109102B |. 7C 0E jl short 0109103B ; < 100, 不是 >=100 ~ < 200, next judge0109102D |> 3D C8000000 cmp eax, 0C801091032 |. 7D 0E jge short 01091042 ; >= 200, 不是 >=100 ~ < 200, next judge01091034 |. B9 02000000 mov ecx, 2 ; 100 <= N < 20001091039 |. EB 18 jmp short 01091053 ; 判断完成0109103B |> 3D C8000000 cmp eax, 0C801091040 |. 7C 0C jl short 0109104E ; < 200, 不是 >=200 ~ < 300, next judge01091042 |> 3D 2C010000 cmp eax, 12C01091047 |. B9 03000000 mov ecx, 3 ; 当成是N = 200~3000109104C |. 7C 05 jl short 01091053 ; 如果小于 300, 就判断完成, >=200 ~ < 3000109104E |> B9 04000000 mov ecx, 4 ; 4 = 未知, 不在有效范围内.01091053 |> 51 push ecx ; |ecx 是判断结果, 判断结束, 压入参数, 调用wprintf01091054 |. 50 push eax ; |01091055 |. 68 04210901 push 01092104 ; |format = "NumJudge(%d) = %d.."0109105A |. FF15 A4200901 call dword ptr [<&MSVCR90.wprintf>] ; \wprintf01091060 |. 83C4 0C add esp, 0C01091063 |. FF15 A0200901 call dword ptr [<&MSVCR90.getwchar>] ; [getwchar01091069 |. 33C0 xor eax, eax0109106B \. C3 retn
转载地址:https://lostspeed.blog.csdn.net/article/details/4632052 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月20日 19时31分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ubuntu系统开机自启动方式
2019-05-01
ES查询效率之快的三个重要技术
2019-05-01
JDBC概念,JDBC连接到Oracle 11g(内附驱动jar包),
2019-05-01
彻底卸载MySQL
2019-05-01
Oracle创建表,修改表(添加列、修改列、删除列、修改表的名称以及修改列名)
2019-05-01
SQL命令分类(DDL、DML、DCL、TCL以及事务)
2019-05-01
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate 报错
2019-05-01
kafka集群搭建
2019-05-01
Python正则表达式,从入门到实战,精华都在这里!
2019-05-01
喜欢玩王者荣耀的有福了,用 Python 获取英雄皮肤壁纸
2019-05-01
一名数据分析师的SQL学习历程
2019-05-01
图解《金字塔原理》,7步掌握其精华!
2019-05-01
数据分析入门选择Python还是SQL?七个常用操作对比!
2019-05-01
最后一台,i7+6核电脑
2019-05-01
redis五种基本数据类型
2019-05-01
springboot整合redis框架
2019-05-01
以不同业务,redis分库概念
2019-05-01
使用redis实现订阅功能
2021-07-04
Redis主从配置
2021-07-04
Redis哨兵机制
2021-07-04