知识点:
for循环生成代码1
for循环生成代码2
inc指令 一、一般情况下的for循环汇编代码分析
for (int i=;i<=;i++)
{
printf("%d,",i);
}
//00401003 |. 51 PUSH ECX ; sub esp,4;int i;
//00401004 |. C745 FC 01000>MOV DWORD PTR SS:[EBP-4],1 ; i=1;
//0040100B |. EB 09 JMP SHORT for.00401016
//0040100D |> 8B45 FC /MOV EAX,DWORD PTR SS:[EBP-4]
//00401010 |. 83C0 01 |ADD EAX,1
//00401013 |. 8945 FC |MOV DWORD PTR SS:[EBP-4],EAX ; i++;i=i+1;
//00401016 |> 837D FC 0A CMP DWORD PTR SS:[EBP-4],0A
//0040101A |. 7F 14 |JG SHORT for.00401030 ; i>10 跳出for循环
//0040101C |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4] ; ecx=i
//0040101F |. 51 |PUSH ECX ; /<%d>
//00401020 |. 68 F4204000 |PUSH for.004020F4 ; |format = "%d,"
//00401025 |. FF15 A0204000 |CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf
//0040102B |. 83C4 08 |ADD ESP,8 ; esp=esp+8
//0040102E |.^ EB DD \JMP SHORT for.0040100D
//00401030 |> 33C0 XOR EAX,EAX ; return 0; 二、速度优化下的for循环汇编代码分析 //最小化优化
//00401000 /$ 56 PUSH ESI
//00401001 |. 33F6 XOR ESI,ESI ; i=0;
//00401003 |. 46 INC ESI ; i=1;
//00401004 |> 56 /PUSH ESI ; /<%d>
//00401005 |. 68 F4204000 |PUSH for.004020F4 ; |format = "%d,"
//0040100A |. FF15 A0204000 |CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf
//00401010 |. 46 |INC ESI ; i++
//00401011 |. 83FE 0A |CMP ESI,0A ; if (i<=10) goto 401004
//00401014 |. 59 |POP ECX
//00401015 |. 59 |POP ECX
//00401016 |.^ 7E EC \JLE SHORT for.00401004
//00401018 |. 33C0 XOR EAX,EAX
//0040101A |. 5E POP ESI
//0040101B \. C3 RETN ; 33-1B //最大化速度优化
//00401000 /$ 56 PUSH ESI
//00401001 |. 57 PUSH EDI
//00401002 |. 8B3D A0204000 MOV EDI,DWORD PTR DS:[<&MSVCR90.printf>] ; MSVCR90.printf
//00401008 |. BE 01000000 MOV ESI,1 ; int i=1;
//0040100D |. 8D49 00 LEA ECX,DWORD PTR DS:[ECX] ; ecx=ecx
//00401010 |> 56 /PUSH ESI
//00401011 |. 68 F4204000 |PUSH for.004020F4 ; ASCII "%d,"
//00401016 |. FFD7 |CALL EDI ; call dword ptr [printf]
//00401018 |. 46 |INC ESI ; i++;
//00401019 |. 83C4 08 |ADD ESP,8
//0040101C |. 83FE 0A |CMP ESI,0A ; 0B
//0040101F |.^ 7E EF \JLE SHORT for.00401010 ; if (i<=10) 继续循环goto 401010
//00401021 |. 5F POP EDI
//00401022 |. 33C0 XOR EAX,EAX
//00401024 |. 5E POP ESI
//00401025 \. C3 RETN

汇编 for循环的更多相关文章

  1. 控制语句(if-else+循环+switch)汇编规则

    [1]说说条件码 最常用的的条件码有: CF:进位标志 (无符号溢出) ZF:零标志 SF:符号标志(结果为负数) OF:溢出标志 (补码溢出, 有符号溢出) [2]有两类指令设置条件码而不改变任何其 ...

  2. 汇编与C语句

    ---恢复内容开始--- 汇编与C语句 4.1C语句与汇编 学习了汇编语言之后,就需要将常用的C语言代码结构与相应的汇编语言联系起来.这样就可以在分析汇编语言的时候,明白它的意思.C语言中函数过程的调 ...

  3. Emu8086三种格式的代码-(顺序,分支,循环)

    这个学期准备考研,于是就没有怎么听别的课,现在临近期末,汇编成了个难题.下面是我学校的实验报告 做一个复习的记录吧,下面的代码都是在Emu8086上运行出来的代码 下面先介绍一下,汇编里面的格式问题 ...

  4. JVM执行篇:使用HSDIS插件分析JVM代码执行细节--转

    http://www.kuqin.com/java/20111031/314144.html 在<Java虚拟机规范>之中,详细描述了虚拟机指令集中每条指令的执行过程.执行前后对操作数栈. ...

  5. 【原创】X86下ipipe接管中断/异常

    目录 X86 ipipe接管中断/异常 一.回顾 二.X86 linux异常中断处理 1. 中断门及IDT 2. 初始化门描述符 2.1 早期异常处理 2.2 start_kernel中的异常向量初始 ...

  6. 操作系统实现-boot.asm实现

    博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们进入操作系统实现的真实编码, 这一次主要是完善对boot.asm文件的全部实现, ...

  7. for循环产生的Cortex-M3汇编代码的一个奇怪现象

    最近比较一下KEIL和IAR两个编译器产生的代码,基于Cortex-M3处理器的,然后发现了一几个奇怪的地方. 很简单的一个C的for循环 void fun_for_add_65535(void) { ...

  8. 汇编 do while循环

    do while生成的汇编代码  do while汇编还原成C++代码 一. do while成生的汇编代码 // int i=0; // do // { // i++; // } while ( ...

  9. 汇编语言中loop循环编程

    (1)向内存0:200~ 0:23f依次传送数据0~63(3FH) (2)同上简化后的代码,要求九行以内

随机推荐

  1. 大数据【四】MapReduce(单词计数;二次排序;计数器;join;分布式缓存)

       前言: 根据前面的几篇博客学习,现在可以进行MapReduce学习了.本篇博客首先阐述了MapReduce的概念及使用原理,其次直接从五个实验中实践学习(单词计数,二次排序,计数器,join,分 ...

  2. 关于Mobx中装饰器语法的环境配置

    1.弹出项目配置 npm run eject 此处注意,若弹出项目配置失败,请先执行以下两行代码(若没有安装git则请跳过,本人是在安装git的情况下解决问题的) 1.git add . 2.git ...

  3. 使用 Azure 门户创建 Windows 虚拟机

    可以通过 Azure 门户创建 Azure 虚拟机. 此方法提供一个基于浏览器的用户界面,用于创建和配置虚拟机和所有相关的资源. 本快速入门介绍了如何创建虚拟机并在 VM 上安装 webserver. ...

  4. 转:总结const、readonly、static三者的区别

    const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编译时常量的原因是它编译时会将其替换为所对应的值: b.静态 ...

  5. linux stat 简单介绍

    stat 命令查看文件或文件系统的状态时间等属性 用法:stat [参数]... 文件... 简单的介绍一下stat命令显示出来的文件其他信息: - File:显示文件名 - Size:显示文件大小 ...

  6. MongoDB基础之 用户和数据库基于角色的访问控制

    mongod 关键字参数:--auth 默认值是不需要验证,即 --noauth,该参数启用用户访问权限控制:当mongod 使用该参数启动时,MongoDB会验证客户端连接的账户和密码,以确定其是否 ...

  7. ubuntu各类问题笔记

    ubuntu文本编辑器中文中文乱码问题解决 转载自:http://www.2cto.com/os/201201/117535.html 缺省配置下,用Ubuntu 的文本编辑器(gedit)打开GB1 ...

  8. 百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制11。

    1.POI爬取方法说明 1.1AK申请 登录百度账号,在百度地图开发者平台的API控制台申请一个服务端的ak,主要用到的是Place API.检校方式可设置成IP白名单,IP直接设置成了0.0.0.0 ...

  9. 'No Transport' Error w/ jQuery ajax call in IE

    I need to use foursquare API to search venues. Of course it is cross-domain. It has no any problems ...

  10. Android Studio快捷键——编辑篇

    Android Studio是官方推出的Android开发IDE,本系列讲解Android Studio中常用的快捷键,本文是该系列的第一篇,讲解的内容是与编辑代码相关的快捷键. 本文所讲快捷键基于A ...