循环语句的实现机制

(1)

int main() { int i=1; while (i<10) { printf("%d %s/n",i,"Aul0r"); i++; } return 0; }

int i=1; 003813BE mov dword ptr [i],1 while (i<10) 003813C5 cmp dword ptr [i],0Ah ;比较i和10 003813C9 jge main+56h (3813F6h) ;i>=10则跳转,跳出循环 { printf("%d %s/n",i,"Aul0r"); 003813CB mov esi,esp 003813CD push offset string "Aul0r" (385744h) ;字符串地址压入堆栈 003813D2 mov eax,dword ptr [i] ;eax=i 003813D5 push eax ;参数入栈 003813D6 push offset string "%d %s/n" (38573Ch) 003813DB call dword ptr [__imp__printf (3882BCh)] ;调用printf函数输出 003813E1 add esp,0Ch ;弹出0Ch字节 003813E4 cmp esi,esp 003813E6 call @ILT+310(__RTC_CheckEsp) (38113Bh) i++; 003813EB mov eax,dword ptr [i] ;eax=i 003813EE add eax,1 003813F1 mov dword ptr [i],eax ;i加1 } 003813F4 jmp main+25h (3813C5h) ;无条件跳转到比较处,继续循环 return 0; 003813F6 xor eax,eax

do…while实现机制类似。但是是先输出,然后比较

(2)for语句实现机制 前面笔记中有

(3)continuebreak实现机制

在汇编中都用jmp无条件跳转指令实现

区别:

continue是跳转到修改循环条件的地方

break是跳转到循环外面,即跳过循环,在极端的情况下break还会忽略后面的语句和删除循环结构的某些跳转指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值