一个简单的双重for循环的汇编语句解释

#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        //栈顶指针减24
	movl	$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              //相等|零时候跳转&
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值