ARM裸机开发笔记4ARM寻址方式

发布者:清新自然最新更新时间:2016-06-07 来源: eefocus关键字:ARM裸机  寻址方式 手机看文章 扫描二维码
随时随地手机看文章
所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。

 

立即(数)寻址

操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式为立即寻址

ADD R0,R0,#1                   ;R0<-R0+1

ADD R0,R0,#ox3f                  ;R0<-R0+0x3f

以上指令中,第二个源操作数即为立即数。立即数以#开头

 

 

寄存器寻址

利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。

ADD R0,R1,R2       :R0<-R1+R2

该指令将寄存器R1和R2的内容相加放到R0中。

 

寄存器间接寻址

以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中

ADD R0,R1,[R2]        ;R0<-R1+[R2]

LDR R0,[R1]            ;R0<-[R1]

[]表示取寄存器内容处的存储器的值

 

基址变址寻址方式

将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址:

LDR R0,[R1,#4]    ;R0<- [R1+4]

LDR R0,[R1,#4] !   ;R0<- [R1+4], R1<- R1+4

LDR R0,[R1],#4    ;R0<- [R1], R1<- R1+4

LDR R0,[R1,R2]    ;R0<-[R1+R2]

 

 

多寄存器寻址

一条指令可以完成多个寄存器值的传送。一条指令完成传送最多16个通用寄存器的值

LDMIA R0,{R1,R2,R3,R4}       ;R1<- [R0]    R2<-[R0+4]    R3<-[R0+8]   R4<-[R0+12]

IA表示每次执行完加载操作后,R0按字长度增加

 

相对寻址

以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。

以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:

 

BL    NEXT             ;跳转到子程序NEXT处执行

 ·····················

NEXT

··························

MOV PC,LR        ;从子程序返回

 

椎栈寻址

椎栈指针总是指向栈顶

递增椎栈:向高地址方向生长

递减椎栈:向低地址方向生长

满椎栈:椎栈指针指向最后压入椎栈的有效数据项

空椎栈:椎栈指针指向下一个要放入数据的空位置

关键字:ARM裸机  寻址方式 引用地址:ARM裸机开发笔记4ARM寻址方式

上一篇:ARM裸机开发笔记3(ARM寄存器)
下一篇:STM32单片机学习(7) 串口通信printf重定向

推荐阅读最新更新时间:2024-03-16 14:56

ARM裸机学习一:S3C2440的时钟体系
1.时钟的产生 S3C2440的系统时钟图如下: S3C2440A的主时钟源由外部时钟(EXTCLK)或者外部晶振(XTIPll)提供,输入时钟源由模式控制引脚OM3和OM2控制选择,在复位信号的上升沿参考OM3和OM2的引脚将OM 的状态在内部锁定 大致过程是:经过OM3和OM2引脚选择的外部时钟进入MPLL(锁相环)和UPLL进行倍频,经过MPLL得到FCLK直接供给给CPU,除此以外,FCLK还会经过HDIV和PDIV分频得到HCLK和PCLK,分别提供给APB总线和AHB总线。而经过UPLL的会产生UCLK供给USB。如图: 2.修改时钟频率的过程 1.上电后,复位芯片(nRESET)等待电源稳定再输出高电
[单片机]
<font color='red'>ARM</font><font color='red'>裸机</font>学习一:S3C2440的时钟体系
ARM裸机开发bootloader核心初始化
一、异常向量表 1、异常的定义 异常:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事情。 2、异常的类型 ARM处理器有7种Exception type分别为:Reset、Undefined instructions、Software interrupt、Prefetch Abort、Data Abort、IRQ、FIQ 2、什么是异常向量 当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称为异常向量。 3、异常向量表 由七个异常向量及其处理函数跳转关系组成的表为异常向量表。 下面是一个例子: start.S .text
[单片机]
<font color='red'>ARM</font><font color='red'>裸机</font>开发bootloader核心初始化
S3C2440-裸机篇-02 | 安装和使用arm-linux-gcc交叉编译工具链
1.为什么需要交叉编译工具 宿主机运行的是标准Linux操作系统,编译出的程序却需要在目标机的Linux上跑,这就叫交叉编译,编译器叫做交叉编译器。 之前我们已经使用过gcc编译Linux本地主机的程序(Linux C语言编程(上篇) | gcc的使用),而我们现在需要的这个编译器的目标系统是ARM,不运行操作系统,仅运行裸机程序,需要在Linux主机上编译出可以运行在S3C2440@ARM920T芯片上跑的程序,所以不能使用这个编译器,需要使用arm-linux-gcc交叉编译器。 2.arm-linux-gcc的安装 arm-linux-gcc是ARM官方基于Linux平台的arm编译器,其特点有: 开源免费 支持
[单片机]
S3C2440-<font color='red'>裸机</font>篇-02 | 安装和使用<font color='red'>arm</font>-linux-gcc交叉编译工具链
ARM裸机点LED
1 汇编实现: .global _start _start: // 把外设的基地址告诉CPU ldr r0, =0x70000000 //对于6410来说,内存(0x00000000~0x60000000),外设(0x70000000-0x7fffffff) orr r0, r0, #0x13 //外设大小:256M mcr p15,0,r0,c15,c2,4 //把r0的值(包括了外设基地址+外设大小)告诉cpu // 关看门狗 ldr r0, =0x7E004000 mov r1, #0 str r1, // 设置GP
[单片机]
ARM—2410中断控制LED裸机程序
读者注意: 后面跟的是文件名,下面是代码,程序分为几个文件!!文件使用2410开发板调试,如换其他开发板需做部分修改! 一/汇编部分head.S @****************************************************************************** @ File:head.S @ 功能:初始化,设置中断模式、管理模式的栈,设置好中断处理函数 @****************************************************************************** .extern main .text .global _s
[单片机]
ARM裸机串口UART
串口UART原理 异步通信:传输单位是一个字符,两个字符之间时间间隔不固定,时间固定为同步。 通信协议:通信双方共同制定的规则,有数据格式:奇偶校验位、停止位.....,通信流程上的规格. UART(universal asynchronous receivertransmitter):通用异步收发器,用来串行传输数据,发送时,CPU将数据并行写入UART,UART按照一定格式在一位的数据线上串行发送,接受时,从一位数据线接受串行的数据。 S3c2440有三个独立的uart接口,并且每个uart包括64字节的接受和发送fifo。 串口基本工作原理:分为发送和接收部分,发送部分:1接口用来接收数据,数据由CPU通过
[单片机]
<font color='red'>ARM</font><font color='red'>裸机</font>串口UART
ARM裸机篇--串口UART实验
串口应该都很熟悉了,具体通信原理我就不提了,这个百度上都很多讲的,然后就直接看函数了。 void Uart_SendByte(int data)//这个函数是发送整型数据,参数为data { if(whichUart==0)//这个是选中串口0 { if(data=='n')//然后判断数据不为空 {       /*寄存器的原始宏定义,       #define rUTRSTAT0 (*(volatile unsigned *)0x50000010) //UART 0 Tx/Rx status*/ while(!(rUTRSTAT0 & 0x2));/*这个就是查询串口
[单片机]
<font color='red'>ARM</font><font color='red'>裸机</font>篇--串口UART实验
热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved