知识点:
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. 大数据【三】YARN集群部署

    一 概述 YARN是一个资源管理.任务调度的框架,采用master/slave架构,主要包含三大模块:ResourceManager(RM).NodeManager(NM).ApplicationMa ...

  2. Python+Selenium笔记(十四)鼠标与键盘事件

     (一) 前言 Webdriver高级应用的API,允许我们模拟简单到复杂的键盘和鼠标事件,如拖拽操作.快捷键组合.长按以及鼠标右键操作,都是通过使用webdriver的Python API 中的Ac ...

  3. 一个能够编写、运行SQL查询并可视化结果的Web应用:SqlPad

    SqlPad 是一个能够用于编写.运行 SQL 查询并可视化结果的 Web 应用.支持 PostgreSQL.MySQL 和 SQL Server.SqlPad 目前仅适合单个团队在内网中使用,它直接 ...

  4. PHP 传值操作和传地址操作

    PHP中有两种赋值操作 一种是传值操作 example: $a = 1; $b = $b; 这个就是传值 传地址是: example2: $a = 1; $b = &$a; 这两者有什么区别呢 ...

  5. zabbix待完整

    fad 下载zabbix3.4的配置文件 wget -O zabbix-3.4.2.tar.gz http://sourceforge.net/projects/zabbix/files/ZABBIX ...

  6. 解决windows下vim中文乱码

    解决windows下vim中文乱码 windows安装了vim8,也就是gvim后,打开带有中文的文档,显示中文是乱码. 毕竟有许多文档我是用utf-8编码的,所以解决的办法是设置一下编码为utf-8 ...

  7. 恶意代码分析_01_YARA规则_CLAMAV病毒库

    写在前面的话: 上一篇文章里,我们已经初步了解了Malware的一些知识,并且利用Clamscan创建了自己的md5类型的病毒库, 那在这篇文章中,我将带领大家一起,来进一步了解病毒库的相关知识,以及 ...

  8. git bash安装和基本设置

    Part1:安装步骤 1.下载地址: https://git-for-windows.github.io/ 2.下载完成后安装,安装路径自己选择,其他的选项参照下图: 其他的一步一步往下即可,最后Fi ...

  9. BZOJ4810:[YNOI2017]由乃的玉米田(莫队,bitset)

    Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题   这个题是这样的: 给你一 ...

  10. google浏览器window.onbeforeunload方法兼容问题

    window.onbeforeunload方法在IE内核浏览器是有效的,但是在google浏览器中并不兼容,请教给位怎么在google浏览器中兼容window.onbeforeunload方法 采纳的 ...