<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>ARM Instruction Formats and Timings</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Content-Language" content="zh-cn">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
</head>
<body>
<h1>ARM 指令格式和时序</h1>
<p><a href="http://www.pinknoise.demon.co.uk/">[email protected]</a>
<p>Last revised: 15th November 1995</p>
<p class="TITLE"><a href="mailto:mhss%[email protected]%3e">翻译:寒蝉退士</a></p>
<p class="TITLE"><font size="2"><b>译者声明</b>:译者对译文不做任何形式的担保并且不承担任何责任,译者对译文不拥有任何权利并且不负担任何义务。</font></p>
<hr>
<p><font color="#800000">The information included here is provided in good
faith, but no responsibility can be accepted for any damage or loss caused from
the use of information contained within this document even if the author has
been advised of the possibility of such loss.</font> <font color="#800000">真诚的提供包含在此处的信息,但对由于使用本文档包含的信息而导致的任何损害或损失不负责任,即使作者已经忠告了有这种损失的可能性。</font>
<p>这不是来自 ARM 公司的官方文档;实际上只有来自 ARM
公司的一群好人给出了一些修正,他们与本文档没有任何联系。他们不担保找出了其中所有的错误,所以如果你找到了错误请不要指责他们。
<p>非常欢迎校正和/补偿这个文档。请向 Robin Watts 报告。
<p>在整个文档中,‘字’指的是 32 位(4 字节)的内存。如果你不喜欢这样,那就太不幸了。
<p>这个文档有多种形式。参见<a href="http://www.pinknoise.demon.co.uk/ARMinstrs/index.html">完整描述它们的索引</a>。
<hr>
<a name="Contents">
<h2>目录</a> </h2>
<ul>
<li><a href="#Modes">处理器模式</a>
<li><a href="#Registers">寄存器</a>
<li><a href="#Pipeline">流水线</a>
<li><a href="#Timings">时序</a>
<li><a href="#Instructions">指令</a>
<ul>
<li><a href="#Condition">条件代码</a>
<li><a href="#Data">数据处理指令</a>
<li><a href="#Branch">分支指令</a>
<li><a href="#Multiplication">乘法</a>
<li><a href="#Long">长乘法(ARM7DM)</a>
<li><a href="#Transfer">单一数据传送</a>
<li><a href="#Block">块数据传送</a>
<li><a href="#Software">软件中断</a>
<li><a href="#CoproOp">协处理器数据操作</a>
<li><a href="#CoproTrans">协处理器数据传送和寄存器传送</a>
<li><a href="#Swap">单一数据交换(ARM 3 和以后,包括 ARM 2aS)</a>
<li><a href="#Status">状态寄存器传送(ARM 6 和以后)</a>
<li><a href="#Undefined">未定义指令</a></li>
</ul>
<li><a href="#Credits">贡献</a></li>
</ul>
<hr>
<a name="Modes">
<h2>处理器模式</h2>
</a>
<p>ARM 有一个用户模式和多个有特权的超级用户模式。它们是:
<dl>
<dt>IRQ
<dd>在触发中断请求(IRQ)时进入。
<dt>FIQ
<dd>在触发快速中断请求(FIQ)时进入。
<dt>SVC
<dd>在指令一个软件中断(SWI)时进入。
<dt>Undef
<dd>在执行了一个未定义的指令时进入(不存在于 ARM 2 和 3,在这里进入
SVC 模式)。
<dt>Abt
<dd>在一个内存访问尝试被内存管理器(例如,MEMC 或 MMU)所终止时进入,通常因为所做的尝试要访问不存在的内存或者在没有充足特权的模式下访问内存(不存在于
ARM 2 和 3,在这里进入 SVC 模式)。</dd>
</dl>
<p>在每种情况下还调用适当的硬件向量。
<p>
<hr>
<a name="Registers">
<h2>寄存器</h2>
</a>
<p>ARM 2 和 3 有 27 个 32
位处理器寄存器,在任何给定时间只有其中的 16 个是可见的(是哪十六个取决于处理器模式)。它们被引用为
R0-R15。
<p>ARM 6 和以后有 31 个 32
位处理器寄存器,在任何给定时间只有其中的 16
个是可见的。
<p>R15 特别重要。在 ARM 2 和 3,其中的 24
位用做程序计数器,而余下的 8
位用于保持处理器模式、状态标志和中断模式。所以 R15
经常被称做 PC。
<pre> R15 = PC = NZCVIFpp pppppppp pppppppp ppppppMM
</pre>
位 0-1 和 26-31 被称为 PSR (处理器状态寄存器)。位 2-25
给出被取回到指令流水线中的当前指令的(以字为单位)地址 (见后)。所以永远只能从字对齐的地址执行指令。 <! center BOXED ;
l VLINE l. >
<pre>M 当前处理器模式
0 用户模式
1 快速中断处理模式(FIQ 模式)
2 中断处理模式(IRQ 模式)
3 超级用户模式(SVC 模式)
</pre>
<! center BOXED ;
l l. >
<pre>名字 意思
N 负数(Negative)标志
Z 零(Zero)标志
C 进位(Carry)标志
V 溢出(oVerflow)标志
I 中断(Interrupt)请求禁用
F 快速(Fast)中断请求禁用
</pre>
<p>R14、R14_FIQ、R14_IRQ、和 R14_SVC
由于它们在带连接的分支指令期间的行为而有时被称为‘连接’寄存器。
<p>ARM 6 和以后的处理器核心支持 32
位地址空间。这些处理可以在 26 为和 32 位 PC
模式二者下操作。 在 26 位 PC 模式下,R15
表现如同在以前的处理器上,所以代码只能运行在地址空间的最低的
64M 字节中。在 32 位 PC 模式下,R15 所有 32
位用做程序计数器。使用独立的状态寄存器来存储处理器模式和状态标志。PSR
定义如下:
<pre> NZCVxxxx xxxxxxxx xxxxxxxx IFxMMMMM
</pre>
注意在 32-bit 模式下 R15 的底端两位总是零 -
就是说你仍然只能得到字对齐的指令。忽略对这两位写非零的任何尝试。
<p>当前定义了下列模式: <! center BOXED ;
l VLINE c VLINE l. >
<pre>M 名字 意思
00000 usr_26 26 位 PC Usr 模式
00001 fiq_26 26 位 PC FIQ 模式
00010 irq_26 26 位 PC IRQ 模式
00011 svc_26 26 位 PC SVC 模式
10000 usr_32 32 位 PC Usr 模式
10001 fiq_32 32 位 PC FIQ 模式
10010 irq_32 32 位 PC IRQ 模式
10011 svc_32 32 位 PC SVC 模式
10111 abt_32 32 位 PC Abt 模式
11011 und_32 32 位 PC Und 模式
</pre>
<p>推测自上面的表,可能期望还定义了下列两个模式: <! center BOXED ;
l VLINE c VLINE l. >
<pre>M 名字 意思
00111 abt_26 26 bit PC Abt Mode
01011 und_26 26 bit PC Und Mode
</pre>
实际上未定义它们(如果你确实向模式位写了 00111 或 01011,结果的芯片状态不会是你所希望的
- 就是说不会是有适当的 R13 和 R14 被交换进来的一个 26-bit
特权模式。
<p>下表展示在每个处理器模式下可获得那些的寄存器:
<pre>
+------+---------------------------------------+
| 模式 | 可获得的寄存器 |
+------+---------------------------------------+
| USR | R0 - R14 R15 |
+------+---------+-----------------------------+
| FIQ | R0 - R7 | R8_FIQ - R14_FIQ R15 |
+------+---------+----+------------------------+
| IRQ | R0 - R12 | R13_IRQ - R14_IRQ R15 |
+------+--------------+------------------------+
| SVC | R0 - R12 | R13_SVC - R14_SVC R15 |
+------+--------------+------------------------+
| ABT | R0 - R12 | R13_ABT - R14_ABT R15 | (ARM 6 和以后)
+------+--------------+------------------------+
| UND | R0 - R12 | R13_UND - R14_UND R15 | (ARM 6 和以后)
+------+---------------------------------------+
</pre>
<p>在 ARM6
和以后的处理器上有六个状态寄存器。一个是当前处理器状态寄存器(CPSR),持有关于当前处理器状态的信息。其它五个是保存的程序状态寄存器(SPSR):
每个特权模式都有一个,持有完成在这个模式下的例外处理时处理器必须返回的关于状态的信息。
<p>分别使用 MSR 和 MRS 指令来设置和读取这些寄存器。
<p>
<hr>
<a name="Pipeline">
<h2>流水线</h2>
</a>
<p>不同于微编码的处理器,ARM (保持它的 RISC 性)是完全硬布线的。
<p>为了加速 ARM 2 和 3 的执行使用 3
阶段流水线。第一阶段持有从内存中取回的指令。第二阶段开始解码,而第三阶段实际执行它。故此,程序计数器总是超出当前执行的指令两个指令。(在为分支指令计算偏移量时必须计算在内)。
<p>因为有这个流水线,在分支时丢失 2 个指令周期(因为要重新添满流水线)。所以最好利用条件执行指令来避免浪费周期。例如:
<pre>
...
CMP R0,#0
BEQ over
MOV R1,#1
MOV R2,#2
over
...
</pre>
可以写为更有效的:
<pre>
...
CMP R0,#0
MOVNE R1,#1
MOVNE R2,#2
...
</pre>
<p>
<hr>
<a name="Timings">
<h2>时序</h2>
</a>
<p>ARM 指令在时序上是 S、N、I 和 C 周期的混合。
<p>S 周期是 ARM 在其中访问一个顺序的内存位置的周期。
<p>N 周期是 ARM 在其中访问一个非顺序的内存位置的周期。
<p>I 周期是 ARM
在其中不尝试访问一个内存位置或传送一个字到/从一个协处理器的周期。
<p>C 周期是 ARM 在其中与一个协处理器之间在数据总线(对于无缓存的
ARM)或协处理器总线(对于有缓存的 ARM)上写传送一个字的周期。
<p>各种类型的周期都必须至少与 ARM
的时钟周期一样长。内存系统可以伸展它们: 对于典型的 DRAM
系统,结果是:
<ul>
<li>N 周期变成最小长度的两倍(主要因�
没有合适的资源?快使用搜索试试~ 我知道了~
Arm资料大全.rar
共49个文件
pdf:23个
html:17个
zip:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 135 浏览量
2023-06-24
14:01:19
上传
评论
收藏 30.13MB RAR 举报
温馨提示
Arm资料大全.rar
资源推荐
资源详情
资源评论
收起资源包目录
Arm资料大全.rar (49个子文件)
Arm
armboot-1.1.0.zip 634KB
ARM指令集.chm 151KB
IXP1200 Prog Ref Manual.pdf 4.14MB
ARM_LCD_Keyb_source.zip 316KB
arm指令
32bit.html 10KB
apcsintro.html 18KB
swi.html 5KB
str.html 9KB
INDEX.HTM 3KB
psr.html 9KB
cond.html 7KB
ARMinstrs.html 35KB
qfinder.html 7KB
pseudo.html 5KB
32rules.html 2KB
shift.html 4KB
fpops.html 12KB
mul.html 2KB
cmp.html 3KB
regs.html 4KB
bl.html 3KB
mov.html 9KB
ARM MMU详细图解
MMU1.PDF 249KB
MMU.PDF 77KB
IXP1200 Datasheet.pdf 1.55MB
ARM编程技术.pdf 2.16MB
ARM_zhiling.pdf 1.73MB
ARM Architecture Reference Manual.pdf 12.73MB
2510用户手册.pdf 3.05MB
GCC汇编器的伪操作符号解释.chm 84KB
ARM-Manual
QRC_armside.pdf 163KB
ADS_GettingStarted_D.pdf 1.41MB
ADS_CompilerGuide_D.pdf 2.28MB
ADS_LinkerGuide_A.pdf 1.15MB
QRC_thumbside.pdf 158KB
DDI0100E_ARM_ARM.pdf 12.73MB
ADS_InstallLM_B.pdf 1.22MB
ADS_ApplicationsLibrary.pdf 2.46MB
ADS_AXDarmsdGuide_D.pdf 5.7MB
ADS_AssemblerGuide_B.pdf 2.29MB
ADS_CodeWarriorIDEGuide.pdf 4.36MB
ADS_DeveloperGuide_D.pdf 2.53MB
ADS_DebugTargetGuide_D.pdf 1.33MB
ARM汇编指令详解.pdf 683KB
ARM.CHM 151KB
um_s3c4510b_rev1.pdf 1.4MB
ARM MMU详细图解.rar 66KB
arm_程序内核设计.zip 128KB
arm_简明指令速查卡.zip 14KB
共 49 条
- 1
资源评论
卷积神经网络
- 粉丝: 338
- 资源: 8460
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功