一个简单的双重for循环的汇编语句解释
来源:互联网 发布:淘宝不买烟吗 编辑:程序博客网 时间:2024/05/01 11:19
#include<stdio.h>void show() { int i,j; for(i=0;i<100;i++){ for(j=2;j<=i;j++){ if(i%j==0) break; } if(j>=i) printf("%d",i); }}show:.LFB24:pushl%ebx //将%ebx压入栈,%ebx作为变量i的寄存器subl$24, %esp //栈顶指针减24movl$0, %ebx //先把i=0存到%ebx寄存器jmp.L2 //无条件,直接跳转到L2.L4: //执行第二个for循环的语句movl%ebx, %eax //把%ebx(i)复制给 %eax cltd //R[%edx]:R[%eax] = 符号位扩展R[%eax],转换为4字节(把%eax符号位扩展到%edx,此时%edx存放的是%ebx(i)的符号位)idivl%ecx //R[%edx] = R[%edx]:R[%eax] % j; R[%eax] = R[%edx]:R[%eax] / j;(把i%j存放到%edx中,把i/j存放到%eax)testl%edx, %edx //测试双字,与关系,S1 & S2(判断%edx是否为0,即判断i%j是否为0)je.L3 //相等|零时候跳转( if(i%j==0)-->L3,if(i%j!=0)执行接下去L8的语句 ).L8:addl$1, %ecx //执行j++cmpl%ebx, %ecx //判断 j <= ijle.L4 //如果不符合 j <= i ,即 j>i ,即该数是素数,就执行接下去L5的输出语句 jmp.L5 //直接跳转到L5.L9:movl$2, %ecx //把j=2存放到%ecxjmp.L3 //直接跳转到L3.L10:movl$2, %ecx //把j=2存放到%ecx.L3:cmpl%ecx, %ebx //比较i和j jg.L6 //如果i>j 跳转到 L6 ,否则执行下面L5.L5: //printf 代码块,输出素数movl%ebx, 8(%esp)movl$.LC0, 4(%esp)movl$1, (%esp)call__printf_chk.L6: addl$1, %ebx //执行i++cmpl$100, %ebx //判断i<100je.L1 //如果i=100了,就跳到L1.L2:cmpl$1, %ebx //比较i和1jle.L9 //如果i<=1 的话,跳转到 L9,否则执行下面的代码(所以是从i=2开始是直接执行下面的代码)movl%ebx, %eax //把 %ebx (i) 复制到%eax中shrl$31, %eax //将 %eax 进行逻辑右移31位(和上面一句联合起来的效果就是将%eax设置为全0) leal(%ebx,%eax), %edx //andl$1, %edx //cmpl%eax, %edx //判断%eax和%edx是否相等je.L10 //movl$2, %ecx //%ecx存放j变量,所以先把j=2存放到%ecxjmp.L8 //无条件跳转到L8.L1: //等到i=100时,跳转到这,程序结束addl$24, %esp //栈顶指针加24popl%ebx //将%ebx弹出栈ret //return
0 0
- 一个简单的双重for循环的汇编语句解释
- 简单的双重for循环的汇编解释
- 双重for循环语句块的优化
- for语句双重循环
- for双重循环的总结
- oracle的双重for循环
- 17-for的双重循环
- 双重for循环的几个例子
- 简单的跳出JAVA的双重循环
- 简单字符图形的双重循环
- 简单字符图形的双重循环.cpp
- 简单字符图形的双重循环1
- 简单字符图形的双重循环2
- 循环语句的汇编表示
- java跳出双重for循环,跳出双重for循环的内部循环并不执行外重循环内代码
- 汇编里面的for循环
- for语句的循环
- for循环 一个简单的例子
- php配置smarty
- Linux+javaEE学习之ssh的学习
- android:visibility="gone"
- Java解析Json字符串--数组或列表
- String to Integer (atoi)
- 一个简单的双重for循环的汇编语句解释
- 【ITOO】工作流
- 【iOS】一种应用登录和退出跳转逻辑的实现
- 【SQL Server】 SELECT语句
- 简单的双重for循环的汇编解释
- cocs2d初步
- 数据结构-Java实现-排序
- Android图形图像之Bitmap和BitFactory
- Tmux的使用