汇编 for循环
知识点:
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循环的更多相关文章
- 控制语句(if-else+循环+switch)汇编规则
[1]说说条件码 最常用的的条件码有: CF:进位标志 (无符号溢出) ZF:零标志 SF:符号标志(结果为负数) OF:溢出标志 (补码溢出, 有符号溢出) [2]有两类指令设置条件码而不改变任何其 ...
- 汇编与C语句
---恢复内容开始--- 汇编与C语句 4.1C语句与汇编 学习了汇编语言之后,就需要将常用的C语言代码结构与相应的汇编语言联系起来.这样就可以在分析汇编语言的时候,明白它的意思.C语言中函数过程的调 ...
- Emu8086三种格式的代码-(顺序,分支,循环)
这个学期准备考研,于是就没有怎么听别的课,现在临近期末,汇编成了个难题.下面是我学校的实验报告 做一个复习的记录吧,下面的代码都是在Emu8086上运行出来的代码 下面先介绍一下,汇编里面的格式问题 ...
- JVM执行篇:使用HSDIS插件分析JVM代码执行细节--转
http://www.kuqin.com/java/20111031/314144.html 在<Java虚拟机规范>之中,详细描述了虚拟机指令集中每条指令的执行过程.执行前后对操作数栈. ...
- 【原创】X86下ipipe接管中断/异常
目录 X86 ipipe接管中断/异常 一.回顾 二.X86 linux异常中断处理 1. 中断门及IDT 2. 初始化门描述符 2.1 早期异常处理 2.2 start_kernel中的异常向量初始 ...
- 操作系统实现-boot.asm实现
博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这一次我们进入操作系统实现的真实编码, 这一次主要是完善对boot.asm文件的全部实现, ...
- for循环产生的Cortex-M3汇编代码的一个奇怪现象
最近比较一下KEIL和IAR两个编译器产生的代码,基于Cortex-M3处理器的,然后发现了一几个奇怪的地方. 很简单的一个C的for循环 void fun_for_add_65535(void) { ...
- 汇编 do while循环
do while生成的汇编代码 do while汇编还原成C++代码 一. do while成生的汇编代码 // int i=0; // do // { // i++; // } while ( ...
- 汇编语言中loop循环编程
(1)向内存0:200~ 0:23f依次传送数据0~63(3FH) (2)同上简化后的代码,要求九行以内
随机推荐
- jmeter函数简介
1._char:把一组数字转化成Unicode字符. 2._counter:记录线程的迭代次数. 3._CSVRead:可以从文件中指定列的值. 4.${_CSVRead(D:\test.txt,0, ...
- js实现双向链表
1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...
- 【Amazon 必考】Amazon Leadership Principles 亚马逊领导力准则
Leadership Principles,也就是领导力准则,不仅仅是几条用来鼓舞人心的口号,更是成就了Amazon特有公司文化的秘诀.不管是为新项目讨论创意.寻找解决客户问题的方案,还是面试求职者时 ...
- python 计时器
今天做自动化界面工具的时候需要用到计时器,查阅了一下,发现以下的这位博友写的很简洁方便且实用 https://blog.csdn.net/qfxx_CSDN/article/details/81412 ...
- eclispe快捷键
① Ctrl+Left/Right 向左或向右跳跃一个单词,这是解决横向光标定位速度问题最主要的快捷键!(特别对于喜欢写超过80个字符一行代码的人来说)需要配合使用同样用于同行光标定位的Home/En ...
- Python3 中 sys.argv[ ]的用法解释
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list), ...
- NOI 2018网络同步赛(游记?)
刚中考完那段时间比较无聊,报名了一个同步赛,报完名才发现成绩单是要挂到网上的,而且因为报的早给了一个很靠前的考号...那布星啊,赶紧学点东西,于是在一周内学了网络流,Treap以及一些数论. Day1 ...
- BZOJ3251:树上三角形(乱搞)
Description 给定一大小为n的有点权树,每次询问一对点(u,v),问是否能在u到v的简单路径上取三个点权,以这三个权值为边长构成一个三角形.同时还支持单点修改. Input 第一行两个整数n ...
- Jmeter函数助手中添加自定义函数
最近,群里的牛肉面大神有个需求,是将每个post请求的body部分做一个加密操作,其实这个需求不算难,用beanshell引入加密函数的包,然后调用就行了.只是,如果请求多了,每次都要调用一下自己加密 ...
- str操作方法
s = 'dsj,fhk,je,f' # s1 = s.split(',') # print(s1) s = 'aleX leNb' s1 = s.strip() print(s1) s2 = s[2 ...