分支语句
Tutorial: C与汇编
Category: C语言
Published: 2026-04-07 13:58:26
Views: 20
Likes: 0
Comments: 0
1. 分支语句
- 示例1
if (condition) {
}
- 示例2
if (condition) {
} else {
}
- 示例3
if (condition1) {
} else if (condition2) {
} else {
}
- 示例4
switch (expression) {
case constant1:
break;
case constant2:
break;
...
default:
}
2. 示例 3 汇编后
5: int x = 1;
004109A8 mov dword ptr [ebp-4],1
6: int y = 2;
004109AF mov dword ptr [ebp-8],2
7: int z;
8:
9: if (x > y)
004109B6 mov eax,dword ptr [ebp-4]
004109B9 cmp eax,dword ptr [ebp-8]
004109BC jle main+36h (004109c6)
10: {
11: z = x;
004109BE mov ecx,dword ptr [ebp-4]
004109C1 mov dword ptr [ebp-0Ch],ecx
12: }
13: else if (x == y)
004109C4 jmp main+4Fh (004109df)
004109C6 mov edx,dword ptr [ebp-4]
004109C9 cmp edx,dword ptr [ebp-8]
004109CC jne main+46h (004109d6)
14: {
15: z = y;
004109CE mov eax,dword ptr [ebp-8]
004109D1 mov dword ptr [ebp-0Ch],eax
16: }
17: else
004109D4 jmp main+4Fh (004109df)
18: {
19: z = x + y;
004109D6 mov ecx,dword ptr [ebp-4]
004109D9 add ecx,dword ptr [ebp-8]
004109DC mov dword ptr [ebp-0Ch],ecx
20: }
3. switch 语句
#include <stdio.h>
int main() {
char grade;
printf("请输入您的成绩等级 (A、B、C、D、F): ");
scanf("%c", &grade);
switch (grade) {
case 'A':
printf("优秀\n");
break;
case 'B':
printf("良好\n");
break;
case 'C':
printf("中等\n");
break;
case 'D':
printf("及格\n");
break;
case 'F':
printf("不及格\n");
break;
default:
printf("无效的成绩等级\n");
}
return 0;
}
6: printf("请输入您的成绩等级 (A、B、C、D、F): ");
004109A8 push offset string "\xc7\xeb\xca\xe4\xc8\xeb\xc4\xfa\xb5\xc4\xb3\xc9\xbc\xa8\xb5\xc8\xbc\xb6
004109AD call printf (00410910)
004109B2 add esp,4
7: scanf("%c", &grade);
004109B5 lea eax,[ebp-4]
004109B8 push eax
004109B9 push offset string "%c" (0042601c)
004109BE call scanf (00412c00)
004109C3 add esp,8
8:
9: switch (grade) {
004109C6 movsx ecx,byte ptr [ebp-4]
004109CA mov dword ptr [ebp-8],ecx
004109CD mov edx,dword ptr [ebp-8]
004109D0 sub edx,41h
004109D3 mov dword ptr [ebp-8],edx
004109D6 cmp dword ptr [ebp-8],5
004109DA ja $L592+0Fh (00410a31)
004109DC mov eax,dword ptr [ebp-8]
004109DF jmp dword ptr [eax*4+410A51h]
10: case 'A':
11: printf("优秀\n");
004109E6 push offset string "\xd3\xc5\xd0\xe3\n" (00427034)
004109EB call printf (00410910)
004109F0 add esp,4
12: break;
004109F3 jmp $L592+1Ch (00410a3e)
13: case 'B':
14: printf("良好\n");
004109F5 push offset string "\xc1\xbc\xba\xc3\n" (0042702c)
004109FA call printf (00410910)
004109FF add esp,4
15: break;
00410A02 jmp $L592+1Ch (00410a3e)
16: case 'C':
17: printf("中等\n");
00410A04 push offset string "\xd6\xd0\xb5\xc8\n" (00427024)
00410A09 call printf (00410910)
00410A0E add esp,4
18: break;
00410A11 jmp $L592+1Ch (00410a3e)
19: case 'D':
20: printf("及格\n");
00410A13 push offset string "\xbc\xb0\xb8\xf1\n" (0042701c)
00410A18 call printf (00410910)
00410A1D add esp,4
21: break;
00410A20 jmp $L592+1Ch (00410a3e)
22: case 'F':
23: printf("不及格\n");
00410A22 push offset string "\xb2\xbb\xbc\xb0\xb8\xf1\n" (00427014)
00410A27 call printf (00410910)
00410A2C add esp,4
24: break;
00410A2F jmp $L592+1Ch (00410a3e)
25: default:
26: printf("无效的成绩等级\n");
00410A31 push offset string "\xce\xde\xd0\xa7\xb5\xc4\xb3\xc9\xbc\xa8\xb5\xc8\xbc\xb6\n" (00426ee8)
00410A36 call printf (00410910)
00410A3B add esp,4
27: }
28:
29: return 0;
00410A3E xor eax,eax
30: }