计算机体系结构:4.指令系统

本文详细阐述了指令设计中的关键要素,包括操作码的长度和类型、地址字段的选择、一到多地址指令结构,以及MIPS处理器中的寻址方式、数据表示和MIPS汇编语言实例。特别关注了RISC风格的MIPS指令格式,如寄存器、立即数和相对寻址的使用。
摘要由CSDN通过智能技术生成

一条指令必须明显或隐含包含的信息:

  1. 操作码:指定操作类型

    (操作码长度:固定/可变)

  2. 源操作数参照:一个或多个源操作数所在的地址

    (操作数来源:主(虚)存、寄存器、I/O端口、指令本身)

  3. 结果值参照:产生的结果存放何处(目的操作数)

    (结果地址:主(虚)存、寄存器、I/O端口)

  4. 下一条指令地址:下条指令存放何处

    (下条指令地址:主(虚)存,正常情况隐含在PC中,改变顺序时由指令给出)

在这里插入图片描述

图1 一条指令所涉及的问题

4.1 指令格式的设计

尽量短、有足够的操作码位数、唯一解释、指令字长是字节的整数倍、合理地选择地址字段的个数、指令尽量规整

4.1.1 指令中的地址

零地址指令:

  1. 无需操作数 如:空操作/停机等
  2. 所需操作数为默认的 如:堆栈/累加器

一地址指令:

其地址既是操作数的地址,也是结果的地址

  1. 单目运算:如取反、取负等
  2. 双目运算:另一操作数为默认的 如累加器等

二地址指令(最常用)

分别存放在双目运算中两个操作数,并将其中一个地址作为结果的地址

形式:

OPA1A2

三地址指令(RISC风格)

分别作为双目运算中两个源操作数的地址和一个结果的地址

形式:

OPA1A2A3

多地址指令

用于成批数据处理的指令,如:向量、矩阵等运算的SIMD指令

4.1.2 操作数类型和存储方式
  • 地址(指针)

    被看成无符号整数,用来参加运算以确定主(虚)存地址

  • 数值数据

    定点数(整数):一般用二进制补码表示

    浮点数(实数):大多数机器采用IEEE 754标准

    十进制数:用NBCD码表示,压缩、非压缩(汇编程序设计时使用)

  • 位、位串、字符和字符串

    用来表示文本、声音和图像等,32bits是一个字,8bits是一个字节

  • 逻辑(布尔)数据

    按位操作(0-假、1-真)

4.1.3 寻址方式

有效地址的含义:操作数所在存储单元的地址(可能是逻辑地址或物理地址),可通过指令的寻址方式和地址码计算得到。

假设A=地址字段值,R=寄存器编号,EA=有效地址,(X)=X中的内容

OPRA
方式算法优点缺点
立即操作数=A指令执行速度快操作数幅值有限
直接EA=A有效地址计算简单地址范围有限
间接EA=(A)有效地址范围大多次存储期访问
寄存器操作数=®指令执行快,指令短地址范围有限
寄存器间接EA=®地址范围大额外存储器访问
偏移EA=A+®灵活复杂
堆栈EA=栈顶指令短应用有限

偏移:将直接方式和寄存器间接结合起来,有相对、基址、变址三种。R给出一个固定的地址,通过变换A则可以访问不同的地址,例如数组里面,R可以明显给出,也可以隐含给出,可以为PC、基址寄存器B、变址寄存器I

  • 相对寻址:EA=A+(PC) 相对于当前指令处位移量为A的单元
  • 基址寻址:EA=A+(B) 相对于基址(B)处位移量为A的单元
  • 变址寻址:EA=A+(I) 相对于首址A位移量为(I)的单元

4 .2 程序的机器级表示

4.2.1 MIPS指令中数据的表示
名称编号功能被调用保存
zero0恒为0
at1为汇编程序保留
v0~v12~3过程调用参数返回值
a0~a34~7过程调用参数
t0~t78~15临时变量,在被调用过程无需保留
s0~s716~23在被调用过程需保留
t8~t924~25其他临时变量
k0~k126~27为OS保留
gp28全局指针
sp29栈指针
fp30帧指针
ra31过程调用返回地址

​ 寄存器的汇编表示以$符号开始,可以使用名称(如$a0),也可以使用编号(如$4)。

​ MIPS还提供了32个32位的单精度浮点寄存器,用汇编符号$f0~$f31表示。它们可配对成16个64位浮点寄存器,用来表示64位双精度浮点数。

​ 另外,MIPS中提供了两个乘商寄存器Hi和Lo,它们无须在指令中显示给出。用32位的Hi和Lo可实现64位寄存器。乘法时,Hi和Lo联合用来存放64位成绩;执行除法运算时,最终的余数存放在Hi中,商在Lo中

​ MIPS中用程序计数器PC指出下条指令的地址。

​ MIPS的存储器按字节编址,大端存放,只能通过load/store指令访问存储器数据。

​ 对于立即数,指令中给出的位数为16位,指令执行是,需要将其进行符号扩展或0扩展,变成32位操作数后才能参加运算。

​ 数据要求按边界对齐(地址是4的倍数)

4.2.2 MIPS 指令格式和寻址方式

​ MIPS是典型的RISC处理器,采用32位定长指令字,操作码字段也是固定长度,没有专门的寻址方式手段,由指令格式确定各操作数的寻址方式

在这里插入图片描述

图2 MIPS指令格式

R-型指令属于RR型指令,即操作数和结果都存放在寄存器中,这里R表示寄存器(register)。其操作码OP为000000,操作类型由func字段指定。

  1. 若是双目运算类指令,则rs和rt的内容分别作为第一和第二源操作数,结果送rd;

  2. 若是移位指令,则对rt的内容进行移位,结果送rd,所移位数由shamt字段给出。

只使用寄存器寻址。

I-型指令是立即数型指令,这里I表示立即数(immediate operand)。

  1. 若是双目运算类指令,则将rs的内容和离结束分别作为第一和第二源操作数,结果送rt。
  2. 是load/store 指令,则将rs的内容和立即数符号扩展后的内容相加作为内存单元地址,load指令将内存单元内容送rt,store指令将rt内容送内存单元;
  3. 若是条件转移(分支)指令,则对rs和rt内容进行指定的运算,根据运算的结果,决定是否转到转移目标地址处执行,转移目标地址通过相对寻址方式得到,即将PC的内容和立即数符号扩展后的内容相加后得到

4中寻址方式:寄存器、立即数、相对、基址或变址寻址

J-型指令主要是无条件跳转指令。指令中给出的是26位直接地址,只要将当前PC的高4位拼上26位直接地址,最后添两个0就可以得到32位的跳转目标地址。寻址方式为变通的直接寻址。

寻址方式

  1. R-format:rs
  2. I-format: immed
  3. Base或Index(基址或变址): rs(register)+immed
  4. PC-relative(相对寻址):PC+4+immed (+4意思是执行了,进入下一指令)
  5. J-format(伪直接寻址): M e m o r y = P C 31 ∼ 28 ∣ ∣ a d d r . ∣ ∣ 00 Memory=PC_{31\sim28}||addr.||00 Memory=PC3128∣∣addr.∣∣00,末尾两个0保证是4的倍数
4.2.3 MIPS汇编语言(P105)
类别指令名称汇编举例含义备注
算术访问load wordadd  $s1,$s2,$s3$s1=$s2+$s3三个寄存器操作数
subtractsub  $s1,$s2,$s3$s1=$s2-$s3三个寄存器操作数
存储访问load wordlw  $s1,100($s2)$s1=Memory[$s2+100]从内存取一个字到寄存器
store wordsw  $s1,100($s2)Memory[$s2+100]=$s1从寄存器取一个字到内存
逻辑运算andand  $s1,$s2,$s3$s1=$s2 & $s3三个寄存器操作数,按位与
oror  $s1,$s2,$s3$s1=$s2|$s3三个寄存器操作数,按位或
nornor  $s1,$s2,$s3$s1=~($s2|$s3)三个寄存器操作数,按位或非
and immediateandi  $s1,$s2,100$s1=$s2 & 100寄存器和常数,按位与
or immediateori  $s1,$s2,100$s1=$s2|100寄存器和常数了,按位或
shift left logicalsll  $s1,$s2,10$s1=$s2<<10按常数对寄存器逻辑左移
shift right logicalsrl  $s1,$s2,10$s1=$s2>>10按常数对寄存器逻辑右移
条件分支branch on equalbeq  $s1,$s2,Lif($s1==$s2)go to L相等则转移
branch on not equalbne  $s1,$s2,Lif($s1!=$s2) go to L不相等则转移
set on less thanslt  $s1,$s2,$s3if($s2<$s3) $s1=1;
else $s1=0
小于则置1,否则位0,用于后续指令判0
set on less than immediateslt   $s1,$s2,100if($s1< 100)$s1=1;
else $s1=0
小于常数则置1,否则为0,用于后续指令判0
无条件跳转jumpj  Lgo to L直接跳转至目标地址
jump registerjr  $rago to $ra过程返回
jump and linkjal  L$ra=PC+4;go to L过程调用
  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值