• 计算机组成与设计(二)——算术逻辑运


     算术运算

    计算机结构的简化模型(模型机)

     

    演示实例一

    add $8,$9,$10格式被Latex强行改变,不知道怎么办555。。。演示加法运算

    1、首先取指令,即得到得到指令的编码

    • 查指令编码表知opcode = 0,function = 0x20,shamt = 0(非移位指令)
    • opcode = 0说明这是一个R型指令(其实,所有的R型指令opcode都为0,所有opcode=0的指令也都是R型指令),根据指令操作数得到:rd = 8(目的寄存器),rs = 9(第一个源寄存器),rt=10(第二个源寄存器)

    2、进行运算

    CPU通过取指,就会把这条指令从内存中取出,并放入IR寄存器中,也就是指令编码的寄存器。指令译码将指令指定的寄存器(9号和10号)通过内部总线传到ALU,控制电路还会将ALU的输出通过总线传送到8号寄存器的输入。

    像这样两个源寄存器、一个目的寄存器的指令编码称为R型指令,还有:

    add  rd,rs,rt        //产生溢出时,会向控制器报告异常,由控制器进行相关联的处理
    addu  rd,rs,rt      //发生溢出时不会报告异常
    sub  rd,rs,rt        
    subu  rd,rs,rt

     演示实例二

    这里的源操作数都是寄存器,若有一个源操作数是立即数的话,就需要采用另一种指令——I型指令。

    add  $$21,$22,-50为例

    1、首先取指令,即得到得到指令的编码

    • 查指令编码表得到opcode = 8
    • 分析指令得到rs = 22(源寄存器编号),rt = 21(目的寄存器编号),immediate = -50(立即数)

    2、执行过程如图,与上面的类似

    这样的I型指令还有

    addi  rt,rs,imm         #R[rt] = R[rs] + SignExtImm(符号扩展)
    addiu  rt,rs,imm        #R[rt] = R[rs] + SignExtImm(符号扩展)

    逻辑运算指令

    R型

    and  rd,rs,rt         #R[rd] = R[rs] & R[st]
    or  rd,rs,rt         #R[rd] = R[rs] | R[rt]
    nor  rd,rs,rt         #R[rd] = ~(R[rs] | R[rd])

    I型

    andi rt,rs,imm        #R[rt] = R[rs] & ZeroExtImm(0扩展)        
    ori  rt,rs,imm        #R[rt] = R[rs] | ZeroExtImm(0扩展)

    注意:在算术运算中,立即数都是采用符号扩展,而在逻辑运算中,立即数采用0扩展,这也很容易理解,因为算术运算要保证数值的正确性,如符号扩展不会改变数值大小。

    参考链接:https://www.coursera.org/learn/jisuanji-zucheng/lecture/uYju6/301-suan-zhu-yun-suan-he-luo-ji-yun-suan

  • 相关阅读:
    Windows自动更新所需要连接的网站列表
    DFX 9.303 for QQMusic 2010
    在VPC 2007 SP1中安装Ubuntu 10.04 desktop (完成)
    穷人把钱存入银行,实际上是补贴富人。
    清理Windows右下角图标
    阿里镜像pull 加速器
    k8s 安装flannel网络插件
    k8s pull.sh
    kubeadm1.10.00 安装k8s集群
    虚拟机vmware centos7 扩展磁盘空间
  • 原文地址:https://www.cnblogs.com/lfri/p/10040377.html
Copyright © 2020-2023  润新知