ARM汇编伪指令AREA

2024-04-22 15:44
文章标签 arm 汇编 area 伪指令

本文主要是介绍ARM汇编伪指令AREA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ARM伪指令AREA用于定义一个代码段或数据段。其基本的语法格式如下:

AREA 段名 属性1,属性2, ...

其中:

  • 段名:是你为代码段或数据段指定的名称。如果段名以数字开头,则该段名需要用“│”括起来,如│1_test│。段名可以使用字母、小数点、竖线符号|、下划线_,等字符
  • 属性:用来描述代码段或数据段的特性。多个属性之间用逗号分隔。

常用的属性包括:

  • CODE:用于定义代码段,其默认属性为READONLY,该AREA区域中的代码或描述会被编译到FLASH中
  • DATA:用于定义数据段,其默认属性为READWRITE,一般该AREA区域中的代码或描述会被编译到RAM中
  • READONLY:指定本段为只读,常用于代码段,该属性值常和属性值CODE一起出现。
  • READWRITE:指定本段为可读可写,常用于数据段,该属性值常和属性值常和DATA一起出现。
  • ALIGN:用于指定对齐方式,其后面跟的是一个表达式,该表达式的取值范围通常为0~31,表示以2的表达式次方进行对齐。
  • COMMON:定义一个通用的段,它不包含任何的用户代码和数据。各源文件中同名的COMMON段会共享同一段存储单元,这相当于静态引用。

以STM32的启动文件为例,里面有很多AREA指令

图1

图2

可以看到,按照ARM的规则,AREA指令后面紧跟段名,有些段名是保留的(编译器内置的),这些保留的段名有特殊意义,例如上图中出现的特殊段名有:STACK、HEAP、RESET,|.text|。

对于STACK段,编译器会把该区域的【汇编代码或描述】编译到栈区,也即内存的最高字节处。

对于RESET段,编译器会把该区域的【汇编代码或描述】编译到flash的起始地址处,对于ARM一般是0x8000000,如果你修改了。

注意上面【】中说的不是汇编代码,而是【汇编代码或描述】。例如RESET段就是一个典型的没有可执行代码的区域,里面只有【描述】,确切说就是里面只有DCD占位指令,利用这些DCD描述了中断向量表,也即中断和异常的函数指针,如上图1所示.

而在有些段中,里面都是些汇编代码,如上图2中的|.text|段中,里面是由PROC和ENDP指令包裹的汇编函数。

这篇关于ARM汇编伪指令AREA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/926181

相关文章

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

bash: arm-linux-gcc: No such file or directory

ubuntu出故障重装了系统,一直用着的gcc使用不了,提示bash: arm-linux-gcc: No such file or directorywhich找到的命令所在的目录 在google上翻了一阵发现此类问题的帖子不多,后来在Freescale的的LTIB环境配置文档中发现有这么一段:     # Packages required for 64-bit Ubuntu

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

汇编:嵌入式软件架构学习资源

成为嵌入式软件架构设计师需要掌握多方面的知识,包括嵌入式系统、实时操作系统、硬件接口、软件设计模式等。 以下是一些推荐的博客和网站,可以帮助你深入学习嵌入式软件架构设计: ### 1. **Embedded.com**    - **网址**: [Embedded.com](https://www.embedded.com/)    - **简介**: 这是一个专注于嵌入式系统设计的专业网

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

ARM 虚拟化介绍

0.目录 文章目录 0.目录1.概述 1.1 Before you begin 2.虚拟化介绍 2.1 虚拟化为什么重要2.2 hypervisors的两种类型2.3 全虚拟化和半虚拟化2.4 虚拟机和虚拟CPUs 3.AArch64中的虚拟化4.stage 2 转换 4.1 什么是stage 2 转换4.2 VMIDs4.3 VMID vs ASID4.4 属性整合和覆盖4.5模拟

GDB 查看汇编

查看汇编 x disassemble

SylixOS ARM平台下内存对齐访问

1.内存对齐 1.1     内存对齐概要 现代计算机中内存空间都是按照byte划分的,从理论上讲对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 1.2     内存对齐作用和原因 各个硬件平台对存储空间的处理上有很大的不同。一些平

C语言-程序环境 #预处理 #编译 #汇编 #链接 #执行环境

文章目录 前言 一、程序的环境翻译和执行环境 二、翻译环境 (一)、整体把握 (一)、编译 1、预处理(预编译) 2、编译 a、词法分析 b、语法分析 c、语义分析 d、符号汇总 3、汇编 (二)、链接 三、运行环境 总结​​​​​​​ 前言 路漫漫其修远兮,吾将上下而求索; PS:本文参考了《程序员的自我修养》,致敬大佬们! 一、程序的