한국   대만   중국   일본 
?址模式 - ?基百科,自由的百科全? 跳?到?容

?址模式

本页使用了标题或全文手工转换
?基百科,自由的百科全?
(重定向自 定址模式

?址模式 (Addressing modes)是 中央?理器 (CPU)??中, 指令集架? 的一部分。各?指令有不同的?址模式,?些?址模式?定此架?下的 机器?言 指令??的 運算數 。?址模式?通? ?存器 中的??或机器指令中的 常? ??算?算?的 ???位址

在?算机程序??中,?址模式主要是 ???言 使用者和 ??器 ??者需要關注的。?于一?相?的?念,??? 正交指令集 ,?涉及到任何指令使用任何?址模式的能力。

警告 [ ?? ]

注意,各??址模式都?有一?被普遍接受的的名?。不同的作者和?算机制造商可以?相同的?址模式?予不同的名?,或者?不同的?址模式?予相同的名?。

??“?址模式”本身也有不同的解?:可以解??“存?器地址?算方式”,也可以解??“操作???方式”。 在第一?解?下,不?存?器?取或?入存?器的指令(例如“?立??放入寄存器”)被???有“?址模式”。 第二?解?允??如VAX的机器使用立??模式位?允?寄存器或立??。 只有第一?解?适用于?如“加?有效地址”之?的指令。

下面列出的?址模式分?代??址和?据?址。 大多??算机?系??都保持????,但是存在一些允?在(?乎)任何上下文中使用任何?址模式使用的?系??。

下面的?明?粹具有代表性,以?明?址模式,?不一定反映任何特定?算机使用的助?符。

?址模式的?量 [ ?? ]

不同的?算机?系??在硬件中提供的?址模式?量上有?大差?。 消除???址模式??使用一?或??更??的?址模式有一些好?,?使?需要一些?外的指令,也??需要一??外的寄存器。 如果只有一些??的?址模式,那???管 流水? CPU??得更???。

大多?RISC架?只有大?五???的?址模式,而DECCAX等CISC架?有十???址模式,其中一些非常??。 IBM System/360架?只有三??址模式,System/390又添加了一些。

?只有少??址模式?,所需的特定?址模式通常在指令代?中??(例如IBM System/360和后?者,?有大多?RISC)。 但是?存在?多?址模式?,通常在指令中留出特定字段?指定?址模式。 DEC VAX允??乎所有指令有多?存?器操作?,因此保留每?操作??明符的前?位以指示?特定操作?的?址模式。 保持?址模式指定符位?操作?操作位分??生正交指令集 。

?使在具有?多?址模式的?算机上,??程序的?量表明下面列出的???址模式占所有?址模式的?90%或更多。 由于大多?此??量基于??器?高??言生成的代?,因此?在某?程度上反映了所使用的??器的局限性。  

?代?的?址模式 [ ?? ]

???址/直接?址 [ ?? ]

   +----+------------------------------+
   |jump|           address            |
   +----+------------------------------+

   (有效PC位址 = address)

???址指令的有效地址是地址??本身,无需修改。

PC相??址 [ ?? ]

   +----+------------------------------+
   |jump|           offset             |    相?跳?指令
   +----+------------------------------+

   (有效PC位址 = 下一條指令的位址 + offset,offset 可?負數) 

PC??址的有效地址是下一?指令地址加上偏移??。 通常??偏移是有符??,以允?跳?到指令之前和之后的代?。

???址方式的跳?指令特?有用,因?常?的跳?指令的目?是是附近的指令(在高??言中,大多? if while ?句相?短)。 ??程序的?量表明,?于大?90%的?件跳?(大?±128或±512字?),8或10位偏移就足?了。

PC相??址的?一??点是代?可以是位置无?的 ,??可以加?到存?器中的任何地方而无需?整任何地址。

???址模式的某些版本可以是有?件的,?些?件例如??寄存器之?的?系:“如果reg1 = reg2跳?”、一?寄存器自身:“跳?除非reg1 = 0”或者?含地??寄存器中某些位。

寄存器?接?址 [ ?? ]

   +-------+-----+
   |jumpVia| reg |
   +-------+-----+

   (有效PC位址 = 'reg'中的?)

??据的?址模式 [ ?? ]

寄存器(直接)?址 [ ?? ]

   +------+-----+-----+-----+
   | mul  | reg1| reg2| reg3|      reg1 := reg2 * reg3;
   +------+-----+-----+-----+

??“?址模式”?有有效地址,在某些?算机上不被??是?址模式。

在此示例中,所有操作?都在寄存器中,?果放在寄存器中。

基址加偏移量?址,及其?? [ ?? ]

有?被??“偏移?址”

   +------+-----+-----+----------------+
   | load | reg | base|     offset     |  reg := RAM[base + offset]
   +------+-----+-----+----------------+

   (有效地址 = offset + base 寄存器的?容) 

立??/字面量?址 [ ?? ]

   +------+-----+-----+----------------+
   | add  | reg1| reg2|    constant    |    reg1 := reg2 + constant;
   +------+-----+-----+----------------+

??“?址模式”?有有效地址,?且在某些?算机上不被??是?址模式。

常量可以是有符?或无符?的。 例如, move.l #$FEEDABBA, D0 ?十六?制?“FEEDABBA”?移?到寄存器D0中。

操作?的?保存在指令本身中,而不是使用?存中的操作?。

?含?址 [ ?? ]

?含?址模式(在X86???言中也???式?址模式)未明?指定源和/或目?的有效地址。

操作??含源(如果有)或目的地有效地址(或有??者)。

?含的?址在??的?算机上?常?(直到20世?70年代中期)。 ??的?算机通常只有一?寄存器,可以在其中?行算?-累加器。 ??累加器机器?乎在每?指令中都?含地引用了累加器。 例如,操作

a:= b + c;

可以使用序列

load b; add c; store a;

“load”和“add”指令都?含目的寄存器(累加器); 每?“store”指令都?含了源寄存器(累加器)。

后?的?算机通常具有多?通用寄存器,??可以是算?的源寄存器和/或目的寄存器,因此后?的?算机需要一些其他?址模式?指定算?的源寄存器和目的寄存器。

參考資料 [ ?? ]