• Part10-C语言环境初始化-栈初始化lesson1


    1、概念解析

    ARM系统使用的是满栈!

    ARM采用降栈!!!

    栈帧

    每一个进程会有一个栈,该进程中的每一个函数会分割栈的一部分,那么每一个函数使用的那部分栈就叫做栈帧。那么所有栈帧组成了整个栈。

    子函数func里面保存了main函数的上边界FP和下边界SP。

    2、栈的作用

    保存局部变量

    代码样例

    编译之:

    arm-linux-gcc -g  stack1.c -o stack1

    反汇编之:arm-linux-objdump -D -S stack1 >dump

    dump里面的结果

    首先是push {sp},具体是将str fp,[sp,#-4]!,里面让sp先减4再存。加一个!号,表示使sp-4,但不会对sp本身有影响

    add fp,sp,#0把sp加0的值赋值给fp,实际就是把sp赋给fp,让fp也指向栈顶,

    sub sp,sp,#12

    执行c语言的a++,它是ldr r3,[fp,#-8],从这个地址的内容拿到r3,该地址的内容实际上就是a的值,然后再add r3,r3,#1,加1后再存回原来的地方。

    传递参数

    在c语言传递参数的过程当中,如果参数的个数小于或等于4的就用r0到r3,如果大于的话就要用栈来传递

    保存寄存器的值

    3、栈初始化编程

    就是对sp指针进行赋值,

    6410内存256MB内存位置0x20000000+64MB

    210内存512MB内存位置0x50000000+64MB(0x4000000)

    2440内存64MB,内存位置0x30000000+64MB

    那么我们把sp指针统一指到内存的64MB处(它是向下自减的)

  • 相关阅读:
    Mysql 安装
    网站搭建 so easy
    git 命令!!!!!!!!!!!
    git branch 管理常用命令
    Java开发环境的搭建以及使用eclipse从头一步步创建java项目
    git 放弃本地修改 强制更新
    java算法之猴子排序睡眠排序
    sql业务需求,查询每个分类下的前两n条数据
    mysql安装
    linux服务自启
  • 原文地址:https://www.cnblogs.com/gary-guo/p/5795317.html
Copyright © 2020-2023  润新知