计算机组成原理知识点汇总(考研用) |
您所在的位置:网站首页 › 和平精英单字id无符号 › 计算机组成原理知识点汇总(考研用) |
计算机组成原理知识点汇总(考研用)——第四章:指令系统
本文参考于《2021年计算机组成原理考研复习指导》(王道考研),《计算机组成原理》 思维导图: 指令(又称机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。 指令系统是计算机的主要属性,位于硬件和软件的交界面上。 4.1.1 指令的基本格式 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。一条指令通常包括操作码字段和地址码字段两部分:
指令含义:(A1)OP(A2)——>A1; 对于常用的算术和逻辑运算指令,往往要求使用两个操作数,需分别给出目的操作数和源操作数的地址,其中目的操作数地址还用于保存本次的运算结果。 若指令字长为32位,操作码占8位,两个地址码字段各占12位,则指令操作数的直接寻址范围为212=4K 4.三地址指令指令含义:(A1)OP(A2)——>A3 若指令字长为32位,操作码占8位,3个地址码字段各占8位,则指令操作数的直接寻址范围为28=256。若地址字段均为主存地址,则完成一条三地址需要4次访问存储器(取指令1次,取两个操作数2次,存放结果1次) 5.四地址指令
定长操作码指令在指令字的最高位部分分配固定的若干位(定长)表示操作码。一般n位操作码字段的指令系统最大能够表示2n条指令。 4.1.3 扩展操作码指令格式 为了在指令字长有限的前提下仍保持比较丰富的指令种类,可采取可变长度操作码,即全部指令的操作码字段的尾数不固定,且分散地放在指令字的不同位置上。 最常见的变长操作码方法是扩展操作码,它使操作码的长度随地址码的减少而增加,不同地址数的指令可具有不同长度的操作码, 从而在满足需要的前提下,有效地缩短指令字长。下图为一种扩展操作码的安排方式: 例题:一个计算机系统采用32位单字长指令,地址码为12位,若定义了250条二地址指令,则还可以有()条单地址指令 答案:24K; 例题:一处理器中共有32个寄存器,使用16位立即数,其指令系统结构中共有142条指令。在某个给定的程序中,20%的指令带有一个输入寄存器和一个输出寄存器;30%的指令带有两个输入寄存器和一个输出寄存器;25%的指令带有一个输入寄存器、一个输出寄存器、一个立即数寄存器;其余25%的指令带有一个立即数输入寄存器和一个输出寄存器。 (1)对于以上4种指令类型中的任意一种指令类型来说,共需多少位?假定指令系统结构要求所有指令长度必须是8的整数倍 (2)与使用定长指令集编码相比,当采用变长指令集编码时,该程序能够少占用多少存储器空间? 答案:(1)由于有142条指令,因此至少需要8位才能确定各条指令的操作码。20%的一个输入寄存器和一个输出寄存器指令需要18位,对齐到24位;30%的两个输入寄存器和一个输出寄存器需要23位,对齐到24位;25%的一个输入寄存器、一个输出寄存器、一个立即数寄存器指令需要34位,对齐到40位;25%的一个立即数输入寄存器和一个输出寄存器需要29位,对齐到32位; (2)由于变长指令最长的长度为40位,所以定长指令编码每条指令的长度均为40位。而采用变长编码,平均长度为30位。能少占用25%的存储空间。 例题:假设指令字长为16位,操作数的地址码为6位,指令有零地址、一地址、二地址三种格式。 (1)设操作码固定,若零地址指令有M种,一地址指令有N种,则二地址指令最多有几种 (2)采用扩展操作码技术,二地址指令最多有几种 (3)采用扩展操作码技术,若二地址指令有P条,零地址指令有Q条,则一地址指令最多有几种 答案:(1)16-M-N;(2)15种;(3)(16-P)x 2^6-Q x 2 ^(-6);二地址指令操作码每减少一个,可多构成2 ^6条一地址指令操作码;一地址指令操作码每减少一个,可多构成2 ^6条零地址指令操作码; 例题:在一个36位长的指令系统中,设计一个扩展操作码,使之能表示下列指令: (1)7条具有两个15位地址和一个3位地址的指令 (2)500条具有一个15位地址和一个3位地址的指令 (3)50条无地址指令 答案: 答案:应有寻址特征位; 寻址方式是指寻找指令或操作数有效地址的方式,即确定本条指令的数据地址及下一条待执行指令的地址的方法。寻址方式分为指令寻址和数据寻址两大类。 指令中的地址码字段并不代表操作数的真实地址,这种地址称为形式地址A。形式地址结合寻址方式,可计算出操作数在存储器中的真实地址,这种地址称为有效地址EA。 4.2.1 指令寻址和数据寻址寻找下一条将要执行的指令地址称为指令寻址; 寻找操作数的地址称为数据寻址。 1.指令寻址指令寻址方式有两种:顺序寻址方式与跳跃寻址方式。 (1)顺序寻址可通过PC+1(1个指令字长),自动形成下一条指令的地址 (2)跳跃寻址通过转移类指令实现。所谓跳跃,是指下一条指令的地址码不由程序计数器给出,而由本条指令给出下条指令地址的计算方式。 是否跳跃可能受状态寄存器和操作数的控制,而跳跃到的地址分为绝对地址(由标记符直接得到)和相对地址(相对于当前指令地址的偏移量),跳跃的结果是当前指令修改PC值,所以下一条指令仍然通过PC给出。 2.数据寻址 为区别数据寻址的不同方式,通常在指令字中设一个字段,用来指明属于哪种寻址方式。 这种类型的指令不明显地给出操作数的地址,而在指令中隐含操作数的地址。 例如,单地址的指令格式就不明显地在地址字段中指出第二操作数的地址,而规定累加器ACC作为第二操作数地址,指令格式明显指出的仅是第一操作数的地址。因此,累加器ACC对单地址指令格式来说是隐含寻址。 这种类型的指令的地址字段指出的不是操作数的地址,而是操作数本身,又称立即数。 数据采用补码形式存放。 指令字中的形式地址A是操作数的真实地址EA,即EA=A 指令的地址字段给出的形式地址不是操作数的真实地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)。间接寻址可以是一次间接寻址,也可是多次间接寻址。 寄存器寻址是指在指令字中直接给出操作数所在的寄存器的编号,即EA=Ri,其操作数在由Ri所指的寄存器内。 寄存器间接寻址是指在寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri)。 相对寻址是把PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于当前指令地址的位移量,可正可负,补码表示。 对于转移指令JMP A,当CPU从存储器中取出一字节时,会自动执行(PC)+1——>PC。 若转移指令的地址为X,占2B,则在取出该指令后,PC的值会增2,即(PC)=X+2, 这样在执行完该指令后,会自动跳转到X+2+A的地址继续执行。 8.基址寻址 基址寻址是指将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(BR)+A。 其中基址寄存器既可采用专用寄存器,又可采用通用寄存器。(基址寄存器可采用隐式的和显式的两种。所谓隐式,是在计算机内专门设有一个基址寄存器BR,使用时用户不必明显指出该基址寄存器,只需由指令的寻址特征位反映出基址寻址即可。显式是在一组通用寄存器里,由用户明确指出哪个寄存器作为基址寄存器) 基址寻址的优点是可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);用户不必考虑自己的程序存于主存的哪个空间区域,因此有利于多道程序设计,并可用于编制浮动程序,但偏移量(形式地址A)的位数较短。 基址寻址在多道程序中极为有用。用户可不必考虑自己的程序存于主存的哪一空间区域,完全可由OS或管理程序根据主存的使用情况,赋予基址寄存器内一个初始值(即基地址),便可将用户程序的逻辑地址转化为主存的物理地址(实际地址),把用户程序安置于主存的某一空间区域 9.变址寻址 变址寻址是指有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容之和,即EA=(IX)+A, 其中IX为变址寄存器(专用),也可用通用寄存器作为变址寄存器。 堆栈是存储器(或专用寄存器组)中一块特定的、按后进先出原则管理的存储区,该存储区中读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。堆栈可分为硬堆栈与软堆栈两种。 寄存器堆栈又称硬堆栈。寄存器堆栈的成本高,不适合做大容量的堆栈;而从主存中划出的一段区域来做堆栈是最常用的方法,这种堆栈称软堆栈。 在采用堆栈结构的计算机系统中,大部分指令表面上都表现为无操作数指令的形式,因为操作数地址都隐含使用了SP。通常,在读/写堆栈中的一个单元的前后都伴有自动完成对SP内容的增量或减量操作 寻址方式、有效地址、访存次数(不包含为取本条指令而做的访存)的总结: 各常见指令寻址方式的特点和适用情况: 立即寻址操作数获取便捷,通常用于给寄存器赋初值 直接寻址相对于立即寻址,缩短了指令长度 间接寻址扩大了寻址范围,便于编制程序,易于完成子程序返回 寄存器寻址的指令字较短,指令执行速度较快 寄存器间接寻址扩大了寻址范围 基址寻址扩大了操作数寻址范围,适用于多道程序设计,常用于为程序或数据分配存储空间 变址寻址主要用于处理数组问题,适合编制循环程序 相对寻址用于控制程序的执行顺序、转移等 4.2.3 X86汇编指令入门 1.相关寄存器 X86处理器中有8个32位的通用寄存器,各寄存器及说明如图: (1)寻址模式 以mov指令为例,mov用于在内存和寄存器之间移动数据,它有两个参数:第一个是目的地址,第二个是源地址。 mov eax,[ebx] ;将ebx值指示的内存地址中的4字节传送到eax mov [var],ebx ;将ebx值传送到var的值指示的内存地址中 mov eax,[esi-4] ;将esi-4值指示的内存地址中的4字节传送到eax mov [esi+eax],cl ;将cl值传送到esi+eax值指示的内存地址中 mov edx,[esi+4*ebx] ;将esi+4*ebx值指示的内存中的4字节传送到edx(2)数据类型长度规定 在汇编语言中声明内存大小时,一般显式地使用DB(D表示Data,B表示Byte)、DW(W表示Word,2Bytes)和DD(Double Word,4Bytes)。X86提供了三个指示规则标记,分别为BYTE PTR、WORD PTR和DWORD PTR,如: mov byte ptr [ebx],2 ;将2以单字节形式传送到ebx值指示的内存地址中 mov word ptr [ebx],2 ;将2以双字节形式传送到ebx值指示的内存地址中 mov dword ptr [ebx],2 ;将2以四字节形式传送到ebx值指示的内存地址中 3.常用指令汇编指令通常可分为数据传送指令、逻辑计算指令和控制流指令。以下用于操作数的标记分别表示寄存器、内存和常数: < reg >:表示任意寄存器,若其后带有数字,则指定其位数,如< reg32 >表示32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、ESP或EBP);< reg16 >表示16位寄存器(AX、BX、CX或DX);< reg8 >表示8位寄存器(AH、AL、BH、BL、CH、CL、DH、DL) < mem >:表示内存地址(如[eax]、[var+4]或dword ptr[eax+ebx]) < con >:表示8位、16位或32位常数。如< con8 >表示8位常数; X86中的指令机器码长度为1字节,对同一指令的不同用途有多种编码方式,如: mov ax, ;机器码为B8H mov al, ;机器码为B0H mov /, ;机器码为89H mov ,/ ;机器码为8AH mov ,/ ;机器码为8BH(1)数据传送指令 mov指令: mov指令将第二个操作数(寄存器的内容、内存中的内容或常数值)复制到第一个操作数(寄存器或内存)。但不能用于直接从内存复制到内存。 语法: mov , mov , mov , mov , mov , 例: mov eax,ebx ;将ebx值复制到eax mov byte ptr [var],5 ;将5保存到var值指示的内存地址的一字节中push指令: push指令将操作数压入内存的栈,常用于函数调用。ESP是栈顶,压栈前先将ESP值减4(栈增长方向与内存地址增长方向相反),然后将操作数压入ESP指示的地址。 语法: push push push 例:(栈中元素固定为32位) push eax ;将eax值压栈 push [var] ;将var值指示的内存地址的4字节值压栈pop指令: 出栈前先将ESP指示的地址中的内容出栈,然后将ESP值+4 pop edi ;弹出栈顶元素送到edi pop [ebx] ;弹出栈顶元素送到ebx值指示的内存地址的4字节中(2)算术与逻辑运算指令 add/sub指令: add指令将两个操作数相加,相加的结果保存到第一个操作数中。sub指令用于两个操作数相减,相减的结果保存到第一个操作数中。 语法: add , / sub , add , / sub , add , / sub , add , / sub , add , / sub , 例: sub eax,10 ;eax |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |