011 嵌套 if 语句

/**************011.c 嵌套 if 语句****************************************
 * 根据给出的输血者的资料(包括性别和体重),程序判断输出输血者对应的输血量。
 * C语言编程百例第11个例子
 */
#include <stdio.h>
void main()
{
	//sex代表输血者的性别,weight代表输血者的体重,cubage代表输血量
	int sex, weight,cubage;
	printf("请给出输血者的性别和体重:");
	scanf("%d,%d",&sex,&weight);
	if(sex>=0) //若变量sex的数值为非负数,则表示为男性
	{
		if(weight>=120)
		{
			cubage=200;
			printf("此人应该输血:%d毫升\n",cubage);
		}
		else
		{
			cubage=180;
			printf("此人应该输血:%d毫升\n",cubage);
		}
	}
	else //否则,表示为女性
	{
		if(weight>=100)
		{
			cubage=150;
			printf("此人应该输血:%d毫升\n",cubage);
		}
		else
		{
			cubage=120;
			printf("此人应该输血:%d毫升\n",cubage);
		}
	}
}


对应的汇编

	subl	$12, %esp        #printf
	pushl	$LC0
	call	_printf
	addl	$16, %esp
	subl	$4, %esp          
	leal	-8(%ebp), %eax   # scanf
	pushl	%eax
	leal	-4(%ebp), %eax
	pushl	%eax
	pushl	$LC1
	call	_scanf
	addl	$16, %esp

	cmpl	$0, -4(%ebp)      # sex>0
	js	L4
	cmpl	$119, -8(%ebp)    # weight>=120
	jle	L5                # 小于等于119跳,为啥编译器非要吧120搞成119呢?
	movl	$200, -12(%ebp)   # cubage =200
	subl	$8, %esp          # printf
	pushl	-12(%ebp)
	pushl	$LC2
	call	_printf
	addl	$16, %esp
	jmp	L3		   # 退出, 编译器标号不知道咋算出来的,从L3开始,还不一定连续? 
L5:
	movl	$180, -12(%ebp)    # cubage=180
	subl	$8, %esp           # printf
	pushl	-12(%ebp)
	pushl	$LC2
	call	_printf
	addl	$16, %esp
	jmp	L3                 # 退出
L4:
	cmpl	$99, -8(%ebp)      # weight>=100
	jle	L8                 # 小于等于99跳
	movl	$150, -12(%ebp)    # cubage=150
	subl	$8, %esp           # printf
	pushl	-12(%ebp)
	pushl	$LC2
	call	_printf
	addl	$16, %esp
	jmp	L3                  # 退出
L8:
	movl	$120, -12(%ebp)     # cubage=120
	subl	$8, %esp            # printf
	pushl	-12(%ebp)
	pushl	$LC2
	call	_printf
	addl	$16, %esp
L3:
	leave
	ret


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值