汇编:C语言for转汇编
for循环是C语言中常用的三循环之一,基本用法如下
for(变量初始化操作;判断是否执行循环;变量增减操作){
//功能代码
}
第一种:三中操作都存在
C语言代码
#include <stdio.h>
void F(int n){
int i;
for (i = 0; i < n; i++){
printf("%d\n", i);
}
}
int main(){
F(10);
return 0;
}
对应汇编
;提升堆栈
00F83C00 push ebp
00F83C01 mov ebp,esp
00F83C03 sub esp,0CCh
;保存现场
00F83C09 push ebx
00F83C0A push esi
00F83C0B push edi
;初始化堆栈
00F83C0C lea edi,[ebp+FFFFFF34h]
00F83C12 mov ecx,33h
00F83C17 mov eax,0CCCCCCCCh
00F83C1C rep stos dword ptr es:[edi]
;for循环代码
00F83C1E mov dword ptr [ebp-8],0 ;初始化for参数
00F83C25 jmp 00F83C30
00F83C27 mov eax,dword ptr [ebp-8]
00F83C2A add eax,1 ;自增运算
00F83C2D mov dword ptr [ebp-8],eax
00F83C30 mov eax,dword ptr [ebp-8]
00F83C33 cmp eax,dword ptr [ebp+8] ;比较操作,i < n
00F83C36 jge 00F83C55
00F83C38 mov esi,esp
00F83C3A mov eax,dword ptr [ebp-8]
00F83C3D push eax
00F83C3E push 0F858A8h
00F83C43 call dword ptr ds:[00F89114h] ;调用printf
00F83C49 add esp,8 ;调用完函数的堆栈平衡
00F83C4C cmp esi,esp
00F83C4E call 00F8113B
00F83C53 jmp 00F83C27 ;重复for循环
;恢复现场
00F83C55 pop edi
00F83C56 pop esi
00F83C57 pop ebx
00F83C58 add esp,0CCh
00F83C5E cmp ebp,esp
00F83C60 call 00F8113B
00F83C65 mov esp,ebp
00F83C67 pop ebp
00F83C68 ret
第二种:三种操作都不写
C语言代码
#include <stdio.h>
void F(int n){
int i = 0;
for (;;){
printf("%d\n", i);
}
}
int main(){
F(10);
return 0;
}
对应汇编代码
009513C0 push ebp
009513C1 mov ebp,esp
009513C3 sub esp,0CCh
009513C9 push ebx
009513CA push esi
009513CB push edi
009513CC lea edi,[ebp+FFFFFF34h]
009513D2 mov ecx,33h
009513D7 mov eax,0CCCCCCCCh
009513DC rep stos dword ptr es:[edi]
009513DE mov dword ptr [ebp-8],0
009513E5 mov esi,esp
009513E7 mov eax,dword ptr [ebp-8]
009513EA push eax
009513EB push 955858h
009513F0 call dword ptr ds:[00959114h]
009513F6 add esp,8
009513F9 cmp esi,esp
009513FB call 0095113B
00951400 jmp 009513E5
00951402 pop edi
00951403 pop esi
00951404 pop ebx
00951405 add esp,0CCh
0095140B cmp ebp,esp
0095140D call 0095113B
00951412 mov esp,ebp
00951414 pop ebp
00951415 ret
综上可知,for循环一般分为四部分,而如果for循环中任何操作都不写,那么将生成死循环汇编代码
1)初始化块
2)判断是否执行块
3)执行功能块
4)改变变量块
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)