指令系统包括机器指令,数据表示,寻址方式。
指令包括操作码,源操作数地址,目的操作数地址。
定点计算机也可以处理浮点数据和向量数据,只需要通过软件变换即可。
指令系统的设计原则:完备性(完备指令集),有效性(简洁加速无歧义),规整性,兼容性。
指令系统应该包括指令:
数据传送指令,输入输出指令,算术逻辑运算指令,系统控制,程序控制指令。
指令系统两大派系: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)内容请搜索靠谱客的其他文章。
发表评论 取消回复