do-while的基本使用格式
do{
//功能代码
}while(表达式);
C语言代码
#include <stdio.h>
void F(int n){
int i = 0;
do{
i++;
printf("%d", i);
} while (i < n);
}
int main(){
F(10);
return 0;
}
对应汇编代码
![image-20220216153136170](https://wspggw.oss-cn-beijing.aliyuncs.com/img/image-20220216153136170.png)
00A413C0 push ebp
00A413C1 mov ebp,esp
00A413C3 sub esp,0CCh
00A413C9 push ebx
00A413CA push esi
00A413CB push edi
00A413CC lea edi,[ebp+FFFFFF34h]
00A413D2 mov ecx,33h
00A413D7 mov eax,0CCCCCCCCh
00A413DC rep stos dword ptr es:[edi]
00A413DE mov dword ptr [ebp-8],0
00A413E5 mov eax,dword ptr [ebp-8]
00A413E8 add eax,1
00A413EB mov dword ptr [ebp-8],eax
00A413EE mov esi,esp
00A413F0 mov eax,dword ptr [ebp-8]
00A413F3 push eax
00A413F4 push 0A45858h
00A413F9 call dword ptr ds:[00A49114h]
00A413FF add esp,8
00A41402 cmp esi,esp
00A41404 call 00A4113B
00A41409 mov eax,dword ptr [ebp-8]
00A4140C cmp eax,dword ptr [ebp+8]
00A4140F jl 00A413E5
00A41411 pop edi
00A41412 pop esi
00A41413 pop ebx
00A41414 add esp,0CCh
00A4141A cmp ebp,esp
00A4141C call 00A4113B
00A41421 mov esp,ebp
00A41423 pop ebp
00A41424 ret
综上可以看出,do-while的汇编代码是比较简洁的。因此,效率也相对较高。