我是靠谱客的博主 坚定小蜜蜂,这篇文章主要介绍考研机组复习笔记(2) -----指令系统,现在分享给大家,希望可以做个参考。

指令系统包括机器指令,数据表示,寻址方式。

指令包括操作码,源操作数地址,目的操作数地址。

定点计算机也可以处理浮点数据和向量数据,只需要通过软件变换即可。

指令系统的设计原则:完备性(完备指令集),有效性(简洁加速无歧义),规整性,兼容性。

指令系统应该包括指令:

        数据传送指令,输入输出指令,算术逻辑运算指令,系统控制,程序控制指令。

指令系统两大派系:CISC(复杂指令集)(各种指令都能访问存储器),

                                RISC(简单指令集)(寄存器到寄存器的工作模式)。

随着时代的发展,RISC与CISC相互借鉴,到如今,两者的界限已经很模糊了。

扩展操作码的指令格式:使用频率高的指令,分配短的操作码,增加指令字所能表示的操作信息。

几种常见的指令:

        零地址指令:堆栈指令,空操作指令,停机指令等。

        一地址指令:单目运算,累加器等(另外一个操作数默认)

        二地址指令:OP|A1|A2

        地址指令:OP|A1|A2|A3                                       

        多地址指令:如向量操作等批量处理指令

寻址方式:

        1.为什么不能把操作数放在地址码里面?

                答:地址码位数有限,操作数大小有限。

        2.为什么不能把操作数地址放在地址码里面?

                答:地址码位数有限,寻址空间狭窄。

寻址分为指令寻址操作数寻址

指令寻址相对简单:一般来说是程序计数器加上pc增值,或者是跳转指令的目标地址。

操作数寻址:

        立即数寻址:源操作数在指令当中。(MOV AX ,1000H)

        存储器直接寻址:地址码中存放着源操作数在存储器中的地址。(MOV AX,[1000H])

        寄存器直接寻址:地址码中存放着源操作数所在的寄存器编号。(MOV AX,BX)

        存储器间接寻址:操作数和操作数地址都在存储器中,地址码字段给出操作数地址在存储器中的地址。(两次访存,速度慢)(MOV R1,@(1000H))

        

         寄存器间接寻址:操作数在存储器中,操作数地址在寄存器中,地址码中存放着操作数地址所在的寄存器编号。(MOV AX,[BX])

         偏移寻址:操作数存放在存储器中,而操作数地址需要通过计算得到。主要分为以下几种:

                        相对寻址:相对程序计数器PC寻址。EA=(PC)+A

                        基址寻址:相对基址寄存器寻址。EA=(B)+A  (主要面向系统操作)

                        变址寻址:相对变址寄存器寻址。EA=(I)+A。通过控制变址寄存器I中的值来控

                                           制寻址空间。(主要面向用户程序)

        堆栈寻址:操作数存放在堆栈的栈顶,通过栈顶指针SP控制,通过函数调用PUSH,POP等进行操作。

                        

        小结:

 为什么采用二进制编码:

        答:制作物理器件简单,二进制编码运算简单,与逻辑规则对应,便于逻辑运算和算术运算实现。

数据表示研究可以被硬件直接识别的数据类型。

数据结构研究如何在数据表示的基础上,处理不能被硬件直接识别的数据。

字与字长字长指的是CPU中数据通路的宽度,等于CPU内部总线的宽度或者是通用寄存器的宽度或者是运算器的位数。而字的定义则是根据需要来的。如32位字长的Intel可以定义16位的字。

反码:符号位不变,其他位按位取反。

补码:反码加一。

正数的原码反码补码都相等。补码的补码是原码。

定点不在赘述

浮点表示太长不写,见例子。

 

 

 

十进制表示:ASCII码,BCD码

ASCII码:

BCD码

 字符数据的表示:

        

 

现代计算机基本采用字节编址

数据存放:大端模式(MSB)与小端模式(LSB)。大端是指将最高有效字节存放在低地址中,小端是指将最高有效字节存放在高地址中。有的机器支持两种编码方式,只需要进行机器设置即可。

 

 字符边界对齐:好处有防止程序出错,加快访存效率。

 数据错误:冗余校验。主要有奇偶校验,海明校验,循环冗余校验。

        一位奇偶校验码:只能发现奇数个错误,当校验正确时可能是原码正确或者出现了偶数个错误。无法确定发生错误的准确位置,不具备纠错功能。开销小,用于一字节长的校验,用于存储器读写检查或按字节传输过程中的校验。分为奇校验偶校验两种。

        海明校验:海明校验只能校验一个错误的情况。若数据出现多个错误,不一定可以检测出来。校验码位数为k,原码位数为m,满足        2^k-1>=m+k    算出校验码位数k。插入在原始信息中。如原始信息为101101100,m=9,根据方程得到k=4。

      用到的校验码是看 当前位置由哪几个 校验码所在的位置的和

 

 比如:校验码的位置是1,2,4,8。位置3= 1 + 2,所以位置3用到的校验码是1和2;位置7 = 1 + 2 + 4组成的,所以位置7用到的校验码是1,2和4。

然后将校验码校验的位置记录下来:

  • 校验码1(位置1):3,5,7,9,11,13
  • 校验码2(位置2):3,6,7,10,11
  • 校验码3(位置4):5,6,7,12,13
  • 校验码4(位置8):9,10,11,12,13

然后做异或运算

  • 校验码1(位置1):1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 =  1
  • 校验码2(位置2):1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 = 1
  • 校验码3(位置4):0 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 0 = 0
  • 校验码4(位置8):0 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 0 = 0

得到最后的完整数据。

得到海明码之后,我们的校验如下(只能一位出错)

 我们得到了1110011001100,设最后一位出错,则变为111001100110(1)

对每一位校验码进行异或计算。还要加上校验码本身进行校验,以下式子第一列为校验码本身。

  • 校验码1(位置1):1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ (1) =  1
  • 校验码2(位置2):1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 = 0
  • 校验码3(位置4):0 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ (1) = 1
  • 校验码4(位置8):0 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ (1) = 1

倒写结果变为1101,第13位出错。结果全零代表无错。

CRC循环校验:最常用的一种差错校验码,其信息字段和校验字段长度可以任意指定,但要求通信双方定义的CRC标准一致。

       在K位信息码后再拼接R位校验码,使整个编码长度为N位,N=R+K

        选定一个标准除数,叫做CRC码(不是校验码),位数要小于原编码,首尾都是1。在原信息的基础上补充CRC码位数-1个零,然后对补充零后的数据进行CRC码二进制除法,最后得到的就是校验码。对于数据1110 0101,以指定除数11011(CRC码)求它的CRC校验码

 最后得到

          

 校验的方法:最终发送的字码是可以对CRC码整除的,由于接收方也有相同的CRC码,在数据传输的过程中不发生错误,接收方用接收到的数据除以CRC码也是可以整除的,此时为无错误。同时,不能整除,说明传输过程中数据发生了错误。

基本指令与指令类型

        数据传送指令:move,store,load,exchange等

        算术运算与逻辑运算指令:定点浮点运算,异或等

        数据转换指令

        输入输出指令:可以由专用IO指令,通用的数据传送指令,IO处理机等完成

        系统控制指令:启动IO设备指令,存取特殊寄存器指令,通常只能由操作系统执行,

        程序控制指令:转移指令(无条件转移与条件转移,程序中转移),循环控制指令,子程序调用与返回指令(通过call和ret指令控制,嵌套递归调用,程序与程序之间转移),中断指令与返回等。就是改变PC计数器的自动增值。如碰到循环分支子程序调用等。

        在子程序调用中,采用寄存器存放返回地址的话,单寄存器不支持嵌套和递归,多寄存器不支持递归,但是支持嵌套。如果返回地址存在子程序的起始位置,支持嵌套,不支持递归,因此广泛采用堆栈的方式保存返回地址。

        在参数传递的问题上,可以采用约定寄存器,约定存储空间,参数赋值法或者堆栈法解决。

        在子程序和主程序的公共寄存器的公用问题上,可以采用破坏和保护现场的方法,或者使用push指令形成保护程序段,用pop指令形成恢复指令段。

        保存现场->入口参数传递->子程序处理->出口参数传递->恢复现场->返回调用程序。

MIPS指令格式:

        R型指令中,op操作码全零,指令类别依靠func功能码区分,如func=100000代表加法。

sa字段为移位指令的位移量。(寄存器直接寻址)

        I型指令中 ,immediate字段给出立即数或者分支指令的偏移地址。(立即数寻址,基址寻址,相对寻址)

        J型指令中,address字段给出无条件转移的低26位(MIPS直接寻址,因此每条指令的起始地址的低两位都是00,因此我们将程序计数器PC高四位拼上26位地址后加两个零得到32位目标转移地址。)

   

 

MIPS寄存器:32个通用寄存器,32个浮点寄存器,和三个特殊的HI,LO,PC寄存器

 MIPS只能通过load/store指令访问存储器,边界对齐,大端存放,寻址空间2^32bytes=4GB,访存地址通过32位寄存器加上16位偏移量得到,偏移量为有符号整数,可以向前向后偏移。

算术指令中,乘法的高32位存放在HI中,低32位存放在LO中,除法中,商存放在LO中,余数存放在HI中。

分支转移指令中转移条件成立的时候,PC中的值是PC+4

常用标志位:SF:符号位,OF(VF):溢出位,CF:进位位,ZF:判零位

在计算的过程中,计算机不清楚是有符号数还是无符号数,若CF标志则为无符号数,若OF标志则为有符号数

指令设计的四大要素:简单源自规整,越少越快,加速常用操作,均衡设计

最后

以上就是坚定小蜜蜂最近收集整理的关于考研机组复习笔记(2) -----指令系统的全部内容,更多相关考研机组复习笔记(2)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部