热搜关键词: 电路基础ADC数字信号处理封装库PLC

pdf

ARM处理器开发详解(第2版)第3章

  • 1星
  • 2021-12-20
  • 1.11MB
  • 需要1积分
  • 7次下载
标签: 嵌入式

嵌入式

arm

arm

ARM处理器开发详解(第2版)第3章

ARM
理器
解-扉 出片.pdf 1 2014/5/27 13:55:03
C
M
Y
CM
MY
CY
CMY
K
3
ARM
微处理器的指令系统
ARM
指令集可以分为跳½指令、
数据处理指令、
程序状态寄存器传输指令、
Load/Store
指令、协处理器指令和异常中断产生指令。根据½用的指令类型不同,指令的寻址方式分
为数据处理指令寻址方式和内存访问指令寻址方式。
本章主要介绍
ARM
汇编语言。主要内容如下:
q
ARM
处理器的寻址方式。
q
ARM
处理器的指令集。
3.1
ARM
处理器的寻址方式
ARM
指令的寻址方式分为数据处理指令寻址方式和内存访问指令寻址方式。
3.1.1
数据处理指令寻址方式
数据处理指令的基本语法格式如下:
<opcode> {<cond>} {S} <Rd>,<Rn>,<shifter_operand>
其中,<shifter_operand>有
11
种½式,如表
3-1
所示。
3-1 <shifter_operand>的寻址方式
1
2
3
4
5
6
7
8
9
10
11
#<immediate>
<Rm>
<Rm>, LSL #<shift_imm>
<Rm>, LSL <Rs>
<Rm>, LSR
<Rm>, LSR
<Rm>, ASR
<Rm>, ASR
#<shift_imm>
<Rs>
#<shift_imm>
<Rs>
立即数寻址
寄存器寻址
立即数逻辑左移
寄存器逻辑左移
立即数逻辑右移
寄存器逻辑右移
立即数算术右移
寄存器算术右移
立即数循环右移
寄存器循环右移
寄存器扩展循环右移
寻 址 方
<Rm>, ROR #<shift_imm>
<Rm>, ROR <Rs>
<Rm>, RRX
ARM
处理器开发详解——基于
ARM Cortex-A8
处理器的开发设计(第
2
版)
数据处理指令寻址方式可以分为以下几种。
(1)立即数寻址方式。
(2)寄存器寻址方式。
(3)寄存器移½寻址方式。
1.立即数寻址方式
指令中的立即数是由一个
8bit
的常数移动
4bit
偶数½(0,2,4,…,26,28,30)得
到的。所以,每一条指令½包含一个
8bit
的常数
X
和移½值
Y,得到的立即数 = X
循环右
移(2×Y)
,如图
3-1
所示。
3-1
立即数表示方法
下面列举了一些有效的立即数:
0xFF、0x104、0xFF0、0xFF00、0xFF000、0xFF000000、0xF000000F
下面是一些无效的立即数:
0x101、0x102、0xFF1、0xFF04、0xFF003、0xFFFFFFFF、0xF000001F
下面是一些应用立即数的指令:
MOV
ADD
CMP
BIC
R0,#0
R3,R3,#1
R7,#1000
R9,R8,#0xFF00
;送 0
R0
;R3
的值加
1
;将 R7
的值和
1000
比较
;将 R8
8½15
½清零,结果保存在
R9
2.寄存器寻址方式
寄存器的值可以被直接用于数据操½指令,这种寻址方式是各类处理器经常采用的一
种方式,也是一种执行效率较高的寻址方式,如:
MOV R2,R0
ADD R4,R3,R2
CMP R7,R8
;R0
的值送
R2
;R2
R3,结果送 R4
;比较 R7
R8
的值
3.寄存器移½寻址方式
寄存器的值在被送到
ALU
之前,可以事先经过桶½移½寄存器的处理。预处理和移½
发生在同一周期内,所以有效地½用移½寄存器,可以增加代码的执行效率。
下面是一些在指令中½用了移½操½的例子:
ADD
MOV
RSB
SUB
MOV
R2,R0,R1,LSR #5
R1,R0,LSL #2
R9,R5,R5,LSL #1
R1,R2,R0,LSR #4
R2,R4,ROR R0
52
3
ARM
微处理器的指令系统
3.1.2
内存访问指令寻址方式
内存访问指令的寻址方式可以分为以下几种:
(1)字及无符号字节的
Load/Store
指令的寻址方式。
(2)杂类
Load/Store
指令的寻址方式。
(3)批量
Load/Store
指令的寻址方式。
(4)协处理器
Load/Store
指令的寻址方式。
1.字及无符号字节的 Load/Store
指令的寻址方式
字及无符号字节的
Load/Store
指令语法格式如下:
LDR|STR{<cond>}{B}{T} <Rd>,<addressing_mode>
其中,<addressing_mode>共有
9
种寻址方式,如表
3-2
所示。
3-2
字及无符合字节的
Load/Store
指令的寻址方式
1
[Rn,#±<offset_12>]
立即数偏移寻址
(Immediate
offset)
寄存器偏移寻址
2
[Rn,±Rm]
(Register
offset)
带移½的寄存器偏移寻址
3
[Rn,Rm,<shift>#< offset_12>]
(Scaled
register offset)
立即数前索引寻址
4
[Rn,#±< offset_12>]!
(Immediate
pre-indexed)
寄存器前索引寻址
5
[Rn,±Rm]!
(Register
post-indexed)
带移½的寄存器前索引寻址
6
[Rn,Rm,<shift>#< offset_12>]!
(Scaled
register pre-indexed)
立即数后索引寻址
7
[Rn],#±< offset_12>
(Immediate
post-indeted)
寄存器后索引寻址
8
[Rn],±<Rm>
(Register
post-indexed)
带移½的寄存器后索引寻址
9
[Rn],±<Rm>,<shift>#< offset_12>
(Scaled
register post-indexed)
上表中,
“!”表示完成数据传输后要更新基址寄存器。
2.杂类 Load/Store
指令的寻址方式
½用该类寻址方式的指令的语法格式如下:
LDR|STR{<cond>}H|SH|SB|D <Rd>,<addressing_mode>
53
4
ARM
处理器开发详解——基于
ARM Cortex-A8
处理器的开发设计(第
2
版)
½用该类寻址方式的指令包括(有符号/无符号)半字
Load/Store
指令、有符号字节
Load/Store
指令和双字
Load/Store
指令。
该类寻址方式分为
6
种类型,如表
3-3
所示。
3-3
杂类
Load/Store
指令的寻址方式
1
[Rn,#±<offset_8>]
立即数偏移寻址
(Immediate
offset)
寄存器偏移寻址
2
[Rn,±Rm]
(Register
offset)
立即数前索引寻址
3
[Rn,#±< offset_8>]!
(Immediate
pre-indexed)
寄存器前索引寻址
4
[Rn,±Rm]!
(Register
post-indexed)
立即数后索引寻址
5
[Rn],#±< offset_8>
(Immediate
post-indexed)
寄存器后索引寻址
6
[Rn],±<Rm>
(Register
post-indexed)
3.批量 Load/Store
指令寻址方式
批量
Load/Store
指令将一片连续内存单元的数据加½½到通用寄存器组中或将一组通用
寄存器的数据存储到内存单元中。
批量
Load/Store
指令的寻址模式产生一个内存单元的地址范围,指令寄存器和内存单
元的对应关系满足这样的规则,即编号½的寄存器对应于内存中½地址单元,编号高的寄
存器对应于内存中的高地址单元。
该类指令的语法格式如下:
LDM|STM{<cond>}<addressing_mode> <Rn>{!},<registers><^>
该类指令的寻址方式如表
3-4
所示。
3-4
批量
Load/Store
指令的寻址方式
1
2
3
4
IA(Increment After)
IB(Increment Before)
DA(Decrement After)
DB(Decrement Before)
后递增方式
先递增方式
后递减方式
先递减方式
4.堆栈操½寻址方式
堆栈操½寻址方式和批量
Load/Store
指令寻址方式十分类似。½对于堆栈的操½,数
据写入内存和从内存中读出要½用不同的寻址模式,
因为进栈操½
(Pop)
和出栈操½
(Push)
要在不同的方向上调整堆栈。
54
展开预览

文档解析

ARM微处理器的指令系统是其架构的核心部分,它定义了处理器能够理解和执行的指令集合。这些指令集包括数据传输、算术运算、逻辑运算、程序控制、系统管理等操作。ARM指令集采用RISC(精简指令集计算)架构,以实现高效的处理性能和简单的设计。在指令寻址方面,ARM支持多种寻址方式,如立即数寻址、寄存器寻址、移位操作寻址等,以适应不同的数据处理需求。此外,ARM还提供了异常中断产生指令、协处理器指令和状态操作指令等,以增强处理器的灵活性和功能。通过这些指令,开发者能够编写高效的程序,实现对硬件资源的精确控制,满足各种应用场景的需求。

猜您喜欢

评论

登录/注册

意见反馈

求资源

回顶部

推荐内容

热门活动

热门器件

随便看看

  • DS18B20的告警搜索命令如何用啊
    手册上只说了超过设定值,告警标志位会置位,但是如何查询到呢?单片机在那个Alarm Search(ECh)命令发出后,18B20里面也没有寄存器可以读到报警位啊?现在只能用软件方式查询,当前温度值与实现设定好的TH,TL的比较关系,从而判断是否超过了温度的上下限值。这样做比较浪费单片机的时间啊。那个Alarm Search(ECh)告警搜索具体怎么用啊?哪位大侠谈谈吧:)
  • 散分啊,关于24系列的容量与写缓冲大小的判断!
    24系列存储器内部没有型号标志信息,在我的板上装有不同型号的24IC,写个程序来判断该24系列IC的地址、存储容量和页写缓冲。各位大虾给个思路啊
  • timer0 关闭溢出中断 问题请假
    用点阵做了一个时钟程序用timer0控制点阵刷新用timer2使用异步时钟32768计时现在遇到一个问题做了一个滚动字幕希望每十分钟显示一次那么应该每十分钟关闭一次timer0的溢出中断在主函数中控制滚动字幕写了如下程序while(1){if(m%10==0s==0)//m为分钟s为秒满足每十分钟进入{TIMSK=~_BV(TOIE2);..//此处省略滚动字幕程序通过delay函数控制.TIMS
  • 【MXCHIP Open1081】基本代码注释——WifiLink
    [size=4]整个软件库内部是采用非阻塞的方式,所以大量的状态返回都是通过回调函数的方式,而不是等待函数返回值的方式。程序的编写可以分为2部分,1是在main函数中的初始化和配置。2是各种回调函数的填充实现。[/size][size=4]Demo1_WiFi_Link,演示了AP的建立和对已有网络的加入;[/size][size=4]Demo2_TCP_UDP_ECHO,主要涉及了TCP和UDP
  • EEWORLD大学堂----消费电子应用及设计研讨会
    消费电子应用及设计研讨会:https://training.eeworld.com.cn/course/5540
  • 32.768k晶振不起振问题
  • 2812 串口通信问题
  • mp1540升压电路的问题
  • Altera PLL 的奇怪问题
  • EDA技术的仿真软件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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