计算机系统结构sw指令集,1.3.1 指令集体系结构:计算机体系结构的近距离审视(1)...

1.3.1 指令集体系结构:计算机体系结构的近距离审视(1)

我们在本书中用指令集体系结构(ISA)一词来指代程序员可以看到的实际指令集。ISA的作用相当于区分软件和硬件的界限。在下面对ISA的快速回顾中,将使用80x86、ARM和MIPS的例子从7个方面来介绍ISA。附录A和附录K更详细地介绍了这3种ISA。

(1) ISA分类。现今几乎所有的ISA都划分到通用寄存器体系结构中,在这种体系结构中,操作数或者是寄存器,或者是存储器地址。80x86有16个通用寄存器和16个通常存入浮点数据的寄存器,而MIPS则有32个通用寄存器和32个浮点寄存器(见表1-3)。这一类别有两种主流版本,一种是寄存器-存储器ISA,比如80x86,可以在许多指令中访问存储器;另一种是载入-存储ISA,比如ARM和MIPS,它们只能用载入或存储指令来访问存储器。所有最新ISA都采用载入-存储版本。

表1-3 MIPS寄存器和使用规范

名称

编号

用途

在调用之间

是否保留

$zero

0

常量值0

不可用

$at

1

为汇编程序保

存的临时寄存器

$v0–$v1

2~3

函数返回值和表达

式计算结果的值

$a0–$a3

4~7

实参

$t0–$t7

8~15

临时变量

$s0–$s7

16~23

已保存的临时变量

$t8–$t9

24~25

临时变量

$k0–$k1

26~27

为操作系统内核保留

$gp

28

全局指针

$sp

29

栈指针

$fp

30

帧指针

$ra

31

返回地址

* 除了32个通用寄存器(R0-R31)之外,MIPS还有32个浮点寄存器(F0-F31),可以保存一个32位单精度数或一个64位双精度数。

(2) 存储器寻址。几乎所有桌面计算机和服务器计算机(包括80x86、ARM和MIPS)都使用字节寻址来访问存储器操作数。有些体系结构(像ARM和MIPS)要求操作对象必须是对齐的。一个大小为s的对象,其字节地址为A,如果A mod s=0,则对这个对象的访问是对齐的。80x86(见附录图A-2)不需要对齐,但如果操作数是对齐的,访问速度通常会更快一些。

(3) 寻址模式。除了指定寄存器和常量操作数之外,寻址模式还指定了一个存储器对象的地址。MIPS寻址模式为:寄存器(寻址)、立即数(寻址)和位移量(寻址)。立即数寻址用于常数寻址,在位移量寻址模式中,将一个固定偏移量加到寄存器,得出存储器地址。80x86支持上述3种模式,再加上位移量的3种变化形式,即:无寄存器(绝对数)、两个寄存器(用位移量进行基址寻址)、两个寄存器,其中一个寄存器的内容乘以操作数的字节大小--用比例索引和位移量进行变址寻址。它与上述3种寻址方式类似,只是要减去位移量字段,加上寄存器间接寻址、基址寻址和变址寻址。ARM拥有3种MIPS寻址模式再加上相对PC(程序计数器)的寻址方式、两个寄存器之和,还有一种方式也是两个寄存器之和,但其中一个寄存器的内容要乘以操作数的字节大小。它还有自动递增寻址和自动递减寻址:计算得到的地址会被放在用于构造该地址的一个寄存器中,替代其中的内容。

(4) 操作数的类型和大小。和大多数ISA类似,80x86、ARM和MIPS支持的操作数大小为8位(ASCII字符)、16位(Unicode字符或半个字)、32位(整数或字)、64位(双字或长整型)以及IEEE 754浮点数,包括32位(单精度)和64位(双精度)。80x86还支持80位浮点(扩展双精度)。

(5) 操作指令。常见的操作类别为:数据传输指令、算术逻辑指令、控制指令(下面进行讨论)和浮点指令。MIPS是一种简单的、易于实现流水化的指令集体系结构,它是2011年采用RISC体系结构的代表。表1-4总结了MIPS ISA。80x86的操作指令集要丰富得多,大得多(参见附录K)。

表1-4 MIPS64中的部分指令

指令类型/操作码

指令含义

数据传输

在寄存器和存储器之间,或者在整数和

FP或特殊寄存器之间移动数据;唯一

的存储器寻址模式是16位位移量加上GPR的内容

LB、LBU、SB

载入字节、载入无符号字节、存储字节

(至/自整数寄存器)

LH、LHU、SH

载入半字、载入无符号半字、存储半字

(至/自整数寄存器)

LW、LWU、SW

载入字、载入无符号字、

存储字(至/自整数寄存器)

LD、SD

载入双字、存储双字(至/自整数寄存器)

L.S、L.D、S.S、S.D

载入SP浮点、载入DP浮点、

存储SP浮点、存储DP浮点

MFCO、MTCO

在GPR与特殊寄存器之间复制数据

MOV.S、MOV.D

将一个SP或DP FP寄存器复制到

另一个FP寄存器

MFC1、MTC1

在FP寄存器与整数寄存器之间复制32位

算术/逻辑

对GPR中的整数或逻辑数据进行操作;

带符号算术运算溢出时进行陷阱捕获

DADD、DADDI、DADDU、DADDIU

加,加立即数(所有立即数为16位);

有符号和无符号

DSUB、DSUBU

减,有符号和无符号

DMUL、DMULU、DDIV、

DDIVU、MADD

乘和除,有符号和无符号;乘-加;

所有运算的操作数和结果都是64位数值

AND、ANDI

与,和立即数相与

OR、ORI、XOR、XORI

或,和立即数求或,异或,和立即数求异或

LUI

载入高位立即数;将立即数载入到寄

存器的32~47位,然后进行符号扩展

DSLL、DSRL、DSRA、

DSLLV、DSRLV、DSRAV

移位:立即数形式(DS__)和变量

形式(DS__V);移位为左逻辑移位、

右逻辑移位、右算术移位

SLT、SLTI、SLTU、SLTIU

若小于操作数则置位、若小于立即数

则置位、有符号和无符号

控制

控制分支和跳转,相对于PC寄存器

或通过寄存器控制

BEQZ、BNEZ

GPR等于/不等于0时转移、相对于

PC+4偏移16位偏移量

BEQ、BNE

GPR相等/不相等时转移、相对于

PC+4转移16位偏移量

BC1T、BC1F

测试FP状态寄存器中的对比位,并

转移;相对于PC+4转移16位偏移量

MOVN、MOVZ

如果第三个GPR为负数/零,则将第一

个GPR复制到第二个GPR

J、JR

跳转至与PC+4偏移26位偏移量的位置

(J)、跳转至寄存器中的目标位置(JR)

(续)

指令类型/操作码

指令含义

JAL、JALR

跳转和链接:将PC+4保存在R31中,

目标为相对于PC(JAL)或寄存器(JALR)

TRAP

转移到操作系统的一个向量地址

ERET

从异常中返回用户代码,恢复用户模式

浮点

对DP和SP格式执行FP操作

ADD.D、ADD.S、ADD.PS

DP、SP数相加,一对SP数相加

SUB.D、SUB.S、SUB.PS

DP、SP数相减,一对SP数相减

MUL.D、MUL.S、MUL.PS

DP、SP浮点数相乘,一对SP数相乘

MADD.D、MADD.S、MADD.PS

DP、SP浮点数相乘加,一对SP数相乘加

DIV.D、DIV.S、DIV.PS

DP、SP浮点数相除,一对SP数相除

CVT._._

转换指令:CVT.x.y从类型x转换为类型y,

其中x和y为L(64位整数),W(32位整数),

D(DP)或S(SP)。两个操作数都是FRP

C._.D、C.__.S

DP和SP对比:“__”=LT,GT,LE,GE,

EQ,NE;在FP状态寄存器中置位

【责任编辑:book TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值