c语言if单分支结构所对应的汇编代码结构

#include "stdafx.h"
int main(int argc, char* argv[])
{
if(argc > 8 )
{
printf("argc > 8");
if(argc > 50)
{
printf("argc > 50");
}
}
return 0;
}

注意这些与语言没有关系,这是编译原理的问题,以后看编译原理

if和else双分支的汇编结构

#include "stdafx.h"

int main(int argc, char* argv[])
{
if(argc> 0 )
{
printf("argc>0\r\n");
}
else
{
printf("argc<=0\r\n");
}
return 0;
}





双分支的结构特点:jxx的目标上一行指令为jmp,而且是往高地址去的的jmp

编译原理代码优化外提

do—while(效率最高,跳转的目标没有检测条件,往上跳)

#include "stdafx.h"
int main(int argc, char* argv[])
{
int n = 1;
int nSum = 0; do
{
nSum=nSum+n;
n++;
}
while(n<=100);
return 0;
}





1.识别代码定式

2.如果是do循环,则按jxx同条件还原等价高级代码

3.其余的代码还原则按相反的规则还原

while循环的代码定式(地址减量跳,两跳)

int main(int argc, char* argv[])
{
int n = 1;
int nSum = 0; while(n<=100){
nSum = nSum + n;
n++;
}
printf("%d",nSum);
return 0;
}





关键比较是比较的是常量,常量在是可以在编译期间预知其结果。常量传播

for循环

#include "stdafx.h"
int main(int argc, char* argv[])
{
int i = 1; ;
int nSum = 0;
for(i=1; i<=100; i++)
{
nSum = nSum+ i ;
}
printf("%d\n",nSum);
return 0;
}



if和else if

#include "stdafx.h"
int main(int argc, char* argv[])
{
int nSum = 0 ; if(argc ==1)
{
nSum = nSum+1;
}
else if(argc == 2)
{
nSum = nSum-1;
}
else if(argc == 3)
{
nSum = nSum*argc;
}
else
{
nSum = nSum / argc;
}
return 0;
}

常量传播

常量折叠

四则运算运算符难 算法逆向最难对象的简单最简单。

c语言分析和循坏对应的汇编定义格式(Debug版本)的更多相关文章

  1. java(5)循坏结构

    一. while循环 1.循环的优点? 减少重复代码的编写:程序会更加的简洁 2.语法 while(表达式){ // 1.表达式是[循环条件],结果必须是boolean类型 //2.{}中的代码,即[ ...

  2. 哈工大LTP语言分析:分词、词性标注、句法分析等

    1. LTP介绍和安装 LTP语言云官网  在线演示 | 语言云(语言技术平台云 LTP-Cloud) 安装LTP的python接口包 $ sudo pip install pyltp 模型文件下载 ...

  3. R语言分析朝阳医院数据

    R语言分析朝阳医院数据 本次实践通过分析朝阳医院2016年销售数据,得出“月均消费次数”.“月均消费金额”.“客单价”.“消费趋势”等结果,并据此作出可视化图形. 一.读取数据: library(op ...

  4. 流程控制之while循坏

    流程控制之while循坏 一.语法 循环就是一个重复的过程,我们人需要重复干一个活,人岂不是要累死啊,而且还是那么-..的枯燥乏味,向我这样要的小年轻,不骚里骚气的行吗?那岂不是白白流浪了这么多年头, ...

  5. python while循坏和for循坏

    while循坏 while 条件: 条件成立,执行循坏体(注意,while循坏必须有结束条件,不然会进入死循坏) 简单做个演示: # -*- coding:utf-8 -*- # Author:覃振鸿 ...

  6. GO语言的进阶之路-Golang高级数据结构定义

    GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解, ...

  7. for语句嵌套循坏性能的剖析

    日常工作中,处理数据难免会遇到遍历,for循环可能是我们用的比较多的了.本节就来探讨下for语句嵌套循环的性能,猜想下面两个语句的性能. 语句1 ; i < ; i++){ ; j < ; ...

  8. 用R语言分析我的fitbit计步数据

    目标:把fitbit的每日运动记录导入到R语言中进行分析,画出统计图表来 已有原始数据:fitbit2014年每日的记录电子表格文件,全部数据点此下载,示例如下: 日期 消耗卡路里数 步 距离 攀爬楼 ...

  9. 用R语言分析与预測员工离职

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/83542978 https://mmbiz.qpic ...

  10. 使用R语言分析股价波动

    今天看的R语言.做个笔记. 使用R语言读取雅虎財经数据.分析微软公司(股票代码:MSFT)在2015年股价波动超过百分之十的日期. 然后通过检索新闻的方式,看看微软当天有什么新闻发生,导致股价波动. ...

随机推荐

  1. DFS手写排列

    DFS手写排列 虽然python中有自带的排列函数,但是在某些特殊情况需要手写排列.掌握了DFS手写排列对DFS的理解有一定的帮助. 1.手写排列(非字典序输出) 这种代码比较简单易懂,但是不是按照字 ...

  2. Python全栈开发工程师 day57 jQuery

    二.jQuery样式操作标签样式操作<!DOCTYPE html><html lang="en"><head> <meta charset ...

  3. C# 获取指定窗口的上层窗口

    如何获取当前窗口层级上方的所有窗口信息 User32有函数GetWindow function (winuser.h) - Win32 apps | Microsoft Docs,可以根据已知窗口句柄 ...

  4. celery+Rabbit MQ简单的Demo

    介绍 一个简单的celery + rabbitmq 的搭建例子,用于记录 Celery 异步处理框架, 安装命令 pip install celery RabbitMQ 消息中间件,用来做队列 安装配 ...

  5. selenium web控件的交互进阶

    Action ActionChains: 执行PC端的鼠标点击,双击,右键,拖曳等事件 TouchActions: 模拟PC和移动端的点击,滑动,拖曳,多点触控等多种手势操作 动作链接 ActionC ...

  6. Python中json.dump()和json.dumps()的区别

    一.图解 json.dumps(dict, indent):将Python对象转换成json字符串 json.dump(dict, file_pointer):将Python对象写入json文件 二. ...

  7. Node.js出现‘Cannot find module init’ 解决方法

    1. 首先查看当前根目录是否有node_module文件夹,如果有,请删除 2. 输入 npm clean cache 3. 再次输入 node init -y 大功告成

  8. Qt数据可视化项目

    一.创建项目(步骤按常规来即可) 二.ui设计界面 控件的使用 默认视角:Label标签和horizontalSlider标签 水平旋转:Label标签和horizontalSlider标签 垂直旋转 ...

  9. 不要轻易尝试 weexplus open as

    昨日使用 weexplust publish android 编译apk, 出现了一大堆错 FAILURE: Build failed with an exception. * What went w ...

  10. U3DFrameWorkDemo:二、资源管理

    代码参考 代码文件参考下述详解的类图,工程参考第零章工程说明 概述 在游戏项目中有很多资产如:预制体,图片,音频,Lua脚本,Shader等等.他们随打包放在用户的硬盘里.在游戏的运行过程中,需要对这 ...