寻址模式

✍ dations ◷ 2025-09-14 03:55:12 #寻址模式

寻址模式(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”指令都隐含了源寄存器(累加器)。

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

相关

  • 610110 数学 120 信息科学与系统科学 130 力学 140 物理学 150 化学 160 天文学 170 地球科学 180 生物学210 农学 220 林学 230 畜牧、兽医科学 240 水产学310 
  • 魁北克人党魁北克人党(法语:Parti Québécois),简称魁人党,是加拿大魁北克省的一个左翼省级政党。该党以魁北克独立为宗旨,并支持劳工运动。1968年由瑞内·勒维克创建,2007年起宝琳·马华担
  • 胡利奥·阿根蒂诺·罗卡阿莱霍·胡利奥·阿尔亨提诺·罗卡·帕斯(西班牙语:Alejo Julio Argentino Roca Paz,1843年7月17日-1914年10月19日),阿根廷陆军将军,两任阿根廷总统(1880—1886年、1898—1904年)。
  • 欧裔美国人欧裔美洲人(英文:European American)指血统源自欧洲人但现居于美国的欧洲移民。他们主要是欧洲殖民者的后代。欧洲裔美国白人普遍是中产阶层或富有,接受教育程度高并拥有高学历,
  • 克里斯蒂安九世克里斯蒂安九世(丹麦语:Christian IX.,1818年4月8日-1906年1月29日),丹麦国王(1863年-1906年在位)。格吕斯克堡公爵腓特烈·威廉第四子。1863年,丹麦国王弗雷德里克七世无嗣而崩。克
  • 朱骏声朱骏声(1788年-1858年),字丰芑,号允倩。江苏吴县人。清代文字训诂学家。生于乾隆五十三年,四岁时能辨四声,十三岁读《说文解字》,无书不读,又长于诗赋词章。钱大昕感叹道:“衣钵之传,将
  • 成友谦成友谦(?-17世纪),字六吉,扬州府通州人,明朝、南明政治人物。成友谦是海盐县丞成斐然的儿子,在天启七年(1627年)中举人,崇祯七年(1634年)成进士,担任阆中知县,抚定遭流寇惊吓的民众,之后转任
  • 郭春美郭春美(1964年-),高雄人,台湾歌仔戏演员。十三岁起正式加入自家的歌仔戏团。十七岁起挑大梁,成为自家戏班台柱小生。后来受邀至中视演出歌仔戏,曾用艺名郭凤翎。目前为高雄市凤山区“春美歌仔戏剧团”团长,维持丰沛的表演活动,并致力推动歌仔戏创新。并曾荣获薪传奖,高雄文艺奖。郭春美出生于高雄的歌仔戏世家,一家三代都是戏班成员。父亲郭朝明与母亲林锦子在二十多年前共同创立“艺人少女歌剧团”,亦是团里当家演员。郭春美自孩童起便粉墨登场,十六岁就在自家戏班扮小生,后来被延揽至中视主演电视歌仔戏《大汉中兴》、《义薄云天
  • 詹姆斯·丹尼尔利詹姆斯·F·丹尼尔利(英语:James Frederic Danielli,1911年11月13日-1984年4月22日)是一位英国细胞生物学家,1957年当选皇家学会会士,是研究细胞膜的先驱,与休·达夫森共同提出了达夫森-丹尼尔利模型,该模型之后被更好的流动镶嵌模型所替代。
  • 高桥蓝高桥蓝 (日语:髙橋 藍 /たかはし らん,英语:Ran Takahashi,2001年9月2日-),日本男子排球运动员,目前为日本国家男子排球队队员之一。出生于日本京都府,身高1.88米,有四分之一美国血统(妈妈为美日混血)。他曾在2020年代表东山高校参加全日本排球高等学校选手权大会,带领球队获得冠军并当选该赛事的MVP。目前就读于日本体育大学,并在2020年入选日本国家队,成为队中年纪最小的队员。2021年12月20日加盟意大利排球联赛球队Pallavolo Padova(英语:Pallavolo