寻址模式

✍ dations ◷ 2025-08-23 00:45:59 #寻址模式

寻址模式(Addressing modes)是中央处理器(CPU)设计中,指令集架构的一部分。各个指令有不同的寻址模式,这些寻址模式决定此架构下的机器语言指令对应的运算数。寻址模式会通过暂存器中的数值或机器指令中的常数来计算运算数的记忆体地址。

在计算机程序设计中,寻址模式主要是汇编语言用户和编译器编写者需要关注的。对于一个相关的概念,请参阅正交指令集,它涉及到任何指令使用任何寻址模式的能力。

注意,各种寻址模式都没有一个被普遍接受的的名称。不同的作者和计算机制造商可以为相同的寻址模式赋予不同的名称,或者为不同的寻址模式赋予相同的名称。

术语“寻址模式”本身也有不同的解释:可以解释为“存储器地址计算方式”,也可以解释为“操作数访问方式”。 在第一种解释下,不从存储器读取或写入存储器的指令(例如“将立即数放入寄存器”)被认为没有“寻址模式”。 第二种解释允许诸如VAX的机器使用立即数模式位来允许寄存器或立即数。 只有第一种解释适用于诸如“加载有效地址”之类的指令。

下面列出的寻址模式分为代码寻址和数据寻址。 大多数计算机体系结构都保持这种区别,但是存在一些允许在(几乎)任何上下文中使用任何寻址模式使用的体系结构。

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

不同的计算机体系结构在硬件中提供的寻址模式数量上有很大差异。 消除复杂寻址模式并仅使用一个或几个更简单的寻址模式有一些好处,即使它需要一些额外的指令,也许还需要一个额外的寄存器。 如果只有一些简单的寻址模式,那么设计管流水线CPU将变得更为简单。

大多数RISC架构只有大约五种简单的寻址模式,而DECCAX等CISC架构有十几种寻址模式,其中一些非常复杂。 IBM System/360架构只有三种寻址模式,System/390又添加了一些。

当只有少数寻址模式时,所需的特定寻址模式通常在指令代码中编码(例如IBM System/360和后继者,还有大多数RISC)。 但是当存在许多寻址模式时,通常在指令中留出特定字段来指定寻址模式。 DEC VAX允许几乎所有指令有多个存储器操作数,因此保留每个操作数说明符的前几位以指示该特定操作数的寻址模式。 保持寻址模式指定符位与操作码操作位分离产生正交指令集 。

即使在具有许多寻址模式的计算机上,实际程序的测量表明下面列出的简单寻址模式占所有寻址模式的约90%或更多。 由于大多数此类测量基于编译器从高级语言生成的代码,因此这在某种程度上反映了所使用的编译器的局限性。  

   +----+------------------------------+   |jump|           address            |   +----+------------------------------+   (有效PC位址 = address)

绝对寻址指令的有效地址是地址参数本身,无需修改。

   +----+------------------------------+   |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   +------+-----+-----+----------------+   (有效地址 = 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”指令都隐含了源寄存器(累加器)。

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

相关

  • 童庆禧童庆禧(1935年10月21日-),中国遥感学家。出生于湖北武汉。1961年毕业于苏联敖德萨水文气象学院。1997年当选为中国科学院院士。中国科学院遥感应用研究所研究员。
  • 跨国企业跨国公司、多国公司(英语:Multinational Corporation,MNC),经常被称为跨国企业(英语:Multinational Enterprise,MNE),是在世界多国有营运,且规模庞大的股份有限公司。它们在不同的国家
  • 普利昂朊毒体(英语:prion,发音为/ˈpriː.ɒn/;又译为普利昂、蛋白质侵染因子、毒朊、感染性蛋白质、普恩蛋白等)是一种具感染性的致病因子,能引发人类及哺乳动物的传染性海绵状脑病。朊
  • 太阳城 (著作)《太阳城》(意大利语:La città del Sole; 拉丁语:Civitas Solis)是意大利道明会修士、哲学家托马索·康帕内拉的一部哲学著作,在早期乌托邦思想中有重要地位。该著作最初于1602
  • 洁西卡·阿什利洁西卡·阿什利(英语:Jessica Ashley,1989年12月8日-)是一位美国女模特儿。为密歇根大学的2011年毕业生,以及2014年6月《花花公子》的玩伴女郎,摄影师为萨莎·艾森曼。她曾参演凯文
  • 唐一菲唐一菲(1981年5月27日-),原名唐璐,籍贯武汉,成长于武汉。中国女演员,毕业于中央戏剧学院表演系。2011年证实,她男朋友是演员凌潇肃,二人开始交往于凌潇肃和前妻姚晨婚姻存续期间。201
  • 高振家高振家(1929年-2014年7月28日),辽宁盖县人,中国人民解放军海军高级将领、海军中将军衔。1946年参军,1948年加入中国共产党。革命生涯中,他历任班长、副排长、副政治指导员、枪炮业务长、艇队副政委、副艇长、艇长、副支队长、支队长、海军副司令员、海军潜艇学校副校长、海军潜艇学院院长、海军指挥学院政委、广州军区副司令员兼海军南海舰队司令员等职,参加了莹河马家屯、辽东松树、辽沈等战役战斗。高振家是中国共产党第十三次全国代表大会代表,中国人民政治协商会议第八、第九届全国委员会常务委员会委员。1988年
  • 巴姑摩尔巴姑摩尔(排湾语:Pakumur),是台湾排湾族传说中的一个水潭,其中住有许多水生的怪物和神祇,后来因为干涸而消失。巴姑摩尔的水潭很深,其中住着凶猛的鱼虾或水怪,只要发现有人来到水潭捕捉它们,就会群起攻击,到后来人们都不敢去那里,将其视为禁地,而除了鱼虾之外,也有许多跟水有关的神祇,例如杜姑杜姑(Tjukutjuku)、慕拿妮幽妮幽(Munaniuniu)、沙乌拉鲁拉鲁依(Sauljaljuljaljui)等也住在那里。后来发生一次干旱,巴姑摩尔就这样干涸了,而生活其中的生物变成了成群的蝴蝶,每天早晨或傍
  • 谈杨谈杨(1989年1月9日-),出生于武汉,中国足球运动员,司职前锋。2001年8月,谈杨进入了武汉市足球学校。过了一年多后,谈杨在广东清远冬训时试训了几支球队,最终加盟浙江绿城梯队。2007年谈杨在U-19足协杯赛中5场比赛打进6球。接着,他入选中国国青队,并凭借极高的进球率坐稳了国青主力前锋的位置,之后又曾入选了中国国奥队。2007年2月,他前往法甲球队索肖短期试训。2008年,谈杨进入浙江绿城一线队。4月5日,他在浙江绿城主场0比2不敌青岛中能的比赛第68分钟替补程鹏出场,上演职业生涯的首秀。 11月
  • 托德西利亚斯条约《托德西利亚斯条约》(西班牙语:,葡萄牙语:)是地理大发现时代早期,两大航海强国西班牙帝国和葡萄牙帝国在教宗亚历山大六世的调解下,于1494年6月7日在西班牙卡斯蒂利亚的小镇托德西利亚斯签订的一份旨在瓜分新世界的协议。条约规定两国将共同垄断欧洲之外的世界,并将1493年5月划分的教皇子午线向西移动270里格,新版的教皇子午线为穿越当时已属葡萄牙的西非佛得角群岛与哥伦布最早为西班牙发现的美洲土地古巴岛和伊斯帕尼奥拉岛连线中点的经线。这条经线位于佛得角以西370里格,即西经46°37'附近。教皇子午线以西归西