一文看懂LR寄存器及BXLR指令的两种用途

合集下载

冯诺依曼体系结构计算机的要点和工作过程

冯诺依曼体系结构计算机的要点和工作过程

1、简述诺依曼体系结构计算机的要点和工作过程。

答:诺依曼体系结构计算机的要点:计算机中的信息(程序和数据)以二进制方式表示。

程序预存储,机器自动执行。

计算机由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

计算机通过执行预存储在存储器中的程序来完成预定的运算。

程序由计算机的指令序列构成,计算机在处理器的控制下,首先从存储器读取一条待执行的指令到处理器中,接下来分析这条指令,而后发出该指令对应的电平脉码序列,即执行该指令。

并以此递归运行程序。

2、何谓总线?计算机中有哪几类总线?简述其用途。

答:计算机的总线(Bus)就是连接计算机硬件各部件,用于计算机硬件各部件之间信息传输的公共通道。

按照其传送信号的用途属性,总线可细分为:地址总线(Address Bus)、数据总线(Data Bus)和控制总线(Control Bus)三类。

♦地址总线(A_Bus):专用于在CPU、存储器和I/O端口间传送地址信息的信号线。

此类信号线传送的信息总是从CPU到存储器或I/O端口,它是单向信号线。

♦数据总线(D_Bus):专用于在CPU、存储器和I/O端口间传送数据信息的信号线。

此类信号线传送的信息可以是从CPU到存储器或I/O端口(“写”操作),也可能是从存储器或I/O端口到CPU(“读”操作),它是双向信号线。

♦控制总线(C_Bus):专用于CPU与其它部件之间传送控制信息和状态信息的信号线。

此类信号线的构成比较复杂,传送的控制、状态信息可以是从CPU到其它部件,也可能是从其它部件到CPU。

此类总线中的某些具体的线是单向的(或从CPU到其它部件,或反之),但作为总线来说,它是双向信号线。

3、中央处理器CPU是计算机的核心部件,主要功能是解释并执行计算机指令,完成数据处理和对计算机其他各部分进行控制。

存储器是计算机系统中用来存储程序和数据的信息记忆部件。

4、嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

ARM的37个寄存器详解

ARM的37个寄存器详解

ARM的37个寄存器详解ARM寄存器ARM共有37个32位物理寄存器,7种⼯作模式下可访问的寄存器见下表,User和System使⽤完全相同的物理寄存器。

2.1 R0~R7所有⼯作模式下,R0-R7都分别指向同⼀个物理寄存器(共8个物理寄存器),它们未被系统⽤作特殊的⽤途。

在中断或异常处理进⾏⼯作模式转换时,由于不同⼯作模式均使⽤相同的物理寄存器,可能造成寄存器中数据的破坏。

2.2 R8~R12在User&System、IRQ、Svc、Abt和Und模式下访问的R8~R12都是同⼀个物理寄存器(共5个物理寄存器);在FIQ模式下,访问的R8_fiq~R12_fiq是另外独⽴的物理寄存器(共5个物理寄存器)。

2.3 R13和R14在User&System、IRQ、FIQ、Svc、Abt和Und访问的R13_~R14都是各⾃模式下独⽴的物理寄存器(共12个物理寄存器)。

R13在ARM指令中常⽤作堆栈指针(SP),但这只是⼀种习惯⽤法,⽤户也可使⽤其他的寄存器作为堆栈指针。

⽽在Thumb指令集中,某些指令强制性的要求使⽤R13作为堆栈指针。

由于处理器的每种⼯作模式均有⾃⼰独⽴的物理寄存器R13,在⽤户应⽤程序的初始化部分,⼀般都要初始化每种模式下的R13,使其指向该⼯作模式的栈空间。

这样,当程序进⼊异常模式时,可以将需要保护的寄存器放⼊R13所指向的堆栈,⽽当程序从异常模式返回时,则从对应的堆栈中恢复,采⽤这种⽅式可以保证异常发⽣后程序的正常执⾏。

R14称为链接寄存器(Link Register),当执⾏⼦程序调⽤指令(BL)时,R14可得到R15(程序计数器PC)的备份。

在每⼀种⼯作模式下,都可⽤R14保存⼦程序的返回地址,当⽤BL或BLX指令调⽤⼦程序时,将PC的当前值复制给R14,执⾏完⼦程序后,⼜将R14的值复制回PC,即可完成⼦程序的调⽤返回。

以上的描述可⽤指令完成。

执⾏以下任意⼀条指令:MOV PC, LRBX LR在⼦程序⼊⼝处使⽤以下指令将R14存⼊堆栈:STMFD SP!,{,LR}对应的,使⽤以下指令可以完成⼦程序返回:LDMFD SP!,{,PC}R14也可作为通⽤寄存器。

arm汇编程序退出方式

arm汇编程序退出方式

arm汇编程序退出方式1.引言概述部分的内容如下所示:1.1 概述ARM汇编语言是一种低级的程序设计语言,专门用于编写ARM架构下的机器指令。

与高级语言相比,ARM汇编语言更加底层且与硬件关联密切,可以直接操作寄存器、内存和设备等。

在编写ARM汇编程序时,了解如何正确退出程序是非常重要的。

程序的退出方式通常有两种:正常退出和异常退出。

正常退出是指程序在完成所需的任务后,通过一系列指令主动结束程序的执行。

异常退出是指在程序执行过程中发生了错误或异常情况,导致程序意外终止。

无论是正常退出还是异常退出,程序的结束都需要进行一系列的清理工作,如关闭文件、释放内存等,以确保程序能够正确退出并回收资源。

在ARM汇编程序中,正常退出通常通过以下几种方式实现:1. 返回指令:使用指令`BX LR`或`MOV PC, LR`将程序的执行流程返回到调用该函数的位置。

这通常用于函数的正常返回。

2. 终止指令:使用指令`MOV PC, 0`或`MOV PC, R0`将程序的执行流程直接跳转到地址0处,从而结束程序的执行。

这通常用于主程序的结束。

异常退出则需要通过异常处理机制来实现,例如使用相关的中断处理程序或异常处理程序。

当程序发生异常情况时,处理程序会根据异常类型进行相应的处理和清理工作,最终将程序的执行流程返回到预定的位置。

本文将重点讨论ARM汇编程序的退出方式,以及如何正确地进行清理工作,确保程序的正常退出和资源的释放。

在接下来的章节中,我们将详细介绍不同的退出方式,并提供示例代码以说明其用法和注意事项。

1.2文章结构1.2 文章结构本文将围绕ARM汇编程序的退出方式展开讨论。

首先在引言部分进行了概述,介绍了本文的背景和意义。

接着通过文章结构的说明,将向读者展示本文的组织架构和思路。

在正文部分,将重点讨论两个要点,分别是“第一个要点”和“第二个要点”。

通过详细的解释和实例分析,将阐明ARM汇编程序退出的不同方式及其相关的特点和优缺点。

寄存器的工作原理

寄存器的工作原理

寄存器的工作原理寄存器是计算机中一种重要的数据存储器件,用于暂时存储和处理数据。

它是由一组触发器构成的,每个触发器可以存储一个二进制位。

寄存器在计算机的运算和控制过程中发挥着重要的作用。

一、寄存器的分类寄存器可以根据其功能和用途进行分类。

常见的寄存器包括通用寄存器、专用寄存器和状态寄存器。

1. 通用寄存器:用于存储操作数和中间结果,供算术逻辑单元(ALU)进行运算。

通用寄存器的个数和位数根据计算机的设计而定,常见的有8位、16位、32位和64位寄存器。

2. 专用寄存器:用于特定的功能或任务,如程序计数器(PC)、指令寄存器(IR)、地址寄存器(AR)等。

这些寄存器在计算机的控制过程中起到关键的作用。

3. 状态寄存器:用于存储特定的状态信息,如零标志位(ZF)、进位标志位(CF)等。

这些标志位用于判断运算结果的特性,以便进行后续的操作。

二、寄存器的工作原理寄存器的工作原理可以分为存储和读取两个过程。

1. 存储过程:a. 输入数据:当需要将数据存储到寄存器中时,首先将数据输入到寄存器的输入端。

b. 写入触发:通过控制信号,触发寄存器的写入操作,将输入的数据写入到触发器中。

c. 存储数据:写入触发后,数据被存储在寄存器中,并保持稳定,直到下一次写入操作。

2. 读取过程:a. 选择寄存器:根据需要读取的数据,选择相应的寄存器。

b. 读取触发:通过控制信号,触发寄存器的读取操作。

c. 输出数据:读取触发后,寄存器中的数据被输出到输出端,供其他部件使用。

三、寄存器的应用寄存器在计算机系统中有广泛的应用,主要体现在以下几个方面:1. 数据存储:寄存器用于存储数据,包括操作数、中间结果和地址等。

通过寄存器的高速读写能力,提高了计算机的数据处理效率。

2. 控制信号:寄存器中的状态信息被用于控制计算机的运行。

例如,程序计数器(PC)存储下一条指令的地址,指令寄存器(IR)存储当前执行的指令,通过这些寄存器的状态变化,控制计算机的指令执行流程。

常用的ARM汇编指令

常用的ARM汇编指令

常⽤的ARM汇编指令转⾃:https:///zb861359/article/details/81027021?utm_source=app1、 IMPORT和EXPORTIMPORT ,定义表⽰这是⼀个外部变量的标号,不是在本程序定义的EXPORT ,表⽰本程序⾥⾯⽤到的变量提供给其他模块调⽤的。

以上两个在汇编和C语⾔混合编程的时候⽤到。

2、AREA语法格式:AREA 段名属性1 ,属性2 ,……AREA伪指令⽤于定义⼀个代码段或数据段。

其中,段名若以数字开头,则该段名需⽤“|”括起来,如:|1_test|。

属性字段表⽰该代码段(或数据段)的相关属性,多个属性⽤逗号分隔。

常⽤的属性如下:— CODE 属性:⽤于定义代码段,默认为READONLY 。

— DATA 属性:⽤于定义数据段,默认为READWRITE 。

— READONLY 属性:指定本段为只读,代码段默认为READONLY 。

— READWRITE 属性:指定本段为可读可写,数据段的默认属性为READWRITE 。

— ALIGN 属性:使⽤⽅式为ALIGN表达式。

在默认时,ELF(可执⾏连接⽂件)的代码段和数据段是按字对齐的,表达式的取值范围为0~31,相应的对齐⽅式为2表达式次⽅。

— COMMON 属性:该属性定义⼀个通⽤的段,不包含任何的⽤户代码和数据。

各源⽂件中同名的COMMON段共享同⼀段存储单元。

⼀个汇编语⾔程序⾄少要包含⼀个段,当程序太长时,也可以将程序分为多个代码段和数据段。

使⽤⽰例:AREA Init ,CODE ,READONLY ; 该伪指令定义了⼀个代码段,段名为Init ,属性为只读。

3、LDR、LDRB、LDRHARM微处理器⽀持加载/存储指令⽤于在寄存器和存储器之间传送数据,加载指令⽤于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。

常⽤的加载存储指令如下:— LDR 字数据加载指令— LDRB 字节数据加载指令— LDRH 半字数据加载指令1) LDR指令有两种⽤法:a、ldr加载指令LDR指令的格式为:LDR{条件} ⽬的寄存器,<存储器地址>LDR指令⽤亍从存储器中将⼀个32位的字数据传送到⽬的寄存器中。

一文看懂LR寄存器的知识

一文看懂LR寄存器的知识

一文看懂LR寄存器的知识
 不知你在DEBUG程序,又或者阅读操作系统源码时候有没细心观察,从一个普通子函数返回与异常(中断)返回的汇编指令都是BX LR,但是这两者的意义是一样的吗?这篇文章就来揭开LR寄存器的神秘面纱。

 当单片机涉及函数跳转或者任务调度的时候,理解MCU如何处理堆栈与改变各个通用寄存器的状态尤为重要,下面就来比较一下在不同情况下LR寄存器的意义。

 上图是一个简单的例子,当仿真点击“下一步”的时候,MCU就会执行BX LR指令,并且从aa子函数返回到main函数中,可以看到在普通子函数里执行BX LR的意义是“跳转到LR寄存器里的地址执行”。

寄存器的工作原理

寄存器的工作原理

寄存器的工作原理寄存器是计算机中用来存储和处理数据的一种重要组件。

它是一种高速的、临时的存储单元,用于暂时保存计算机运算过程中的数据和指令。

寄存器在计算机的运算过程中发挥着至关重要的作用,对于计算机的性能和功能起着决定性的影响。

一、寄存器的定义和分类寄存器是计算机中一种用来暂时存储数据的高速存储器件。

根据其功能和用途的不同,寄存器可以分为通用寄存器、专用寄存器和状态寄存器等几种类型。

1. 通用寄存器:通用寄存器是计算机中最常用的一种寄存器,用于存储临时数据和运算结果。

通用寄存器的数量和位数根据计算机的体系结构和指令集的设计而有所不同。

2. 专用寄存器:专用寄存器是用于特定目的的寄存器,例如程序计数器(PC)用于存储下一条指令的地址,指令寄存器(IR)用于存储当前正在执行的指令等。

3. 状态寄存器:状态寄存器用于存储计算机的状态信息,例如标志位寄存器(Flag Register)用于存储运算结果的状态信息,包括零标志位、进位标志位等。

二、寄存器的工作原理寄存器的工作原理可以分为存储和读取两个过程。

1. 存储过程:当计算机需要将数据存储到寄存器中时,首先需要将数据从主存储器(RAM)中读取出来,然后通过数据总线将数据传输到寄存器中。

在传输过程中,控制信号会使得寄存器的写使能端(WE)为高电平,使得寄存器接收并存储数据。

2. 读取过程:当计算机需要从寄存器中读取数据时,需要通过地址总线将寄存器的地址发送给控制器,控制器根据地址选择对应的寄存器,并通过数据总线将数据传输给计算机的其他部件。

在传输过程中,控制信号会使得寄存器的读使能端(RE)为高电平,使得寄存器输出数据。

三、寄存器的应用寄存器在计算机中有广泛的应用,主要包括以下几个方面:1. 数据存储:寄存器用于存储临时数据和运算结果,可以提供高速的数据存取速度,加快计算机的运行效率。

2. 指令存储:寄存器用于存储计算机指令,包括指令寄存器(IR)和程序计数器(PC)等。

[整理]寄存器详细讲解

[整理]寄存器详细讲解

[整理]寄存器详细讲解-------------寄存器32位CPU的寄存器结构寄存器是中央处理器内的组成部分。

寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。

在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。

在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

目录编辑本段寄存器英文名称:Register寄存器寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。

寄存器通常都是以他们可以保存的位元数量来估量,举例来说,一个“8 位元寄存器”或“32 位元寄存器”。

寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出来。

寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。

更适当的是称他们为“架构寄存器”。

例如,x86 指令集定义八个32 位元寄存器的集合,但一个实作x86 指令集的CPU 可以包含比八个更多的寄存器。

寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

编辑本段分类数据寄存器- 用来储存整数数字(参考以下的浮点寄存器)。

在某些简单/旧的CPU,特别的数据寄存寄存器器是累加器,作为数学计算之用。

地址寄存器- 持有存储器地址,以及用来访问存储器。

在某些简单/旧的CPU里,特别的地址寄存器是索引寄存器(可能出现一个或多个)。

通用目的寄存器(GPRs)- 可以保存数据或地址两者,也就是说他们是结合数据/地址寄存器的功用。

浮点寄存器(FPRs) - 用来储存浮点数字。

常数寄存器- 用来持有只读的数值(例如0、1、圆周率等等)。

向量寄存器- 用来储存由向量处理器运行SIMD(Single Instruction, Multiple Data)指令所得到的数据。

特殊目的寄存器- 储存CPU内部的数据,像是程序计数器(或称为指令指针),堆栈寄存器,以及状态寄存器(或称微处理器状态字组)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一文看懂LR寄存器及BXLR指令的两种用途LR寄存器是ARM体系结构中的一个特殊寄存器,全称为Link Register。

在函数调用和返回过程中,LR寄存器具有重要的作用。

LR寄存器有两种常见的用途,同时也和BXLR指令密切相关。

首先,LR寄存器用于函数调用的链接。

当一个函数被调用时,调用指令通常会将下一条指令的地址存储到LR寄存器中。

这样,当函数执行完毕后,可以通过BXLR指令将程序控制权返回到原来的调用点。

在函数返回时,BXLR指令会将LR中保存的地址加载到程序计数器(PC)中,从而实现函数的返回。

其次,LR寄存器还用于存储异常返回地址。

当处理器进入异常处理模式(如中断或异常)时,处理器会将PC的值保存到LR寄存器中,然后跳转到异常处理程序。

而当异常处理程序执行完毕时,通过BXLR指令将LR中保存的异常返回地址加载到PC中,从而实现从异常处理返回到原来的程序。

综上所述,LR寄存器在函数调用和返回过程中起着关键的作用。

在函数调用时,LR寄存器存储下一条指令的地址,并通过BXLR指令返回到原来的调用点;在异常处理时,LR寄存器存储PC的值,并通过BXLR指令返回到原来的程序。

BXLR指令是ARM指令集中的一条特殊指令,用于将程序控制权返回到一些地址。

BXLR指令的使用需要结合LR寄存器来完成,在函数调用和异常处理两个场景中有不同的用途。

在函数调用中,BXLR指令用于将程序控制权返回到LR寄存器中保存的地址,即函数调用的返回点。

当函数执行完毕后,通过BXLR指令从函数返回到原来的调用点,继续执行后续指令。

在异常处理中,BXLR指令用于将程序控制权返回到LR寄存器中保存的异常返回地址,即异常处理的返回点。

当异常处理程序执行完毕后,通过BXLR指令从异常处理返回到原来的程序,继续执行后续指令。

需要注意的是,BXLR指令只能在ARM状态下使用,无法在Thumb状态下使用。

在Thumb状态下,可以通过BLX指令实现相似的功能,即将程序控制权返回到一些地址。

综上所述,LR寄存器和BXLR指令在函数调用和异常处理中具有重要的作用。

LR寄存器用于存储返回地址,而BXLR指令用于实现函数调用和异常处理的返回。

这种设计可以简化函数调用和异常处理的逻辑,提高了系统的可维护性和可扩展性。

相关文档
最新文档