MIPS 指令系统和汇编语言

合集下载

mips汇编语言指令

mips汇编语言指令

mips汇编语言指令MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集(RISC)架构的计算机处理器。

它的指令集被广泛应用于各种领域,包括嵌入式系统、操作系统和编译器等。

本文将介绍一些常见的MIPS汇编语言指令。

1. 加载和存储指令MIPS提供了一系列用于数据传输的指令。

其中,lw(load word)指令用于从内存中加载一个字(32位数据)到寄存器中,sw(store word)指令用于将一个字存储到内存中。

例如,lw $t0, 0($s0)表示将从地址$s0偏移量为0的内存位置加载一个字到$t0寄存器中。

2. 算术和逻辑指令MIPS提供了一系列用于算术和逻辑运算的指令。

例如,add指令用于将两个寄存器中的值相加,并将结果存储到目标寄存器中。

而and 指令用于对两个寄存器中的值进行按位与操作,并将结果存储到目标寄存器中。

例如,add $t0, $s0, $s1表示将$s0和$s1中的值相加,并将结果存储到$t0寄存器中。

3. 分支和跳转指令MIPS提供了一系列用于控制程序流程的指令。

其中,beq(branch if equal)指令用于在两个寄存器中的值相等时跳转到目标地址。

而j (jump)指令用于无条件跳转到目标地址。

例如,beq $t0, $t1, label表示如果$t0和$t1中的值相等,则跳转到标签为label的位置。

4. 移位指令MIPS提供了一系列用于移位操作的指令。

其中,sll(shift left logical)指令用于将一个寄存器中的值左移指定的位数,并将结果存储到目标寄存器中。

例如,sll $t0, $s0, 2表示将$s0中的值左移2位,并将结果存储到$t0寄存器中。

5. 系统调用指令MIPS提供了一系列用于进行系统调用的指令。

其中,syscall指令用于触发系统调用,并根据不同的系统调用号执行相应的操作。

汇编语言的分类

汇编语言的分类

汇编语言的分类汇编语言是计算机编程中一种低级语言,用于将源代码转化为机器码以供计算机执行。

在计算机科学中,汇编语言可以根据不同的特性进行分类。

本文将介绍汇编语言的分类,并对每种分类进行详细说明。

一、按照使用的处理器进行分类根据所使用的处理器类型,汇编语言可以分为多类。

最常见的分类方式是根据处理器架构进行划分,主要包括x86汇编语言、ARM汇编语言和MIPS汇编语言等。

1. x86汇编语言:x86汇编语言是最广泛应用的汇编语言之一,主要用于x86架构的处理器,如英特尔的处理器和AMD的处理器。

x86汇编语言具有较高的执行效率和灵活性,广泛用于操作系统、驱动程序和嵌入式系统开发等领域。

2. ARM汇编语言:ARM汇编语言主要用于ARM架构的处理器,如移动设备和嵌入式系统中常见的ARM处理器。

ARM汇编语言具有较低的功耗和较高的性能,在移动应用、物联网和智能终端等领域得到广泛应用。

3. MIPS汇编语言:MIPS汇编语言用于MIPS架构的处理器,主要应用于嵌入式系统和网络设备等领域。

MIPS汇编语言具有简洁的指令集和高性能的特点,适用于资源有限的嵌入式系统。

二、按照指令系统进行分类根据指令系统的不同,汇编语言可以分为复杂指令集(CISC)和精简指令集(RISC)两类。

1. 复杂指令集(CISC):复杂指令集汇编语言具有丰富的指令集合和复杂的指令格式,可以实现多种功能。

CISC汇编语言中的每个指令可以执行复杂的操作,但由于指令集繁多,编程复杂度较高,难以提高执行效率。

2. 精简指令集(RISC):精简指令集汇编语言以简单、统一的指令格式为特点,指令集较为精简。

RISC汇编语言的每个指令只执行一项基本操作,简化了处理器的设计和编程的复杂性,并能够提高执行效率。

三、按照应用领域进行分类汇编语言还可以根据应用领域进行分类,不同应用领域对汇编语言具有不同的要求。

1. 系统级汇编语言:系统级汇编语言主要用于操作系统和底层系统软件开发,例如操作系统的内核、驱动程序等。

指令系统

指令系统
g = g + 4; lw $t0, 0($s3) add $s1,$s1,$t0 # $t0=4 # g=g+4 (in MIPS)
注释
(in C) $s3=Address(4)
立即数相加指令
addi $s3,$s3,4
指令 实例
add $s1,$s2,$s3
sub $s1,$s2,$s3
原始C代码: Loop:g = g + A[i]; i = i + j; if (i != h) goto Loop;
-19-
do-while语句举例
3 { 0x00401334 push %ebp 0x00401335 mov %esp,%ebp 0x00401337 and $0xfffffff0,%esp 0x0040133A sub $0x10,%esp 0x0040133D call 0x401910 <__main> 4 int i=0; 0x00401342 movl $0x0,0xc(%esp) 5 do 6 { 7 i++; 0x0040134A incl 0xc(%esp) 8 }while(i>0); 0x0040134E cmpl $0x0,0xc(%esp) 0x00401353 jg 0x40134a <main+22> 9 } 0x00401355 leave 0x00401356 ret #include <stdio.h> int main ( ) { int i=0; do { i++; }while(i>0); }
Can reference low-order 4 bytes (also low-order 1 & 2 bytes)

MIPS 指令系统和汇编语言

MIPS 指令系统和汇编语言

其中 A1 为目的操作数地址,A2 为源操作数地址。 指令的含义:(A1)OP(A2)→A1。 (3)一地址指令 一地址指令顾名思义只有一个显地址,它的指令格式为: OP A1
一地址指令只有一个地址, 那么另一个操作数来自何方呢?指令中虽未明显给出,但按事 先约定,这个隐含的操作数就放在一个专门的寄存器中。因为这个寄存器在连续性运算时,保 存着多条指令连续操作的累计结果,故称为累加寄存器(AC) 。 指令的含义:(AC)OP(A1)→AC (4)零地址指令 零地址指令格式中只有操作码字段,没有地址码字段,其格式为: OP 零地址的运算类指令仅用在堆栈计算机中的。 堆栈计算机没有一般计算机中必备的通用寄 存器,因此堆栈就成为提供操作数和保存运算结果的唯一场所。通常,参加运算的两个操作数 隐含地从堆栈顶部(栈顶和次栈顶单元)弹出,送到运算器中进行运算,运算的结果再隐含地 压入堆栈中。对于同一个问题,用三地址指令编写的程序最短,但指令长度(程序存储量)最 长;而用二、一、零地址指令来编写程序,程序的长度一个比一个长,但指令的长度一个比一 个短。
作码结构等,是一个很复杂的问题,它与计算机系统结构、数据表示方法、指令功能设计等都 密切相关。
指令的基本格式
一条指令就是机器语言的一个语句, 它是一组有意义的二进制代码, 指令的基本格式如下: 操作码字段 地址码字段
其中操作码指明了指令的操作性质及功能,地址码则给出了操作数的地址。 指令的长度是指一条指令中所包含的二进制代码的位数, 指令长度与机器字长没有固定的 关系,它可以等于机器字长,也可以大于或小于机器字长。通常,把指令长度等于机器字长的 指令称为单字长指令; 指令长度等于半个机器字长的指令称为半字长指令;指令长度等于两个 机器字长的指令称为双字长指令。 在一个指令系统中,若所有指令的长度都是相等的,称为定长指令字结构。定长结构指令 系统控制简单,但不够灵活。若各种指令的长度随指令功能而异,就称为变长指令字结构。现 代计算机广泛采用变长指令字结构,变长结构指令系统灵活,但指令的控制较复杂。 计算机执行一条指令所需要的全部信息都必须包含在指令中。 对于一般的双操作数运算类 指令来说,除去操作码之外,地址码字段中应包含以下信息: 第一操作数地址。 第二操作数地址。 操作结果存放地址。 这些信息可以在指令中明显的给出,称为显地址;也可以依照某种事先的约定,用隐含的 方式给出,称为隐地址。所以,从地址结构的角度可以分为三地址指令、二地址指令、一地址 指令和零地址指令。 (1)三地址指令 三地址指令格式为: OP A1 A2 A3

汇编语言的种类

汇编语言的种类

汇编语言的种类汇编语言是计算机领域中的一门编程语言,它与机器语言密切相关,用于书写可以被计算机直接执行的程序代码。

汇编语言直接操作计算机底层硬件,因此在性能和效果上具有很大优势。

在汇编语言中,不同的体系结构和处理器都有不同的指令集和语法规则,这导致了汇编语言的种类繁多。

本文将介绍几种常见的汇编语言。

1. x86汇编语言x86汇编语言是最为广泛应用的汇编语言之一,在PC和服务器领域得到广泛使用。

x86指令集是英特尔和AMD等处理器厂商所采用的指令集架构,在x86汇编语言中,可以直接操作寄存器、内存以及其他外设,具有很高的灵活性和可操作性。

x86汇编语言使用Intel语法和AT&T语法两种不同的语法规则,常用的编译器有MASM、NASM和GAS。

2. ARM汇编语言ARM汇编语言广泛应用于移动设备、嵌入式系统和物联网等领域。

ARM处理器以其低功耗、高性能和内容丰富的架构而闻名,ARM汇编语言可以直接操作处理器寄存器、存储器和外设,具有很好的可移植性和可扩展性。

ARM汇编语言使用ARM体系结构定义的指令集和语法规则,常用的编译器有ARM汇编器和GNU汇编器等。

3. MIPS汇编语言MIPS汇编语言被广泛应用在嵌入式系统、数字信号处理以及网络设备等领域。

MIPS处理器以其简洁的指令集和高效的架构而著称,MIPS汇编语言可以直接控制寄存器、存储器以及其他外设,具有很高的执行效率和指令流水线能力。

MIPS汇编语言使用MIPS体系结构定义的指令集和语法规则,常用的编译器有MIPS汇编器。

4. PowerPC汇编语言PowerPC汇编语言主要应用于IBM PowerPC架构的服务器、工作站以及游戏机等领域。

PowerPC处理器以其高性能和可扩展性而著称,PowerPC汇编语言可以直接操作处理器寄存器、存储器和外设,具有很好的可移植性和性能表现。

PowerPC汇编语言使用PowerPC指令集和语法规则,常见的编译器有PowerPC汇编器。

汇编语言的类型

汇编语言的类型

汇编语言的类型汇编语言是一种低级语言,它是由机器指令和汇编指令组成的。

汇编语言是一种直接操作计算机硬件的语言,它可以直接控制计算机的各种硬件资源,如CPU、内存、I/O等。

汇编语言的类型主要有以下几种:1. x86汇编语言x86汇编语言是一种基于Intel x86架构的汇编语言,它是目前最为流行的汇编语言之一。

x86汇编语言可以直接操作CPU的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。

x86汇编语言的语法比较复杂,需要掌握大量的指令和寄存器,但是它可以实现非常高效的程序设计和优化。

2. ARM汇编语言ARM汇编语言是一种基于ARM架构的汇编语言,它是嵌入式系统和移动设备上最为流行的汇编语言之一。

ARM汇编语言可以直接操作CPU的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。

ARM汇编语言的语法比较简单,但是需要掌握大量的指令和寄存器。

3. MIPS汇编语言MIPS汇编语言是一种基于MIPS架构的汇编语言,它是嵌入式系统和网络设备上常用的汇编语言之一。

MIPS汇编语言可以直接操作CPU的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。

MIPS汇编语言的语法比较简单,但是需要掌握大量的指令和寄存器。

4. AVR汇编语言AVR汇编语言是一种基于AVR架构的汇编语言,它是嵌入式系统和单片机上常用的汇编语言之一。

AVR汇编语言可以直接操作CPU 的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。

AVR汇编语言的语法比较简单,但是需要掌握大量的指令和寄存器。

5. PowerPC汇编语言PowerPC汇编语言是一种基于PowerPC架构的汇编语言,它是IBM和苹果电脑上常用的汇编语言之一。

PowerPC汇编语言可以直接操作CPU的寄存器、内存和I/O端口等硬件资源,它可以实现高效的程序设计和优化。

PowerPC汇编语言的语法比较复杂,需要掌握大量的指令和寄存器,但是它可以实现非常高效的程序设计和优化。

MIPS指令系统和汇编语言

MIPS指令系统和汇编语言

MIPS指令系统和汇编语言MIPS(Microprocessor without Interlocked Pipeline Stages)指令系统,是一种以RISC(Reduced Instruction Set Computer,精简指令集计算机)为基础的处理器架构。

作为一种广泛应用于嵌入式系统和计算机组成的指令集架构,MIPS指令系统以其简洁高效的特性而受到广泛关注和应用。

一、MIPS指令系统概述MIPS指令系统的设计目标之一是提高处理器的性能,并降低设计的复杂性。

它采用了统一的指令格式,包括操作码、源操作数以及目的操作数等字段,使得指令的译码和执行过程更加高效。

此外,MIPS的指令集还支持延迟槽、流水线和分支延迟等特性,以进一步提升指令执行的效率。

二、MIPS指令格式MIPS指令格式遵循统一的规则,包括三种基本类型的指令格式:R 型、I型和J型指令。

R型指令主要用于寄存器之间的操作,包括算术运算、逻辑运算等;I型指令用于立即数和寄存器之间的操作,涵盖了数据传输、分支跳转等功能;J型指令主要用于无条件跳转。

三、MIPS指令编码和寻址方式MIPS指令采用固定长度的指令编码格式,使得指令的解析和处理更加高效。

在寻址方面,MIPS支持多种寻址方式,包括立即寻址、寄存器寻址和间接寻址等。

这些灵活的寻址方式使得MIPS指令更加适用于不同的计算需求。

四、MIPS汇编语言MIPS汇编语言是一种用于编写MIPS指令的低级语言。

它是一种基于文本的表示形式,使用助记符来表示不同的指令和操作。

MIPS汇编语言具有简单易学的特性,更加接近底层硬件的工作原理,使得程序员可以更加精准地控制和优化程序的执行过程。

五、MIPS指令系统的应用由于MIPS指令系统的优越性能和灵活性,它被广泛应用于各种领域。

在嵌入式系统中,MIPS处理器可以实现高性能和低功耗的设计,广泛应用于智能手机、路由器、电视机等设备中。

在计算机组成和操作系统领域,MIPS指令系统被用于讲解和研究计算机的工作原理和底层机制。

02-1MIPS指令与汇编

02-1MIPS指令与汇编

一、 MIPS简介
基于龙芯2E处理器的千元的PC、1999元的笔记本电脑、 意法半导体3000万元购买龙芯2E 5年的生产和销售权, 国产操作系统内核在龙芯2E上测试成功。 龙芯2E微处理器是一款实现64位MIPSⅢ指令集的通用 RISC处理器,与X86指令架构互不兼容;芯片面积 6.8mm×5.2mm;最高工作频率为1GHz;实测功耗5-7瓦。 龙芯2E在1GHz主频下SPEC CPU2000的实测分值达到 500分,综合性能达到了高端Pentium Ⅲ以及中低端 Pentium 4处理器的水平。 龙芯2F
一、 MIPS简介
由于与X86指令的不 兼容,龙芯2E无法运 行现有的Windows 32/64位操作系统, 和基于Windows的 众多应用软件。
龙芯2E笔记本电脑运行 OpenOffice打开Word文档
二、MIPS体系结构
指令集体系结构类型:寄存器——寄存器型
(1)寄存器的特点 (2)整数乘法单元和寄存器 (3)寻址方式 (4)存储器和寄存器中的数据类型 (5)流水线冒险
如果没有全局指针,存取一个静态数据区域 的值需要两条指令:
一条是获取有编译器和loader决定好的32位的地 址常量。 另外一条是对数据的真正存取。
为了使用$ gp, 编译器在编译时刻必须知道 一个数据是否在$ gp的64K范围之内。 并不是所有的编译和运行系统支持gp的使用。
MIPS 通用寄存器的使用
二、 MIPS体系结构——(1)寄存器
MIPS 包含32个通用寄存器 硬件没有强制性的指定寄存器 使用规则,但是在实际使用 中,这些寄存器的用法都遵循 一系列约定 寄存器约定用法引入了一系列 的寄存器约定名。在使用寄存 器的时候,要尽量用这些约定 名或助记符,而不直接引用寄 存器编号
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章MIPS指令系统和汇编语言1.考研预测:出题特点总结本章是对统考408内容来说,本章是新增的章节。

此外北航961大纲中制定了要考MIPS 指令集,从15年961真题来看MIPS是重中之重。

但是今年计组并没有指定具体的教材,但大纲明确要求掌握MIPS指令集,所以还是建议考生将《计算机组成与设计:硬件/软件接口》中文版(原版第三版或第四版)作为本章的参考书籍。

本章大致内容是MIPS的基础知识,难度并不大。

考生应该将重点放在MIPS指令集的基础上,考察C语言中的语句转换为对应的MIPS指令,所以需要熟练掌握C语言中一些语句对应的MIPS指令实现。

本章出题很大可能就是C语言和MIPS汇编语言之间的转换,也可能涉及到第五章CPU指令流水线等内容。

2.考研知识点系统整理:梳理考点,各个击破3.1 指令系统概述机器指令要素操作码:指明进行的何种操作源操作数地址:参加操作的操作数的地址,可能有多个。

目的操作数地址:保存操作结果的地址。

下条指令的地址:指明下一条要运行的指令的位置,一般指令是按顺序依次执行的,所以绝大多数指令中并不显式的指明下一条指令的地址,也就是说,指令格式中并不包含这部分信息。

只有少数指令需要显示指明下一条指令的地址。

指令执行周期3.2 指令格式一台计算机指令格式的选择和确定要涉及多方面的因素,如指令长度、地址码结构以及操作码结构等,是一个很复杂的问题,它与计算机系统结构、数据表示方法、指令功能设计等都密切相关。

指令的基本格式一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如下:(其中A1为第一操作数地址,A2为第二操作数地址,A3为操作结果存放地址。

这条指令的含义:(A1)OP(A2)→A3式中OP表示双操作数运算指令的运算符号,如“+”或“–”等。

(2)二地址指令如果让第一操作数地址同时兼作存放结果的地址(目的地址),这样即得到了二地址指令,其格式为:其中A1为目的操作数地址,A2为源操作数地址。

指令的含义:(A1)OP(A2)→A1。

(保(存器,个短。

这是一种最简单的编码方法,为了能表示整个指令系统中的全部指令,指令的操作码字段应当具有足够的位数。

假定指令系统共有m条指令,指令中操作码字段的位数为N位,则有如下关系式:m≤2N,所以N≥log2m定长操作码对于简化硬件设计,减少指令译码的时间是非常有利的,在字长较长的大、中型计算机及超级小型计算机上广泛采用。

例如,IBM 370机中不论指令的长度为多少位,其操作码字段一律都是8位。

8位操作码允许容纳256条指令,而实际上在IBM 370机中仅有183条指令,存在着极大的信息冗余,这种信息冗余的编码也称为非法操作码。

扩展操作码指令格式如果某个计算机全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上,就称为变长操作码指令。

这种方式能够有效地压缩指令中操作码字段的平均长度,在字长较短的小、微型计算机上广泛采用。

显然,操作码字段的位数和位置不固定将增加指令译码和分析的难度,使控制器的设计复杂化。

最常见的变长操作码指令采用扩展操作码法。

因为如果指令长度一定,则地址码与操作码字段的长度是相互制约的。

为了解决这一矛盾,让操作数地址个数多的指令(三地址指令)的操作码字段短些,操作数地址个数少的指令(一或零地址指令)的操作码字段长些,这样既能充分地利用指令的各个字段,又能在不增加指令长度的情况下扩展操作码的位数,使它能表示更多的指令。

3.3 指令的寻址方式所谓寻址,指的是寻找操作数的地址或下一条将要执行的指令地址。

讨论寻址方式首先要搞清楚编址的概念。

通常,指令中的地址码字段将指出操作数的来源和去向,而操作数则存放在相应的存储设备中。

在计算机中需要编址的设备主要有CPU中的通用寄存器、主存储器和输入输出设备等3种。

要对寄存器、主存储器和输入输出设备等进行访问,首先必须对它们进行编址。

就像一个大楼有许多房间,首先必须给每一个房间编上一个唯一的号码,人们才能据此找到需要的房间一样。

指令格式中每个地址码的位数是与主存容量和最小寻址单位(即编址单位)有关联的。

主存容量越大,所需的地址码位数就越长。

对于相同容量来说,如果以字节为最小寻址单位,地址码的位数就需要长些,但是可以方便地对每一个字符进行处理;如果以字为最小寻址单位(假定字长为16位或更长),地址码的位数可以减少,但对字符操作比较困难。

例如:某机主存容量为220个字节,机器字长32位,若最小寻址单位为字节(按字节编址),其地址码应为20位;若最小寻址单位为字(按字编址),其地址码只需18位。

有效地址的概念寻址方式是根据指令中给出的地址码字段寻找有效地址的方式。

我们把指令中地址码字段给出的地址称为形式地址(用字母A表示),这个地址有可能不能直接用来访问主存。

例如,IBM PC/XT机的主存容量可达1MB,而指令中的地址码字段最长仅16位,仅能直接访问主存的一小部分,而无法访问到整个主存空间。

就是在字长很长的大型机中,即使指令中能够拿出足够的位数来作为访问整个主存空间的地址,为了灵活方便地编制程序,也需要对地址进行必要的变换。

有效地址是指能够直接访问主存的地址(用字母EA表示),形式地址经过某种寻址方式的转换才能变为有效地址。

数据寻址和指令寻址寻址可以分为指令寻址和数据寻址。

寻找下一条将要执行的指令地址称为指令寻址,寻找操作数的地址称为数据寻址。

指令寻址比较简单,它又可以细分为顺序寻址和跳跃寻址。

而数据寻址方式种类较多,其最终目的都是寻找所需要的操作数。

顺序寻址可通过程序计数器加1,自动形成下一条指令的地址;跳跃寻址则需要通过程序转移类指令实现。

跳跃寻址的转移地址形成方式有3种:直接(绝对)、相对和间接寻址,它与数据寻址方式中的直接、相对和间接寻址是相同的,只不过寻找到的不是操作数的有效地址而是转移的有效地址而已。

常见寻址方式每台计算机的指令系统都有自己的一套寻址方式,不同计算机的寻址方式的名称和含义并不统一,下面介绍大多数计算机常用的几种基本寻址方式。

(1)立即寻址立即寻址是一种特殊的寻址方式,指令中在操作码字段后面的部分不是通常意义上的操作数地址,而是操作数本身,也就是说数据就包含在指令中,只要取出指令,也就取出了可以立即使用的操作数,这样的数称为立即数,其指令格式为:这种方式的特点是:在取指令时,操作码和操作数被同时取出,不必再次访问主存,从而提高了指令的执行速度。

但是,因为操作数是指令的一部分,不能被修改,而且立即数的大小受到指令长度的限制,所以这种寻址方式灵活性最差。

(2)寄存器寻址寄存器寻址指令的地址码部分给出某一个通用寄存器的编号R i,这个指定的寄存器中存放着操作数。

其寻址过程如图所示,图中的IR表示指令寄存器,它的内容是从主存中取出的指令。

操作数S与寄存器R i的关系为:S=(R i)。

这种寻址方式具有两个明显的优点:从寄存器中存取数据比从主存中快得多;由于寄存器的数量较少,其地址码字段比主存单元地址字段短得多。

(3)直接寻址指令中地址码字段给出的地址A就是操作数的有效地址,即形式地址等于有效地址:EA=A。

由于这样给出的操作数地址是不能修改的,与程序本身所在的位置无关,所以又叫做绝对寻址方式。

下图为直接寻址的示意图。

操作数S与地址码A的关系为:S=(A)。

这种寻址方式不需作任何寻址运算,简单直观,也便于硬件实现,但地址空间受到指令中地址码字段位数的限制。

(4)间接寻址间接寻址意味着指令中给出的地址A不是操作数的地址,而是存放操作数地址的主存单元的地址,简称操作数地址的地址。

通常在指令格式中划出一位作为直接或间接寻址的标志位,间接寻址时标志位@=1。

间接寻址中又有一级间接寻址和多级间接寻址之分。

在一级间接寻址中,首先按指令的地址码字段先从主存中取出操作数的有效地址,即EA=(A),然后再按此有效地址从主存中读出操作数,如图(a)所示。

操作数S与地址码A的关系为:S=((A))。

多级间接寻址为取得操作数需要多次访问主存,即使在找到操作数有效地址后,还需再访问一次主存才可得到真正的操作数,如图(b)所示。

对于多级间接寻址来说,在寻址过程中所访问到的每个主存单元的内容中都应设有一个间址标志位。

通常将这个标志放在主存单元的最高位。

当该位为“1”,表示这一主存单元中仍然是间接地址,需要继续间接寻址;当该位为“0”,表示已经找到了有效地址,根据这个地址可以读出真正的操作数。

间接寻址要比直接寻址灵活得多,它的主要优点如下:扩大了寻址范围,可用指令中的短地址访问大的主存空间;可将主存单元作为程序的地址指针,用以指示操作数在主存中的位置。

当操作数的地址需要改变时,不必修改指令,只需修改存放有效地址的那个主存单元的内容就可以了。

但是,间接寻址在取指之后至少需要两次访问主存才能取出操作数,降低了取操作数的速度。

尤其是在多级间接寻址时,寻找操作数要花费相当多的时间,甚至可能发生间址循环。

(5)寄存器间接寻址为了克服间接寻址中访存次数多的缺点,可采用寄存器间接寻址,即指令中的地址码给出某一通用寄存器的编号,在被指定的寄存器中存放操作数的有效地址,而操作数则存放在主存单元中,其寻址过程如图所示。

操作数S与寄存器号Ri的关系为:S=((R i))。

这种寻址方式的指令较短,并且在取指后只需一次访存便可得到操作数,因此指令执行速度较间接寻址方式快。

(6)变址寻址变址寻址就是把变址寄存器Rx的内容与指令中给出的形式地址A相加,形成操作数有效地址,即EA=(Rx)+A。

Rx的内容称为变址值,其寻址过程如图所示。

操作数S与地址码和变址寄存器的关系为:S=((Rx)+A)。

变址寻址最典型的用法是将指令中的形式地址作为基准地址,而变址寄存器的内容作为修改量。

在遇到需要频繁修改地址时,无须修改指令,只要修改变址值就可以了,这对于数组运算、字符串操作等成批数据处理是很有用的。

在具有变址寻址的指令中,除去操作码和形式地址外,还应具有变址寻址标志,当有多个变址寄存器时,还必须指明具体寻找哪一个变址寄存器。

(7)相对寻址相对寻址是将程序计数器(PC)的内容与位移量D相加,即EA=(PC)+D。

PC的内容是指令的地址,指令的地址码字段作为位移量D,位移量可正、可负,两者相加后得到操作数的有效地址,位移量指出的是操作数和现行指令之间的相对位置。

这种寻址方式有如下两个特点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值。

当指令地址变换时,由于其位移量不变,使得操作数与指令在可用的存储区内一起移动,所以仍能保证程序的正确执行。

采用PC相对寻址方式编写的程序可在主存中任意浮动,它放在主存的任何地方,所执行的效果都是一样的;其次对于指令地址而言,操作数地址可能在指令地址之前或之后,因此,指令中给出的位移量可负、可正,通常用补码表示。

相关文档
最新文档