干货分享(1)——指令系统的那些个要点

直接上干货,废话不多说。

大纲:

1、机器指令的基本格式

2、地址码结构

3、扩展操作码

4、九种基本的数据寻址方式

5、存储器堆栈

详细内容:

机器指令基本格式

机器码字段

    地址码字段

     机器字长:值计算机能直接处理二进制数据的位数

         指令字长:一条指令中包括二进制的位数

         单字长指令:指令长度等于机器字长的指令

         双字长指令:指令长度等于两个机器字长的指令

2.2 地址码结构

1)四地址指令

OP

  A1

  A2

   A3

   A4

 

指令含义:(A1)OP(A2)->A3

                     A4=下一条将要执行指令的地址

注意:(A1)代表从A1地址中取出操作数,()代表取数值操作

2)三地址指令

   OP

    A1

A2

   A3

        指令含义:(A1)OP(A2)->A3

                                   (pc)+1->pc

       注意:程序计数器(PC)用于指出下一条指令在主存中的存放地址

       3)二地址指令

                    

OP

   A1

     A2

       指令含义:(A1)+(A2)->A1

                                   (pc)+1->pc

       其中:A1为目的操作数地址,A2为源操作数地址

4)一地址指令

OP

     A1

指令含义:(Acc)OP(A1)->Acc

                                   (pc)+1->pc

其中:Acc为;累加寄存器(Accumulator Acc)

       5)零地址指令

                                         

OP

         实现这一构想的硬件结构是堆栈

         小结:该知识点主要理解好指令的含义即可

       例题1(14年选择题)

           单地址指令中为了完成两个数的算术运算,除地址码指明的一个操作数外,另一个常需采用______

              A.堆栈寻址方式     B.立即寻址方式

       C.隐含寻址方式     D.间接寻址方式

              分析:A选项是零地址指令的情况,堆栈成为提供操作数和保存运算结果的唯一场所。B,D选项不属于这5种指令的情况,因为Ai就代表了操作数地址,所以二地址、三地址、四地址指令都是直接寻址方式,正确答案是C,单地址指令的隐含操作数存放在专门的寄存器中,即Acc.

2.3 扩展操作码(重点)

优点:既能充分利用指令的各个字段,又能在不增加指令长度的情况下扩展操作码的位数,使它能表示更多的指令。

例题2(14年综合题)

       设指令字长为16位,每个操作数的地址码为6位,指令有零地址,一地址、二地址3种格式

设指令系统的操作码长度和位置固定,若零地址指令有M中,一地址指令有N种,则二地址指令最多有几种?

若采用扩展操作码技术,二地址指令最多有几条?

采用扩展操作码技术,若二地址指令有P条,零地址指令有Q条,则一地址指令最多有几种?

解:(1)由题意知这是个定长操作码,指令字长16位,操作数地址码Ai为6位,因此可以画出零地址、一地址、二地址的指令格式

                             4位

  OP

       指令格式:   零地址                 

                                            

                                                         4位    6位 

  OP

   A1

                一地址

           

                               4位     6位    6位

  OP

   A1

  A2 

                                   二地址

 

其中零地址指令M条,一地址指令N条。我们知,指令的操作码长度固定为4位,最多可表示出2^4=16条指令。也即16条=M+N+P(其中P为二地址指令条数),因此P=16-M-N。

  

 

 

 

 

 

 

 

扩展操作码的指令格式:

                            16位

  OP

       指令格式:   零地址                 

                                            

                                                         10位   6位 

  OP

   A1

                一地址

           

                               4位     6位    6位

  OP

   A1

  A2 

                                   二地址

 

(2)采用扩展操作码,则操作码的长度不固定。二地址指令的操作码为4位,本来最多可表示16条二地址指令。但是由于是扩展操作码,至少要留一个二地址指令作为扩展窗口,来形成一地址指令。因此二地址指令最多有:

 16-1=15条

(3)同样也是采用扩展操作码。我们知,每条二地址指令用来扩展形成一地址指令,可以造出2^6条一地址指令。同理,每条一地址指令用来扩展形成零地址指令,可以造出2^6条零地址指令。

              现在题目问一地址指令最多有几种,那么我们应该转成求最多有多少条二地址指令可供扩展,因为每多一条二地址指令,就能多出2^6条一地址指令。

              题目已经告诉我们有二地址指令P条,这P条是不能作为扩展窗口的,那么剩下的(2^4-p)条指令都能作为一地址的扩展窗口,也即最多可以造出(2^4-p)*2^6条一地址指令。

              看似题目求到这就求完了,但是题目还告诉了我们零地址指令有Q条,说明同样需要用一地址指令用来扩展成零地址指令,那么不用来扩展的一地址指令条数记为R条才是我们最终要求的答案(因为用来扩展的一地址指令都成最后的零地址指令了)

       这里满足一个等式:[(2^4-p)*2^6-R]*2^6=Q

       由该等式求得R=(2^4-p)*2^6-ceil(Q/2^6),其中ceil代表向上取整

 

注:这道题非常有代表性,几乎涵盖的定长操作码和扩展操作码考题的知识点,务必要掌握并理解透彻,该题理解了,其他类似的题就很简单了。

练习题:

       练习题1(05年真题问答题):设指令长度为二进制16位,地址长度为4位,请设计一指令系统,使分别具有零地址、一地址和二地址的指令(要求指令条数最多)

       提示:要使指令条数最多,那么要求不进行扩展的指令要尽可能的多,也即二地址指令留一条指令作为扩展窗口,同理一地址指令也只留一条指令作为扩展窗口。

       练习题2(06年综合题):假设某机器的指令的长度为16位,包括4位基本操作码字段和三个4位地址段,请设计具有15条三地址指令,15条二地址,15条一地址和16条零地址的指令格式。

       提示:稍微分析一下题目条件,15条三地址指令,15条二地址,15条一地址,16条零地址,这不就是指令条数最多的情况吗,和05年的那题其实是一个意思,这两道题是同一道题,只不过换了一种说法。

 

2.4 基本的数据寻址方式(9种)【超级重点,必考考点】

寻址方式

有效地址

用途及特点

立即寻址

 

通常用于给寄存器赋初值

隐含寻址

 

缩短指令字长

直接寻址

   EA=A

 

间接寻址

   EA=(A)

扩大寻址范围,易于完成程序返回

寄存器寻址

   EA=Ri

减少指令字的长度,执行速度快

寄存器间接寻址

   EA=(Ri)

扩大寻址范围

基址寻址

   EA=(Rb)+A

适用于多道程序设计

变址寻址

   EA=(Rx)+A

处理数组问题和循环程序

相对寻址

   EA=(PC)+A

转移指令和程序浮动

先间址再变址

   EA=(Rx)+(A)

 

先变址再间址

   EA=((Rx)+A)

 

页面寻址

   EA=PC//A

 

 

       说明: A为形式地址,EA为有效地址,操作数S=(EA)

       注:1) 基址寻址与变址寻址的区别:基址寻址中,基址寄存器中的内容由操作系统确定,用户不可变,但偏移地址可变;

 

变址寻址中,变址寄存器是由用户设定的,其值可变,但指令字的形式地址A不可变

              2)相对寻址是基于程序局部性原理

              3)在各种寻址方式中,指令的地址码字段可能出现的情况:

                     a.寄存器编号 b.设备端口地址 c.存储器的单元地址 d.数据

      

       寻址特点比较:

              a.间接慢,直接快

              b.内存慢,寄存器快,立即数更快

              c.要运算的慢,不需要运算的快

              d.间接的复杂,直接的简单

              e.直接的死板,间接的灵活

              f.内存地址长,寄存器地址短

      

       几种数据寻址操作数存放位置比较:

    1)立即寻址的操作数:存在于指令中,只要取出指令,也就取出了可以立即使用的操作数。

             

OP

  立即数

              从立即寻址的指令格式可以发现,指令中在操作码字段后面的部分不是通常意义上的操作数地址,而是操作数本身。

2)寄存器寻址:操作数存放在寄存器中。根据寄存器编号Ri找到对应的操作数S=(Ri)

3)其他七种寻址:操作数都存放在主存。以直接寻址为例,通过指令的地址码到主存的相应位置取操作数。

说明:对该知识点,应该能做到很熟悉每种寻址方式的有效地址计算方式EA,以及操作数S=(EA)。该知识点直接点和第六章的数据通路直接挂钩,也是一个必考点,历年大题经常把这两个知识联合考察,还是有一定难度,复习时应高度重视。

 

例题3(13年选择题):若指令中地址码给出的是操作数的有效地址,这种寻址方式为()

A.立即寻址 B.直接寻址 C.间接寻址 D.相对寻址

答案:B

例题4:计算器指令中要用到的操作数一般可来自()部件

A.通用寄存器 B.内存存储单元 C.外设接口中的寄存器 D.以上情况均可

答案:D

例题5(选自高分笔记):某机器字长16位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节PC自动加1.若某转移指令所在主存地址为2000H,相对位移量字段的内容为06H,则该转移指令成功转移后的目标地址是()

A.2006H  B.2007H   C.2008H   D.2009H

 

 

 

 

 

 

 

 

 

分析:题目说的是相对寻址,因此先写出计算相对寻址的有效地址的式子:

              EA=(PC)+A,而A是已知的,只需确定取值后PC的值。

              我们知相对寻址由程序计数器(PC)提供基准地址,本题的(PC)=2000H

              由题知,转移指令由两个字节组成,每取一个字节PC自动加1,由于每条指令由两个字节组成,因此取指令后PC值为2002H.[(PC)+2->PC]

              故EA=(PC)+A=2002H+06H=2008H

              注:看清题目是字编址还是字节编址。

              说明:由该题我想再补充一点关于相对寻址的特点(课本P60):

               对于指令地址而言,操作数地址可能在指令地址之前或之后,因此,指令中给出的位移量可负、可正,通常用补码表示。如果位移量为n位,则相对寻址的寻址范围为:(PC)-2(n-1)~(PC)+2(n-1)-1

              这是个小知识点,在课本60页,去年综合题的一个小问考到了,注意这给的是补码的情况。

练习题(14年填空题):设相对寻址的转移指令占两个字节,第一字节是操作码,第二字节是用补码表示的相对位移量,若转移指令地址为200aH,要求转移到2002H,则该转移指令第二字节内容为_____

注:这里先不给出答案,自己看清题目再稍加思考,不难得出结果。

例题6(13年真题综合题):

设有一台计算机,其指令长度为16位,指令格式如下:

该指令的功能是(RROPM/D

   其中OP为操作码,占5位;第一操作数R为寄存器直接寻址,第二操作数由MD共同决定寻址方式(M为寻址方式,D为形式地址)且规定如下:

  M000,为立即寻址,D为立即数;

  M001,为相对寻址,D为位移量;

M010,为基址寻址,D为位移量;

M011,为寄存器间接寻址,D为寄存器号;

 假定要执行的指令为加法指令(ADD),存放在002000单元中,D的值为02该指令执行前存储器内容如图1所示;通用寄存器组、变址寄存器和基址寄存器内容如图2所示。问:当M分别为以下几种情况时,该指令执行后,结果是什么?(要求写出计算过程)(8分)

 

1)当M000 时,结果是什么?放在哪个寄存器中?

2)当M001时,结果是什么?放在哪个寄存器中?

3)当M010时,结果是什么?放在哪个寄存器中?

4)当M011时,结果是什么?放在哪个寄存器中?

 

 

 

 

 

               图 1 存储器内容

图 2 寄存器内容

 

分析:本题考查的知识点是数据寻址,要求考生能十分熟悉每种数据寻址的特点,并能根据不同的数据寻址做出相应的运算。

先来罗列一下已知的条件:

              1)   

该指令的功能是RROPM/D

  其中OP为操作码,占5位;第一操作数R为寄存器直接寻址,第二操作数由MD共同决定寻址方式(M为寻址方式,D为形式地址)

 

              2)假定要执行的指令为加法指令(ADD),存放在002000单元中,D的值为02         

 

根据2),我们知道OP是ADD操作,指令功能进一步写成:

                     RRADDM/D

加法指令ADD有两个操作数,第一个操作数R为寄存器直接寻址,也就是说只要找到了所在的寄存器号Ri,那么第一操作数的值即为S1=(Ri);

指令的8-10位是寄存器,查看编号是001,即为R1

找到R1对应的值,即S1=(R1)=002004

第二个操作数是由(M/D)共同确定,这个就要回到问题里面去分析,总之就是再找到第二个操作数的值S2.  然后再(S1+(S2)->(R1),也即把最终的结果存回到R1寄存器中。

       因此,本题的关键点就是求第二操作数S2.带着这个问题方向回到题目中寻找答案。

         1M=000,由题意知为立即寻址,D为立即数,且D=2.因此S2=D=2

       结果S=S1+S2=002004+02=002006,结果存放在R1

(2)  M=001,由题意知为相对寻址,D为位移量。

相对寻址的EA=(PC)+D,其中D=02

由内存地址图知,加法指令ADD在内存的初始地址是(PC=002000.

而该指令是16位(说明是两个字节,PC需要增加两步),那么当把指令取出,要执行(PC+2->PC操作,

 

EA=002002+02=002004,S2=EA=001150

故结果S=S1+S2=002004+001150=03154,结果存放在R1

CPU从存储器中取出一个字节时,会自动执行(PC)+1→PC程序计数器PC在取出指令后PC=PC+1

(3)M=010,为基址寻址,D为位移量

基址寻址的EA=(Rb)+D,其中D=02

由题目中的基址寄存器图知(Rb=002004,由此得EA=002006

S2=(EA)=001250,所以S=S1+S2=002004+001250=003254,存放在R1中。

(4)M=011, 为寄存器间接寻址,D为寄存器号;因为D=02,所以另一个寄存器是R2

       寄存器间接寻址的EA=(Ri),EA=(R2)=004004,则S2=(EA)=002016

        所以S=S1+S2=002004+002016=00401A,存放在R1中。

 

       练习题:某机的机器字长为16位,主存按字编址,指令格式如下:

15                           10  9      8  7           0      

操作码

   X

    D

 

其中,D为位移量,X为寻址特征位。

X=00:直接寻址

X=01:用变址寄存器X1进行变址

X=10:用变址寄存器X2进行变址

X=11:相对寻址

设(PC)=1234H,   (X1)=0037H   (X2)=1122H   (H代表十六进制)

请确定下列指令的有效地址

(1)4420H   (2)2244H  (3)1322H   (4)3521H   (5)6723H      

详解:

(1)4420=0100 01     00    0010 0000H

00表示直接寻址Addr=(A)=20H

(2)2244H=0010 00  10  0100 0100H

D=0100 0100H=44H

10表示变址寄存器X2,Addr=(X2)+D=1122H  +44H

(3)1322H=0001 0 0  11  0010 0010 H

D=0010 0010 H=22H

11表示相对寻址, Addr=(PC)+D=1234H+22H

(4)3521H=0011 01 01  0010 0001H

(5))6723H=0110 01 11 0010 0011H

D=0010 0011H=23H

Addr=(X2)+D=1122H  +44H

1.X=00,D=20H,EA=20H
2.X=10,D=44H,EA=1122H+44H=1166H
3.X=11,D=22H,EA=1234H+22H=1256H
4.X=01,D=21H,EA=0037H+21H=0058H
5.X=11,D=23H,EA=1234H+23H=1257H

说明:这题比较死板,远不如真题的灵活,毕竟没有那么多图,这题只要对各种数据寻址比较熟悉,应该是比较简单的,先不提供答案,由自己完成。

2.5  存储器堆栈

       (1)自底向上生成(向低地址方向生成)堆栈

              进栈:

                     (SP)+1->SP  ;修改栈指针

                     (A)->(SP)   ;将A中的内容压入栈顶单元

              出栈:

                     ((SP))->A  ;将栈顶单元内容弹出送入A中

                (SP)+1->SP  ;修改栈指针

       (2)自顶向下生成(向高地址方向生成)堆栈

              这种堆栈与自底向上堆栈正好相反,它的栈底地址小于栈顶地址。进栈时,先令(SP)+1->SP,然后再压入数据;出栈时,先将数据弹出,然后(SP)-1->SP

 

例题7(14年选择题):在向下生成的堆栈中,如果入栈指令PUSHX的操作定义为:(SP)+1->SP,M(X)->M(SP),则出栈指令POPX应定义为___

       A.(SP)-1->SP, M(SP)->M(X)      A.(SP)+1->SP, M(SP)->M(X) 

       C.M(SP)->M(X), (SP)-1->SP     D..M(SP)->M(X), (SP)+1->SP

       答案:C

 

猜你喜欢

转载自blog.csdn.net/qq_35008624/article/details/82019855