1第3章寻址方式与指令系统指令:指示计算机执行某类操作的信息的集合。指令系统:一台计算机拥有的全部指令人们知道:计算机通过执行程序可以完成所要求的各种任务。程序是由一系列指令构成。指令则是人们指示计算机硬件执行诸如加、减(算术运算和逻辑运算)、移位等基本操作的命令。2本节主要讨论:一般指令格式常用寻址方式面向用户的指令类型32、操作数或操作数地址:指令中应给出参与运算的数据或指出这些数据的存放位置。3、存放结果的地址:运算完成后所得结果的存放位置。3.1指令格式与指令系统设计一条指令一般应包含以下信息:1、操作码:指示操作的类型,即要求计算机执行的操作,如加、减、乘、除等。3.1.1指令格式44、后续指令地址:在一个由指令序列构成的程序中,执行完一条指令后,需要指出下一条要执行指令的存放位置。在一条指令中应包含一个操作码和一个或多个地址码。5指令基本格式操作码θ操作数OR地址码D一个一个或几个下面就从以下方面介绍:1.指令2.操作码结构3.地址结构思考:计算机执行什么操作是由一条指令中的哪一部分所确定?63.1.2.指令字长定长指令格式变长指令格式便于控制(1)定长操作码各指令θ的位置、位数固定相同。(2)扩展操作码各指令θ的位置、位数不固定,根据需要变化。合理利用存储空间1.操作码结构关键在设置扩展标志。----由操作码判定7例.指令字长16位,可含有3、2、1或0个地址,每个地址占4位。(书P45例2-35)操作码地址码15~1211~87~43~00000XYZ1110XYZ............11110000YZ11111110YZ............三地址指令15条二地址指令15条111111110000Z111111111110Z............一地址指令15条11111111111100001111111111111111............零地址指令16条操作码扩展标志(可以有多种分配方案)8(3)复合型操作码操作码分为几部分,每部分表示一类操作。例.某计算机的算逻指令01234567815基本操作进位移位回送判跳操作数93.1.3指令的地址码(本节内容包含了3.2.1P59)指令中提供的地址存储单元地址码寄存器编号(1)指令提供地址的方式显地址方式隐地址方式:指令中明显指明地址。:地址隐含约定,不出现在指令中。10(2)地址结构的简化操作数地址●四地址结构指令格式:使用隐地址可以减少指令中的地址数,简化地址结构。θD1D2D3D4结果地址下条指令地址功能:(D1)θ(D2)D3(D4)下条指令用指令计数器PC(也称:指令指针)指示指令地址。注释:寄存器级的传送形式表示(D1)表示按D1地址所读取的内容(即操作数)11●三地址结构指令格式:操作数地址θD1D2D3结果地址下条指令地址转移时,用转移地址修改PC内容。功能:(D1)θ(D2)D3(PC)+1PC源/目的●二地址结构指令格式:θD1D2目的/源功能:(D1)θ(D2)D2/D1(PC)+1PC注意:1)这里1----代表1条指令的字节数2)后继指令地址是隐含地址,PC内容增量计数也是隐含约定的12双操作数:●一地址结构指令格式:θD1隐含约定单操作数:功能:(D1)θ(A)A(PC)+1PCθ(D1)D1(PC)+1PC比如:有些机型CPU中设置累加器AC,其中一个操作数(目的操作数)由AC提供,运算结果也存于AC中.2---1/213例.ADD;执行前:低SP102046SP3046执行后:高低高●零地址结构指令格式:θ功能:①无需操作数,如:NOP,HALT等②隐含约定的单操作数指令③用于堆栈或特殊指令操作。14由以上可看出:隐地址可以简化指令的地址结构,减少指令中的显地址数.思考:隐地址会对地址选择带来一定限制,那么显地址多少个合适?153.1.4指令的操作码前面我们已经知道:计算机所执行的何种操作是由“指令中的操作码”所决定的。目前,在指令操作码设计中采用“定长、变长和单功能型、复合型操作码”161、定长操作码变长指令码2、变长操作码定长指令码3、单功能型或复合型操作码173.1.5指令系统的设计P67183.2指令和数据的寻址方式(书P68)寻址方式是指寻找操作数或操作数地址的方式。193.2.1指令的寻址方式1、顺序寻址方式通常采用一地址计数器如PC(PC=PC+1)完成。计算机的工作过程是:取指令—分析(解释)---执行。2、跳跃寻址方式通常是转移指令(条件或无条件,如C语言的IF语句。203.2.2操作数的寻址方式操作数不像指令那样按顺序存储在主存中,因为操作数会来自某一存储单元或某一程序或某一变量….21(1)包含在该指令,由指令直接给出操作数(2)在CPU的某个R中,指令中给出R号操作数可能存放的位置:22(3)在M某单元中,指令中给出主存单元地址码(4)在堆栈中,可以隐含约定由栈顶指针SP提供地址(5)在某个I/O接口R中(非CPU中的R)23执行一条指令所进行的步骤:①取指令②取源操作数③取目的操作数④执行运算操作⑤存放结果24操作码θ立即数S1、立即寻址指令直接给出操作数。定长格式:变长格式:基本指令立即数S立即寻址主要用来提供常数、设置初值等。操作数在指令中,其长度固定、有限。操作数在基本指令之后,其长度可变。25操作码θ有效地址D2、直接寻址指令直接给出操作数地址。存储单元号寄存器号(数在M中)(数在R中)●存储器直接寻址(直接寻址)定长格式D的位数有限,访存范围受限变长格式基本指令DLDHD的位数可覆盖整个存储空间操作数S=(D)26【例3-2】指令中所给的地址码EA为“2001H”,按照存储器直接寻址方式读取操作数。主存中部分地址与相应单元存储的操作数之间的对应关系如下:•地址存储内容•2000H3BA0H•2001H1200H•2002H2A01H•解:因为存储器直接寻址方式中,指令中的有效地址即主存中存储操作数的地址,所以地址为“2001H”的存储单元中的内容“1200H”即操作数。•本例实现了:操作数地址操作。M27操作码θ寄存器号R存储单元号寄存器号(数在M中)----存储器间址(数在M中)----寄存器间址●寄存器直接寻址(寄存器寻址书P62)格式•R号的字段所占位数少;•访问R比访问M快S=(R)用于访问固定的存储单元或寄存器。3、间接寻址指令给出操作数的间接地址。例3-3实现了:寄存器号操作数R28格式●存储器间址操作码θ间接地址DS=((D))D=00300060...0060SM间址单元地址指针书P63,例3-4间址单元地址操作数地址MM操作数特点:①间址单元内容的修改可以使同一条指令指向不同存储单元中的操作数,实现程序的循环和程序的共享.②增加访问次数,减慢速度.29操作码θ寄存器号R●寄存器间址格式R所占位数少;R可提供全字长地址码;修改R内容比修改M内容快。S=((R))R=02M00400040S.........地址指针书P64,例3-5结合讲寄存器号操作数地址RM操作数30特点:①指针不变(由指令指定),指针内容可变,使同一指令可指向不同存储单元,以实现程序的循环、共享,并提供转移地址。②比存储器间址方式少访问一次主存储器.速度快.③指令中寄存器号位数比主存地址码位数少.两种变形:•自增型寄存器间址•自减型寄存器间址31寄存器号操作数地址RM操作数R内容加11)自增型寄存器间址2)自减型寄存器间址寄存器号R内容先减1,减后的结果为操作数地址RM操作数32堆栈是一种特殊的存储器,访问堆栈必须按照指定的规则进行操作。用途:主要用于暂存数据以及在过程调用或处理中断时保存断点信息。堆栈的基本概念●堆栈寻址堆栈一般分为:和专用堆栈存储器软件堆栈按堆栈的工作方式专门设计的存储器专用堆栈存储器:软件堆栈:由程序设计人员用软件在主存储器中划出的一块存储区作为堆栈来使用。33堆栈已存放数据栈顶栈底......主存00000H堆栈的一端是固定的,称为栈底。栈底是堆栈存储区的最大地址单元(自底向上生长)。另一端是浮动的,称为栈顶。在任何时刻,栈顶是最后存入信息的存储单元。栈顶随着堆栈中存放信息的多少而改变。为了指示当前堆栈中存放数据位置,通常设置一个寄存器来指示栈顶位置。其内容就象一个指针一样,因此被称为堆栈指针SP(StackPointer)。SP的内容始终指向栈顶单元堆栈中数据进/出都由SP来控制34堆栈中存取数据的规则是:“先进后出FILO”(First-In-Last-Out)。即最先送入堆栈的数据要到最后才能取出,而最后送入堆栈的数据,最先取出。堆栈寻址格式:操作码θ堆栈指针SPSP...S...S=((SP))M0070...栈顶SP既可出现在指令中,也可隐含约定。压栈:SP自动减1,再存数。先取数,SP再自动加1。出栈:-(SP),自减型间址。(SP)+,自增型间址。35●变址寻址(4)变址、基址寻址及其变化(书P64)变址寄存器号S=((RX)+D)格式操作码θRXD形式地址修改量(可变)基准地址(不变)指令给出一个寄存器号和一个地址量,寄存器内容与地址量之和为有效地址。若把SP寄存器改为其它寄存器,则就是自减型寄存器间址,-(R);自增型寄存器间址(R)+。(图示:P64图3-11)36为了能覆盖全部存储区间,形式地址D的必须足够长。但由于D的位数有限,会使访存空间受到限制。例.用变址方式访问一组连续区间内的数组元素。D=首址D为存储区首址;(RX)为所访单元距离首址的长度;RX初值为0,每访问一个单元,(RX)+1。n-1...012...D+1D+2D+n-1...37格式(D的位数只需覆盖一个较小的存储区间)●基址寻址基址寄存器号Rb4K指令给出一个寄存器号和一个地址量,寄存器内容与地址量之和为有效地址。操作码θRbD位移量S=((Rb)+D)基准地址(可变)相对于基址的位移(不变)M......…...…...Rb4K改变Rb的内容,程序能访问存储空间中任何一个定长区间(如指令中位移量D的位数为12位,可访4K)。38例.便于访问两维数组中某类指定的元素。4K4KRbM......…...…...RbD=2D=2学生姓名n性别性别年龄年龄学生姓名1例.程序重定位问题例.扩展有限字长的寻址空间39变址与基址的主要区别:变址:指令提供基准量(不变)位数较长,R提供修改量(可变);适于处理一维数组。基址:指令提供位移量(不变)较短,R提供基准量(可变);用于扩大有限字长指令的访存空间。思考:表面上看,基址寻址和变址寻址的有效地址计算几乎一样!那这两种方式区别在哪呢?40S=((RX)+(Rb)+D)格式●基址加变址变址寄存器号指令给出两个寄存器号和一个地址量,寄存器内容与地址量之和为有效地址。位移量操作码θRXRbD基址寄存器号便于处理两维数组。41格式●相对寻址指令给出位移量,PC内容与位移量之和为有效地址。位移量操作码θPCD或隐含指定S=((PC)+D)D的取值可为正负,因此有效地址就相对PC上下浮动,给编程带来方便。42格式●页面寻址(P66)指令给出位移量D,PC的高位部分与D拼接,形成有效地址。位移量操作码θPCD或隐含指定S=((PC)H,D)例.M为64KB,划分为256页,每页256B。页号页内地址PC0165H7C.........017CHS页面寻址指令位移量43•用于页式管理存储系统。•寻址速度快,适于组织程序模块,•有效利用存储空间。思考:页面寻址方式,用PC的高位部分多少位进行拼接?回答:1.要看主存分为多少个页?页的数量用多少位来表示,就将PC的高若干位截下.2.要看主存规定每个页有多少容量,页容量用多少位来表示,形式地址就应该为多少位,与PC高位截下的部分进行拼装.442.指令中对寻址方式表示(1)用操作码隐含说明不同寻址方式例.某机指令用操作码最高两位来指示寻址方式00:RR型指令,寄存器-寄存器寻址01:RX型指令,寄存器-变址寻址10:SI型指令,基址-立即寻址11:SS型指令,基址-基址寻址45(2)指令中设置专