ARM汇编语言的程序结构

  1. 一个ARM汇编语言源程序的基本结构:

    AREA Init, CODE, READONLY

    ENTRY

    Start

  LDR R0, =0x3FF5000

  LDR R1, 0xFF

  STR R1, [R0]

  LDR R0, =0x3FF5008

  LDR R1, 0x01

  STR R1, [R0]

  ... ... ... ... ... ...

  END

  在 ARM( Thumb)汇编语言程序中,以程序段为单位组织代码。

  段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行的映象文件。

可执行映象文件通常由以下几部分构成:

  — 一个或多个代码段,代码段的属性为只读。

  — 零个或多个包含初始化数据的数据段,数据段的属性为可读写。

  — 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。

  链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。因此源程序中段之间的相对位置与可执行的映象文件中段的相对位置一般不会相同。

  在汇编语言程序中,用 AREA 伪指令定义一个段,并说明所定义段的相关属性,本例定义一个 名为 Init 的代码段,属性为只读。 ENTRY 伪指令标识程序的入口点,接下来为指令序列,程序的末尾为 END 伪指令,该伪指令告诉编译器源文件的结束,每一个汇编程序段都必须有一条 END 伪指令,指示代码段的结束。

   2. 一个ARM汇编语言的子程序调用

      AREA Init, CODE, READONLY

      ENTRY

     Start

      LDR R0, =0x3FF5000

       LDR R1, 0xFF

      STR R1, [R0]

       LDR R0, =0x3FF5008

       LDR R1, 0x01

       STR R1, [R0]

        BL PRINT_TEXT

       ... ... ... ... ... ...

     PRINT_TEXT

      ... ... ... ... ... ...

      MOV PC,BL

      ... ... ... ... ... ...

      END

    在 ARM 汇编语言程序中,子程序的调用一般是通过 BL 指令来实现的。

在程序中,使用指令:

      BL 子程序名

      即可完成子程序的调用

该指令在执行时完成如下操作:将子程序的返回地址存放在连接寄存器 LR 中,同时将程序计器 PC 指向子程序的入口点,当子程序执行完毕需要返回调用处时,只需要将存放在 LR 中的返回地址重新拷贝给程序计数器 PC 即可。在调用子程序的同时,也可以完成参数的传递和从子程序返回运算的结果,通常可以使用寄存器 R0 ~ R3 完成。

时间: 2024-10-08 02:44:53

ARM汇编语言的程序结构的相关文章

[基于Android的ARM汇编语言系列]之二:原生程序的生成过程

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 所谓的原生程序指的是用C/C++编写的程序,下面来详细演示一下原生程序是怎么一步步生成汇编代码的. 这里编译的是一个简单的hello.c程序,如下所示: #include <stdio.h> int main(int argc, char* argv[]){ printf("Hello AR

[基于Android的ARM汇编语言系列]之一:ARM汇编语言开篇

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 这是[基于Android的ARM汇编语言系列]博文的开篇文章,这里会先介绍一下ARM处理器的大致分类和作用. 一 ARM处理器与ARM指令集 整个ARM处理器被分为三个部分: Classic Embedded Application Classic被称为经典系列. ARM1~ARM11一直都以数字来命名

程序是怎样跑起来的-第10章 通过汇编语言了解程序的实际构成

第10章通过汇编语言了解程序的实际构成 热身问题 1.本地代码指令中,表示其功能的英文缩写称为什么? 助记符.汇编语言是通过利用助记符来记述程序的. 2.汇编语言的源代码转换成本地代码的方式称为什么? 汇编.使用汇编器这个工具来进行汇编. 3.本地代码转换成汇编语言的源代码的方式称为什么? 反汇编.通过返汇编,得到人们可以理解的代码. 4.汇编语言的源文件的扩展名,通常是什么格式? .asm..asm是assembler(汇编器)的简称 5.汇编语言程序中的段定义指的是什么? 构成程序的命令和数

C#学习笔记二:C#程序结构

从最简单的HelloWorld开始入手,这是一个最低限度的C#程序结构. C# Hello World 示例 一个C#程序主要由以下几部分组成: 命名空间声明 一个类 类方法 类属性 一个Main方法 语句和表达式 注释 先看看下面的示例,将打印字的简单的代码 "Hello World": using System; namespace HelloWorldApplication { class HelloWorld { static void Main(string[] args)

黑马程序员---C基础3【变量的易错】【程序结构】【if语句】【Switch语句】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [变量的易错] 1.变量为什么要初始化为0 int  sum,a=3: sum = sum+a 如果未初始化则会成为一个不确定的变量,结果也会不确定,容易出错. 2.不同类型的变量之间的转换 切记int  a=1,b=0:b=1-1.5:其中b为一个整型所有结果是保留整数部分的0,而不是-0.5,又因为0没有正负之分,所有保存结果为b=0: 3.关于Xcode的一个快速注释的插件 快捷键://

计算机病毒的定义、特征、程序结构、命名、传播与生命周期

一.定义:凡是人为编制的,干扰计算机正常运行并造成计算机软硬件故障, 甚至破坏计算机数据的可以自我复制的计算机程序或者指令集合 都是计算机病毒. 二.特征:非法性.隐藏性.潜伏性.可触发性.表现性.破坏性.传染性. 针对性.变异性.不可预见性. 隐藏性:缩小体积.潜入系统目录.标记坏簇.系统漏洞. 潜伏性:依附宿主程序伺机扩散. 破坏性:良性病毒.恶性病毒. 不可预见性:病毒超前于反病毒产品. 三.计算机病毒的程序结构 1> 引导部分:将病毒主题加载到内存,为传染部分做准备. 2> 传染部分:

C# 程序结构

C# 程序结构 在我们学习 C# 编程语言的基础构件块之前,让我们先看一下 C# 的最小的程序结构,以便作为接下来章节的参考. C# Hello World 实例 一个 C# 程序主要包括以下部分: 命名空间声明(Namespace declaration) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(Statements)& 表达式(Expressions) 注释 让我们看一下上面程序的各个部分: 程序的第一行 using System; - using 

python基础(3)—— 程序结构

python和其他的编程语言一样,也有三种程序结构.顺序结构,选择结构,循环结构. 1.顺序结构 顺序结构按照顺序执行程序,不做过多解释. 2.选择结构     2.1 if 语句 if condition: expression 示例: [[email protected]]# cat if.py #!/usr/bin/env python if 3 < 5: print "3 less than 5" # 语句块里面可以是多个语句if 3 > 4: print &quo

JavaWeb-07(tomcat与web程序结构与Http协议与Servlet基础)

JavaWeb-07 JavaWeb-tomcat与web程序结构与Http协议与Servlet基础 HTTP协议(记住) 1.http协议:规定了客户端和服务端交流时的数据格式 a. WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议. b. HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程及数据本身的格式. c. HT