c语言其三

news/2025/3/18 15:01:38/文章来源:https://www.cnblogs.com/yuli10952/p/18336869

返回值

8位—al

16位—ax

32位—eax

64位—eax(放低位,edx(高位

64:

 

32:

1、char(两个字节)类型的返回值  

2、short(两个字节) 类型的返回值  

3、int (八个字节)类型的返回值  

参数传递

无论是char还是short类型,反汇编中都是以4个字节传递

结论:整数类型的参数,一律使用int类型   

—————————————————————————————————————

例子:

//函数定义:  

void Plus(int x)  //[ebp+8]

{  

 x = x + 1; 

}  

//入口函数  

int main(int argc, char* argv[])  

{  

 int x = 1; //[ebp-4]=1

  

 Plus(x); 

  

 printf("%d\n",x); 

  

 return 0; 

}  

 

[ebp+8]放入了eax,eax+1,eax放入[ebp+8]

所以和[ebp-4]无关,printf出来为1

—————————————————————————————————————————————————

void Function()    

{    

 int x = 1;   

 int y = 2;   

 int r;   

 int arr[10] = {1,2,3,4,5,6,7,8,9,10};    

 r = arr[1]; 

 eax,duord ptr [ebp-30h]

dword ptr [ebp-0Ch],eax

 r = arr[x]; 

ecx,duord ptr [ebp-4]

edx,dword ptr [ebp+ecx*4(int:四个字节)-34h] //ecx=1,1×4-34=30 结果:ebp-30h

 r = arr[x+y];   

eax,duord ptr [ebp-4]

eax,dword ptr [ebp-8]//eax=3

ecx,dword ptr [ebp+eax*4-34h] //eax=3,3×4=c,34-c=28,结果:ebp-28h

 r = arr[x*2+y];   

}    

——————————————————————————————————————————————————

 

 

———————————————————————————————————————————————————

分配

当是空函数时,缓冲区分配40h

当有定义的变量时,缓冲区分配40h+

注:40h是不确定的,看是什么编译器

        小于“本机尺寸”则按“本机尺寸”分配(若<4,则分配4个字节大小空间)

数组分配时,按类型大小分配

注:char a[3]与[4]分配的长度是一样的(都是四个字节,可以理解为熟人住标间)

参数:在函数调用的时候分配的值

局部变量:在函数执行的时候分配的值

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/777725.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArkTS #02# Ability的调用及启动模式

1调用&单实例 import common from @ohos.app.ability.common import Want from @ohos.app.ability.Want @Entry @Component struct Index {@State message: string = Hello Worldbuild() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Bu…

VMware虚拟机版OpenCore引导,Vmware安装苹果系统

使用Windows下的VMware虚拟机安装macOS系统,常规安装都需要使用到unlocker解锁工具.而直接使用OpenCore引导安装,就可以不使用unlocker解锁工具也能安装macOS系统,使用OpenCore引导的优点还是有的,比如改三码或五码还是比较方便,这里将最近配置的OpenCore引导分享给大家一起研究…

开发在线客服系统新的宣传推广站【微客客服】

打造一个软件宣传官网,这事儿可不简单。咱们得先搞清楚,这个网站要给谁看,要传达啥信息,需要哪些功能。我们网站是宣传【在线客服系统】的,所以需要把主要功能展示清楚 在线网址:https://weikefu.com.cn然后,咱们得设计一番,把网站的布局、界面和用户体验给搞定。接下来…

Java - 异常与File

异常灵魂四问:如果try中没有遇到问题,怎么执行?try全部执行,catch不执行如果try中可能会遇到多个问题,怎么执行?写多个catch与之对应,父类异常需要写在下面如果try中遇到的问题没有被捕获,怎么执行?异常会默认交给虚拟机处理,try...catch白写如果try中遇到了问题,那…

费马点(到三角形顶点之和最小的点)

2024_8_4 费马点(到三角形顶点之和最小的点) 1.如果有度数大于120的角,则该点为费马点。 2.否则为某条边为底边往外作正三角形,将外面的点与这条边以外的那个点连线就为最短长度。 \[f(X, \, Y, \, Z) = \sqrt{\frac{a^2+b^2+c^2+4\sqrt{3}S}{2}}. \]

ComfyUI插件:ComfyUI layer style 节点(四)

前言: 学习ComfyUI是一场持久战,而ComfyUI layer style 是一组专为图片设计制作且集成了Photoshop功能的强大节点。该节点几乎将PhotoShop的全部功能迁移到ComfyUI,诸如提供仿照Adobe Photoshop的图层样式、提供调整颜色功能(亮度、饱和度、对比度等)、提供Mask辅助工具、…

ABC365

A link题目已经说的很明白了,判断即可。点击查看代码 #include<bits/stdc++.h>using namespace std;int y;signed main(){cin >> y;if(y%4 != 0) cout << 365;else if(y%4 == 0&&y%100 != 0) cout << 366;else if(y%100 == 0&&y%400 …

没闲着系列 21

离上个20记录已经3个月了。 这3个月我算体会到了什么是欠缺项目管理导致的项目失败。 当然,有一部分我认为项目是没有失败的,但有一部分也是个人原因,但不多。 算了,不去想之前的糟心事,讲一讲TaskSaas近期更新了什么吧。首先还是关于迭代需求,现在不创建迭代不允许新增需…

5、Qt-pyqt6常用基本控件 - 按钮控件

Buttons -- 按钮类控件名 说明PushButton 按钮ToolButton 工具按钮RadioButton 单选按钮CheckBox 复选框CommandLinkButton 命令链接按钮DialogButtonBox 对话框按钮盒🕹 1. PushButton 按钮控件这是最常用的控件之一,允许用户通过单击来执行操作 该控件既可以显示文本也可以…