交流
商城
MCN
登入
注册
首页
提问
分享
讨论
建议
公告
动态
发表新帖
发表新帖
2 函数的参数传递
分享
未结
0
705
李延
LV6
2022-06-07
悬赏:20积分
# 1 说明 在前面章节中,我们知道参数传递时通过6个寄存器进行传递的。当大于6个字符是,会通过栈进行传递。 # 2 参数小于6个 ```c #include <stdio.h> int sum(int a1,int a2,int a3,int a4,int a5,int a6){ return a1+a2+a3+a4+a5+a6; } int main() { int num = sum(1,2,3,4,5,6); printf("sum is %d!\n",num); return 0; } ``` ```asm .file "parameter.c" .text .globl sum .type sum, @function sum: .LFB11: .cfi_startproc addl %esi, %edi addl %edi, %edx addl %edx, %ecx addl %ecx, %r8d leal (%r8,%r9), %eax ret .cfi_endproc .LFE11: .size sum, .-sum .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "sum is %d!\n" .text .globl main .type main, @function main: .LFB12: .cfi_startproc subq $8, %rsp .cfi_def_cfa_offset 16 movl $6, %r9d movl $5, %r8d movl $4, %ecx movl $3, %edx movl $2, %esi movl $1, %edi call sum movl %eax, %esi movl $.LC0, %edi movl $0, %eax call printf movl $0, %eax addq $8, %rsp .cfi_def_cfa_offset 8 ret .cfi_endproc .LFE12: .size main, .-main .ident "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44)" .section .note.GNU-stack,"",@progbits ``` # 3 参数大于6个 ```c #include <stdio.h> int sum(int a1,int a2,int a3,int a4,int a5,int a6,int b1,int b2,int b3){ return a1+a2+a3+a4+a5+a6+b1+b2+b3; } int main() { int num = sum(1,2,3,4,5,6,7,8,9); printf("sum is %d!\n",num); return 0; } ``` ```asm .file "parameter2.c" .text .globl sum .type sum, @function sum: .LFB11: .cfi_startproc addl %esi, %edi addl %edi, %edx addl %edx, %ecx addl %ecx, %r8d addl %r8d, %r9d movl %r9d, %eax addl 8(%rsp), %eax addl 16(%rsp), %eax addl 24(%rsp), %eax ret .cfi_endproc .LFE11: .size sum, .-sum .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "sum is %d!\n" .text .globl main .type main, @function main: .LFB12: .cfi_startproc subq $40, %rsp .cfi_def_cfa_offset 48 movl $9, 16(%rsp) movl $8, 8(%rsp) movl $7, (%rsp) movl $6, %r9d movl $5, %r8d movl $4, %ecx movl $3, %edx movl $2, %esi movl $1, %edi call sum movl %eax, %esi movl $.LC0, %edi movl $0, %eax call printf movl $0, %eax addq $40, %rsp .cfi_def_cfa_offset 8 ret .cfi_endproc .LFE12: .size main, .-main .ident "GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44)" .section .note.GNU-stack,"",@progbits ```
回帖
消灭零回复
提交回复
热议榜
java 相关知识分享
8
好的程序员与不好的程序员
6
写给工程师的十条精进原则
5
spring boot以jar包运行配置的logback日志文件没生成
5
一步一步分析SpringBoot启动源码(一)
5
MockMvc测试
5
【吐槽向】是不是有个吐槽的板块比较好玩
4
logstash jdbc同步mysql多表数据到elasticsearch
3
IntelliJ IDEA 优质License Server
3
.gitignore忽略规则
3
SpringBoot启动源码分析
3
一步一步分析SpringBoot启动源码(三)
3
2
一步一步分析SpringBoot启动源码(二)
2
积分不够将无法发表新帖
2
官方产品
Meta-Boot - 基于MCN
MCN - 快速构建SpringBoot应用
微信扫码关注公众号