C语言精彩编程百例 第9个例子 if 判断语句
源程序:
#include<stdio.h>
void main()
{
int x,y,z,mid,dec;
printf("请任意输入三个整数:\n");
scanf("%d %d %d",&x,&y,&z);
if(x<y)
{
mid =x; x=y; y=mid;
}
if(x<z)
{
mid=x;x=z;z=mid;
}
if(y<z)
{
mid=y;y=z;z=mid;
}
printf("请输入一个整数,程序根据其正负判断输出:\n");
scanf("%d",&dec);
if(dec>=0) printf("最大整数为:%d\n",x);
else printf("最小整数为:%d\n",z);
}
对应的汇编:
subl $12, %esp
pushl $LC0
call _printf
addl $16, %esp
# _scanf 参数传递
leal -12(%ebp), %eax # &z
pushl %eax
leal -8(%ebp), %eax # &y
pushl %eax
leal -4(%ebp), %eax # &x
pushl %eax
pushl $LC1
call _scanf
addl $16, %esp
movl -4(%ebp), %eax # x
cmpl -8(%ebp), %eax # 比较 x,y
jge L4 # 不小于跳
movl -4(%ebp), %eax # x
movl %eax, -16(%ebp) # mid = x
movl -8(%ebp), %eax # y
movl %eax, -4(%ebp) # x = y
movl -16(%ebp), %eax # mid
movl %eax, -8(%ebp) # y = mid
L4:
movl -4(%ebp), %eax # x
cmpl -12(%ebp), %eax # 比较 x,z
jge L5 # 不小于跳
movl -4(%ebp), %eax # x
movl %eax, -16(%ebp) # mid =x
movl -12(%ebp), %eax # z
movl %eax, -4(%ebp) # x=z
movl -16(%ebp), %eax # mid
movl %eax, -12(%ebp) # z= mid
L5:
movl -8(%ebp), %eax # y
cmpl -12(%ebp), %eax # 比较 y z
jge L6 # 不小于跳
movl -8(%ebp), %eax # y
movl %eax, -16(%ebp) # mid=y
movl -12(%ebp), %eax # z
movl %eax, -8(%ebp) # y=z
movl -16(%ebp), %eax # mid
movl %eax, -12(%ebp) # z = mid
L6:
subl $12, %esp
pushl $LC2
call _printf
addl $16, %esp
subl $8, %esp
leal -20(%ebp), %eax # &dec
pushl %eax
pushl $LC3
call _scanf
addl $16, %esp
cmpl $0, -20(%ebp) # 比较dec 和 0
js L7 # 小于跳
subl $8, %esp # printf
pushl -4(%ebp)
pushl $LC4
call _printf
addl $16, %esp
jmp L3
L7:
subl $8, %esp # printf
pushl -12(%ebp)
pushl $LC5
call _printf
addl $16, %esp
L3:
leave
re