汇编语言_探索C语言参数

本文探讨了C语言中函数参数的存储方式,强调参数如何在栈中存放和传递,以及大参数为何通常使用指针。通过示例解析了函数`showchar`和`showcharA`的参数处理,展示了参数在栈中的布局。此外,还介绍了可变参数函数`showcharA`的实现,以及参数压栈和释放的过程。
摘要由CSDN通过智能技术生成

查看函数返回值1

void showchar(char a,int b);

main()
{
	int a1,a2,a3;
	a1 = 0xa1;
	a2 = 0xa2;
	a3 = 0xa3;

	showchar('a',2);
}

void showchar(char a,int b)
{
	*(char far*) (0xb8000000 + 160*80 +80)=a;
	*(char far *)(0xb8000000 + 160*80 +81)=b;
}

在这里插入图片描述

分析一下:main中的前三个变量:a1,a2,a3存放在栈中,这是前几天已经写过的博客记录下来的;可以看到showchar(‘a’,2)的参数用ax转移在栈中。
在这里插入图片描述
在这里插入图片描述
函数的参数存放在栈中,也是一种局部变量;
showchar(char a,int b)可以看成是char a='a',int b = 2;这就是为什么,传递较大的参数时,都要这样压栈出栈,参数过大,会很消耗内存和时间,因此,这就是为什么把大参数改成指针的原因。

探索C语言参数2

void showcharA(int,int,...);	// 这种写法代表参数个数未知; 

main()
{
	int a1,a2,a3;
	a1 = 0xa1;
	a2 = 0xa2;
	a3 = 0xa3;

	showcharA(8,2,'a','b','c','d','e','f','g','h');

}

void showcharA(int n,int color,...)
{
	int a;
	for(a=0;a != n;a++)
	{
		*(char far *)(0xb8000000 + 160*10 + 80) = *(int *)(_BP + 8 + a +a);
		*(char far *)(0xb8000000 + 160*10 + 81) = color;
	}

}

在这里插入图片描述
在这里插入图片描述
可以看到,main()函数中的a1,a2,a3存放在栈中,内存位置分别是:bp-6,bp-4,bp-2;
showcharA(8,2,'a','b','c','d','e','f','g','h');的参数同样存放在栈中,从右向左开始向栈中存放。
在这里插入图片描述
main函数中的所有参数都放入栈中后,开始调用这个函数;
在这里插入图片描述
for原理也是JNZ跳转。
总结:函数的参数是局部变量存放在栈中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值