⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arm 指令格式和时序.htm

📁 ARM指令集
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0055)http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html -->
<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 content="MSHTML 6.00.2600.0" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId></HEAD>
<BODY>
<H1>ARM 指令格式和时序</H1>
<P><A 
href="http://www.pinknoise.demon.co.uk/">http://www.pinknoise.demon.co.uk/</A> 
<P>Last revised: 15th November 1995</P>
<P class=TITLE><A href="mailto:mhss<jijingzhisheng@up369.com>">翻译:寒蝉退士</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="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Modes">处理器模式</A> 

  <LI><A 
  href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Registers">寄存器</A> 

  <LI><A 
  href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Pipeline">流水线</A> 

  <LI><A 
  href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Timings">时序</A> 
  <LI><A 
  href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Instructions">指令</A> 

  <UL>
    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Condition">条件代码</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Data">数据处理指令</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Branch">分支指令</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Multiplication">乘法</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Long">长乘法(ARM7DM)</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Transfer">单一数据传送</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Block">块数据传送</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Software">软件中断</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#CoproOp">协处理器数据操作</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#CoproTrans">协处理器数据传送和寄存器传送</A> 

    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Swap">单一数据交换(ARM 
    3 和以后,包括 ARM 2aS)</A> 
    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Status">状态寄存器传送(ARM 
    6 和以后)</A> 
    <LI><A 
    href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#Undefined">未定义指令</A> 
    </LI></UL>
  <LI><A 
  href="http://www.linuxforum.net/books/mhss/arm/ARMinstrs.html#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 和以后)
        +------+---------------------------------------+

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -