• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

为何C语言函数调用要堆栈,而汇编却不需要?

liguilini 2017-12-10 浏览量:827
很多关于uboot的分析,要为C语言的运行准备好堆栈。而在Uboot的start.S汇编代码中,关于系统初始化,也看到有堆栈指针初始化这个动作。但是,从来只是看到有人说系统初始化要初始化堆栈,即正确给堆栈指针sp赋值,但是却从来没有看到有人解释,为何要初始化堆栈。
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案

其他答案 数量:4
  •         C是调用非内联函数的时候需要调用堆栈吧,这是一种程序跳转的手段。其实汇编一样要跳转,要调用堆栈的,楼主写过51的汇编程序没?

    • 发布于2017-12-10
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :TX24-60R-6ST-H1E:60针 TX24-40R-6ST-H1E:40针 回复

  • 使用汇编的时候很灵活,自己保存寄存器或者操作寄存器,都是直接对内存进行操作。调用函数也是调用之后进行压栈,返回的时候出栈。但是C语言这些过程都是编译器编译的语句,你得告诉他栈在哪
    • 发布于2017-12-10
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :经查该型号的丝印是NWH,有关其他部分的丝印资料没有过多的文字描述,也就是说TI原厂没有对外公开,属不公开信息,无法确认 回复

  • 汇编也要用堆栈啊

    POP

    PUSH

    不过C语言这些高级语言,在初始化时要预留一段空间用于处理后面可能出现的堆栈,也就是预留堆栈区,这个区域选得太小会导致后续程序无法运转,这里体现了C语言在某些时候不如汇编灵活

    • 发布于2017-12-11
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :https://www.jscj-elec.com/gallery//file/CJL3407%20SOT-23-6L%20V2.0.pdf 回复

  • 汇编是要自己处理数据的存储与算法,而C是由编译器进行的。
    • 发布于2017-12-17
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

为何C语言函数调用要堆栈,而汇编却不需要?