浅说汇编开头说明(启动文件)

此文档全是 搜索得到 我为自己整合一下方便查看   主要来源与“烹小鲜啊”博主写的非常好   

Stack_Size      EQU     0x00000100

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

                AREA    RESET, DATA, READONLY

__Vectors       DCD     __initial_sp               
                DCD     Reset_Handler              
                    
                    
                AREA    |.text|, CODE, READONLY
                    
                THUMB
                REQUIRE8
                PRESERVE8
                    
                ENTRY
Reset_Handler 

stack_Size 相当于一个定义 栈的长度,EQU等同于#define

Stack_Size      EQU     0x00000100 等同于 #define Stack_Size   0x00000100

AREA STACK, NOINIT, READWRITE, ALIGN=3
AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用“|”括起来,说明所定义段的相关属性。

STACK 表示这块区域的名称
NOINIT 表示区域不需要初始化
READWRITE表示区域可读写,可读写的是内存。ROM是只读区域。
ALIGN=3 表示按照 2^3 8字节对齐

Stack_Mem SPACE Stack_Size

SPACE:是申请一片内存的空间。结合上面的意思就是 这里我搞了256字节(Stack_Size = 0x100)的空间,相当于建了一个256字节的buf。给这个buf取个名字叫“栈”

__initial_sp 表示这块区域的高地址

 如果这样写

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
__initial_sp
Stack_Mem       SPACE   Stack_Size

表示的地址如下图所示

 为什么STACK是__initial_sp 是高地址
堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。

向上生长:向高地址方向生长,称为递增堆栈
向下生长:向低地址方向生长,称为递减堆栈
堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈。(压栈时先修改sp,后数据压栈;出栈时先数据出栈,后修改sp)
堆栈指针指向下一个待压入数据的空位置,称为空堆栈。(压栈时先数据压栈,后修改sp;出栈时先修改sp,后数据出栈)
  AREA    RESET, DATA, READONLY

指定RESET区域,DATA表示数据,READONLY表示只读表示在ROM区域。

__Vectors       DCD     __initial_sp               
                        DCD     Reset_Handler          

__Vectors  表示中断向量表   
DCD 表示申请 32bit 并且初始化为后面的标号内容
实际上后面的内容都是函数名,表示函数的地址。           

   AREA    |.text|, CODE, READONLY

选择  |.text| 这个段,CODE表示代码段,READONLY表示只读,所以是ROM区域FLASH上。
                    
THUMB :使用Thumb汇编代码
 REQUIRE8:指定这个文件要8字节对齐
 PRESERVE8:令指定的这个文件保持8字节对齐
 ENTRY    
    ENTRY伪指令用于指定汇编程序的入口点。在一个完整的汇编程序中至少要有一个ENTRY(也可以有多个,当有多个ENTRY时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个ENTRY(可以没有)。    
    使用示例:    
    AREA Init ,CODE ,READONLY    
    ENTRY ; 指定应用程序的入口点                   
                

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值