体系结构-指令集结构



一个完整的指令集结构包括

Instuction Fetch 
Instuction Decode
Operand Fetch
Excute
Result Store
Next Instruction

我们必须解决的问题包括:

  1. 指令的编码方式(即如何编码)
  2. 操作数和操作结构的存放位置
    1. 存放位置
    2. 多少个现实操作数
    3. 存储器操作数如何定位
    4. 那些操作数可以或不可以放到存储器中
  3. 数据的类型和大小
  4. 支持哪些操作
  5. 下一条指令的地址
    1. jumps,conditions,branches
    2. fetch-decode-execute is implicit
  • 有关ISA的若干问题

    • 分类

      • stack   0 address ADD tos<---tos+next
        Accumulator 1 address ADD A  acc<---acc+mem[A]
        1+x address ADDX A acc<---acc+mem[A+x]
        Register-memory 2 address ADD A B EA[A]<---EA[A]
        3 address add A B C EA[A]<---EA[B]+EA[C]
        Load-Store 3 address add  A B C A<---B+C
        load A B A<---mem[B]
      • 通用寄存器型(R-M   R-R)占主导地位
        • 寄存器比存储器更快
        • 对便一起来说寄存器更容易使用
      • 尾端问题
          • little endian,big endian,在一个字内部的字节顺序问题,例如在地址xxx00指定了一个字(int),存储器中从xxx00连续存放ffff0000,有两种表示方式:

            • 小端方式:xxx00位置是字的最低字节,数值为0000ffff。x86,dec vax,windows NT
            • 大端方式:xxx00位置是字的最高字节,数值为ffff0000。IBM 360/370,Motorola,MIPS
      • 对齐问题
        • 对一个s字节的对象访问,地址为A,如果A mod s ==0,则是边界对齐
        • 这是由于存储器本身的读写要求的。没有对其的对象可能会导致存储器两次读写。
      • 基准测试结果:
        • 偏移寻址、立即数寻址、寄存器寻址方式,其使用频度为75%~99%
        • 偏移字段大小为12~16bits,可满足75%~99%的需求
        • 立即数字段大小为8~16bits,可满足50%~80%的需求



操作数类型和操作数表示

类型:是面向应用、面向软件系统处理的各种操作数据类型。整型、浮点型、字符、字符串、向量类型;类型由操作码确定。

表示:操作数在机器中的表示,硬件结构能够识别,指令系统可以直接使用的表示格式。整型(原码、补码、反码),浮点(IEE 754标准),十进制(BCD码,二进制十进制表示)


  • ISA研究的问题

    • ISA的分类
    • 操作数部分
      • 理解存储器地址(尾端+对齐问题)
      • 寻址方式
      • 操作数的类型、表示和大小问题
    • 操作码部分
      • 支持哪些类型的操作
    • 指令格式
  • 研究的方法:基于统计的方法
  • 结论:
    • 常用的寻址方式:立即数、偏移寻址、寄存器寻址
    • 偏移字段的大小:12~16bits
    • 立即数字段的大小8~16bits
    • 操作数大小:单字、双字的数据访问频率高;64字长更具一般性
  • ISA的功能设计
    • 任务:确定硬件支持哪些操作
    • 方法:统计
    • 类型:CICS和RISC
  • 控制类指令
    • 条件分支最常见
    • 寻址方式:pc-relative和偏移地址至少8位;即动态的转移地址方式
  • CISC
    • 强化指令功能,减少程序中指令条数


RISC计算机指令集结构的功能设计

  • 特点:

    • 大多数指令在单周期内完成
    • 采用load、store结构
    • 硬布线控制逻辑
    • 减少指令和寻址方式种类
    • 固定的指令格式
    • 注重代码的优化
    • 面向寄存器结构
    • 重视流水线的执行效率--》尽量减少断流
    • 重视优化编译技术
  • RISC为了使流水线高效执行
    • 简单而统一的指令译码
    • 大部分指令可以单周期完成
    • 只有load/store指令访存
    • 简单寻址技术
    • 采用load延迟技术
  • 为了便于优化编译产生优化代码
    • 三地址指令格式
    • 较多适量的寄存器
    • 对称的指令格式
  • RISC的关键技术
    • 延迟转移技术
    • 指令取消技术
    • 重叠寄存器窗口技术
      • 处理器中设置多个寄存器堆,并划分多个窗口
      • 每个过程使用其中相邻的三个窗口和一个公共的窗口
      • 一个与前一个过程公用;一个与下一个过程公用;一个作为局部寄存器
    • 指令调整技术
    • 硬件为主,固件为辅
  • 频率较高的指令:load,store,add,subtract,move register-register,and,shift,compare equal,compare not equal,branch,jump,call,return
  • 控制类指令:conditional branch,jump,procedure calls,procedure returns
  • 控制类指令的寻址方式:pc-relative
    • 编译时不知道转移地址,程序执行时动态确定
    • 转移地址放到某一寄存器中

  • 指令编码方式

    • 长度可变
    • 长度固定
    • 混合
  • MIPS寻址方式/指令格式(所有指令都是32bit)

    • 寄存器直接寻址

    • 立即数寻址
    • 基址寻址
    • pc相对寻址
    • 寄存器间接寻址


现代编译技术与计算机体系结构设计

  • ISA设计需要了解的有挂compiler的问题

    • 如何分配变量

      • 高级语言分配数据的区域

        • stack

          • 用来分配局部变量;用来存储活动记录(call和return),工作堆栈指针访问其中的内容
        • global data area
          • 用来分配被静态说明的对象,如常亮和全局变量、其中数组和其他聚集类型的数据结构比例大。
        • heap
          • 分配动态对象,用指针访问,通常不是标量。全局变量和堆变量因为存在别名问题而无法分配寄存器
    • 如何寻址变量
    • 需要多少寄存器
    • 优化技术对指令使用频率的影响
    • 使用哪些控制结构
  • MIPS指令集结构
    • MIPS的寄存器

      • 32个64bit通用寄存器(GPRS)

        • r0,r1,...,r31
        • 整数寄存器
        • r0 = 0
      • 32个64bit浮点寄存器(FPRS)
        • f0,f1,...,f31
        • 用来存放32个单精度浮点数(32bit),也可以用来存放32个双精度浮点数(64bit)
        • 存放单精度数时,只用了FPR的一半;
      • 一些特殊寄存器
        • 可以与通用寄存器交换数据
        • 浮点状态寄存器保存浮点操作的结果
    • MIPS的数据表示
      • 整数

        • 字节8bit ;半字16bit;字32bit;双字64bit
        • 浮点数 单精度(32bit),双精度(64bit)
        • 字节、半字、字被装入64位寄存器时,零扩展或符号扩展。
    • 寻址方式
      • 立即数寻址和偏移量寻址,其立即数、偏移量字段都是16bit
      • 寄存器间接寻址是通过把0作为偏移量来实现的
      • 16bit绝对寻址是通过把R0作为基址寄存器来实现
      • mips的存储器按字节寻址,地址为64bit
      • 所有的存储器访问都是边界对齐
    • 指令格式
      • 寻址方式编码到操作码中
      • 所有指令都是32bit
      • 操作码占6bit
      • 3中指令格式
        • I类指令

          • ,立即数字段为16bit,用于提供立即数和偏移量
          • load指令
            访存有效地址:Regs[rs]+immediate

            从存储器取来的数据放入寄存器rt中
            store指令 访存有效地址:Regs[rs]+immediate 从存储器取来的数据放入寄存器rt中
            立即数指令 Regs[rt]<---Regs[rs] op immediate
            分支指令 目标转移地址:Regs[rs]+immediate rt无用
            寄存器跳转、寄存器跳转并连接 转移目标地址为Regs[rs]
        • R类指令
          • 包括ALU指令,专用寄存器读/写指令,move指令
          • ALU指令     Regs[rd]<---Regs[rs] func Regs[rt],func为具体的运算操作编码
        • J类指令
          • 包括跳转指令、跳转并连接指令、自陷指令、异常返回指令;
          • 指令字的低26位是偏移量,左移两位,与pc值相加,形成跳转的地址。
    • 指令的分类(load/store,ALU操作,分支与跳转,浮点操作)
      • 符号的意义

        • x<---ny:从y传送n位到x
        • x,y<---z:把z传送到x和y
        • 下标:表示字段中具体的位;对于指令和数字,按从最高位到最低位(左--》右)顺序依次编号,最高位为第0位,次高位为第1位。
          • 下表可以是数字或者一个范围;Regs[R4]0,即R4的符号位;Regs[R4]56...63的最低位
        • Mem:表示主存,按字节寻址
        • 上标:用于表示对字段进行复制的次数;032一个32位全0的字段
        • 符号##,用于连个字段的拼接,并且可以出现在数据传送的任何一边。eg,R8、R10为64位的寄存器,则Regs[R8]32..63<---32(Mem[Regs[R6]]0)24##Mem[Regs[R6]];表示的是,以R6的内容作为地址访问内存,得到的字节按符号位扩展的32位后存入R8的低32位,R8的高32位(即Regs[R8]0..31)不变。
      • LD R2,20(R3) 装入双字 Regs[R2]<---64(Mem[20+Regs[R3]])
        LW R2,40(R3) 装入字 Regs[R2]<---64(Mem[40+Regs[R3]]0)32 ## Mem[40+Regs[R3]]
        LB R2,30(R3) 装入字节 Regs[R2]<---64(Mem[30+Regs[R3]]0)56 ## Mem[40+Regs[R3]]
        LBU R2,40(R3) 装入无符号字节 Regs[R2]<---64056 ## Mem[40+Regs[R3]]
        LH R2,30(R3) 装入半字 Regs[R2]<---64(Mem[30+Regs[R3]]0)48 ## Mem[30+Regs[R3]]##Mem[31+Regs[R3]]
        L.S F2,60(R4) 装入半字 Regs[F2]<---64Mem[60+Regs[R4]] ## 032
        L.D F2,40(R3) 装入双精度浮点数 Regs[F2]<---64Mem[40+Regs[R3]]
        SD R4,300(R5) 保存双字 Mem[300+Regs[R5]]<---64Regs[R4]
        SW R4,300(R5) 保存字 Mem[300+Regs[R5]]<---32Regs[R4]
        S.S F2,40(R2) 保存单精度浮点数 Mem[40+Regs[R2]]<---32Regs[F2]0..31
        SH R5,502(R4) 保存半字 Mem[502+Regs[R4]]<---16Regs[R5]48..63
      • ALU指令
      • DADDU R1,R2,R3 无符号加  
        DADDIU R4,R5,R6 加无符号立即数  
        LUI R1,#4 把一个立即数装入到一个字的高16位 Regs[R1]<---032 ## 4 ## 016
        DSLL R1,R2,#5 逻辑左移 Regs[R1]<---Regs[R2]<<5
        DSLT R1,R2,R3 置小于
        if(Regs[R2]<Regs[R3]) then Regs[R1]<---1 else Regs[R1]<---0

      • 控制类指令
      • J name 跳转 PC36..63<---  name<<2
        JAL name 跳转并连接 Regs[R31]<-- PC+4;PC36..63<---name<<2;((PC+4)-227)<=neme<((PC+4)+227)
        JALR R3 寄存器跳转并连接 Regs[R31]<--- PC+4;PC<--Regs[R3]
        JR R5 寄存器跳转 PC<-- Regs[R5]
        BEQZ R4,name 等于零时分支 if(Regs[R4]==0) then PC<-- name;((PC+4)-217)<=name<((PC+4)+217)
        BNE R3,R4,name 不相等时分支 ((PC+4)-217)<= name < ((PC+4)+217)
        MOVZ R1,R2,R3 等于零时移动 if(Regs[R3]==0) then Regs[R1]<--Regs[R2]
      • 跳转指令(根据目标指令确定目标指令的方式不同以及是否跳转时连接,可以将跳转指令分为4类)
        • 目标地址的确定方式:把指令中的26位偏移量左移2位后,替换pc中的低28位;由指令中指定的一个寄存器来给出目标转移地址
        • 跳转的两种类型:简单跳转(把目标地址送入程序计数器);跳转并连接,将目标指令送入程序计数器,把返回地址(下一条)放入寄存器R31
      • 分支指令(跳转转移)
        • 分支指令指令的目标地址,由16位带符号偏移量左移两位后和pc相加决定。
        • 浮点条件分支指令:通过测试浮点状态寄存器来决定是否进行分支。
时间: 2024-08-25 17:18:09

体系结构-指令集结构的相关文章

计算机系统之一计算机系统漫游

作为一个程序员,如果深入了解这些组件是如何工作的,以及这些组件是如何影响程序的正确性和性能的,以此来提高自己的技能,可以推荐<深入理解计算机系统>这本书,本系列也是作者在参读了这本书后的一些个人理解和对概念的认识,也可以当做我的个人笔记,希望对你有所帮助 代码无国界 计算机系统是由硬件和软件组成的,他们共同工作来运行应用程序.虽然系统的具体实现方式随着时间的变化而变化,但是系统内在的概念却没有改变.所有的计算机系统否有类似的硬件和软件组件,而且都执行这相似的功能. 1 #include <

计算机概述

计算机的概述 计算机的组成: 计算机由硬件和软件组成,这连个部分共同协作完成程序的运行.这两部分如何协作?如何打交道?慢慢来. 信息的表示: 信息的表示说到底就是位加上下文.举个例子,比如一串二进制数11011101,在表示整数的时候他表示221,但是在Java的class文件中,它可能代表一个JVM指令. 程序的编译: 对于一个简单的C语言的程序来说,一般要经过预处理器,编译器,汇编器和连接前的处理,才能被翻译成一段可执行的二进制文件. 有一个简单的C语言程序: #include<stdio.

X86的孪生兄弟,Y86指令体系结构

X86的孪生兄弟,Y86指令体系结构 前言 为啥我的排版还是这么丑?排版如人啊,唉.说实话,上一章的内容我没搞明白,先不管了,先放一下,个人比较喜欢鲸吞的学习方式. 正文 Y86指令体系结构 Y86是一个指令体系结构(ISA),它是一个写这本书的作者出的指令集.目的是为了让我们更加清晰地了解ISA,就像在读编译原理的时候,作者会教你做个编译器是一样的道理. 我们学这个并不是为了设计指令集,因为这种工作几乎不可能发生在我们身上还是和编译原理一样,你的工作也不太可能写一个编译器,常遭一种语言,最多就

计算机体系结构总结

计算机体系结构 计算机体系结构是机器级程序员所看到的计算机的属性,即概念性结构与功能特性. 经典计算机体系结构概念的实质是计算机系统中软硬件界面的确定,其界面之上的是软件的功能,界面之下的是硬件和固件的功能. 广义(现代)的计算机体系结的构概念,它除了包括经典的计算机体系结构的概念范畴(指令集结构),还包括计算机组成和计算机实现的内容. 目录 计算机体系结构的功能属性 计算机体系结构的分类 计算机体系结构基本原理 计算机体系结构研究面临的挑战 计算机体系结构的功能属性 ●数据表示(硬件能直接辩认

CPU指令集

cpu作为一台电脑中的核心,它的作用是无法替代的.而cpu本身只是在块硅晶片上所集成的超大规模的集成电路,集成的晶体管数量可达到上亿个,是由非常先进复杂的制造工艺制造出来的,拥有相当高的科技含量. CPU指令集 - 概念 CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统.指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一.从现阶段的主流体系结构讲,指令集可分为复杂指令集和精简指令集两部分,而从具体运用看,如Intel的MMX(Mu

Oracle数据库体系结构总结

Oracle DB 体系结构 Oracle DB 服务器由一个 Oracle DB 以及一个或多个数据库实例组成.实例由内存结构和后台进程构成.每当启动一个实例时,都会分配一个称为系统全局区 (SGA) 的共享内存区,并启动后台进程. 数据库包括物理结构和逻辑结构.由于物理结构和逻辑结构是分开的,因此管理数据的物理存储时不会影响对逻辑存储结构的访问. Oracle的体系结构确保将逻辑结构从物理结构中抽象出来 Oracle DB 内存结构 Oracle DB 针对各种用途创建和使用内存结构.例如,

计算机网络10--计算机网络体系结构简介

本页内容 1.计算机网络体系结构的由来 2.分层网络体系结构 3.结语 1.计算机网络体系结构 计算机网络是一个非常复杂的系统,由很多器件,协议组成,要描述它可不容易.因此需要一种较好的体系结构来描述,实现它.分层网络体系结构是一个不错的选择. 2.分层网络体系结构 分层结构=network architecyure 由于几乎所有的网络都或多或少的采用了分层结构,因此我们所说的计算机网络体系结构就指的是分层结构. 那么,为什么会选择分层结构呢? 那是因为分层结构结构清晰,有利于识别像计算机网络这

计算机体系结构分类 - Flynn

体系结构类型 结构 关键特性 代表 单指令流单数据流SISD 控制部分:一个处 理 器:一个主存模块:一个 单处理器系统 单指令流多数据流SIMD 控制部分:一个处 理 器:多个主存模块:多个 各处理器以异步的形式执行同一条命令 并行处理机阵列处理机超级向量处理机 多指令流单数据流MISD 控制部分:多个处 理 器:一个主存模块:多个 被证明不可能至少不实际 目前没有,有文献称流水线计算机为此类 多指令流多数据流MIMD 控制部分:多个处 理 器:多个主存模块:多个 能够实现作业.任务.指令等各

285.软件体系结构评估概述

7.1.1 评估关注的质量属性 软件体系结构的设计是整个软件开发过程中关键的一步.对于当今世界上庞大而复杂的系统来说,如果没有一个合适的体系结构而要有一个成功的软件设计几乎是不可想象的. 不同类型的系统需要不同的体系结构,甚至一个系统的不同子系统也需要不同的体系结构.体系结构的选择是一个软件系统设计成败的关键.但是,怎样才能知道为软件系统所选用的体系结构是否恰当?如何确保按照所选用的体系结构能顺利地开发出成功的软件产品呢?要回答这些问题,需要使用专门的方法对软件体系结构进行分析和评估. 体系结构