计算机组成04

130 阅读9分钟

计算机的运算方法

无符号数和有符号数

无符号数

定义:指的是没有正负号的数据,只有数值部分。将其转为二进制,用寄存器或存储器按照规定长度保存到计算机中

寄存器的长度(位数)可以反映出无符号数的表示范围。比如寄存器8位,则表示范围为00000000-11111111(0-255)

有符号数

定义:指的是有正负号的数据,包含符号部分+数值部分

机器数与和真值

机器数:保存在计算机中的数据,将符号进行数字化

真值:平时用的数据,带符号的数

1711381200601.png 保存要素:数字的符号+小数点的位置+数值

  • 小数点在符号位后面:小数定点机
  • 小数点在数值位后面:整数定点机
原码表示法

定义:n为数值部分的位数,x为真值,保存在计算机中的数据 特点:带符号的绝对值表示

  • 整数:用逗号将符号位和数值位分开

1711384280906.png

x=+1110 ->原码[x]原=0,1110,
x=-1110->源码[x]原=2^4+1110=1,1110
  • 小数:用小数点将符号位和数值位分开

1711384559555.png

x=+0.1101 ->原码[x]原=0,1101
x=-0.1101->源码[x]原=1-(-0.1101)=1.1101
x=+0.1000000->原码[x]原=0.1000000
x=-0.1000000->原码[x]原=1.1000000

特点:简单直观,但做加法会出现问题

举例:

  • 机器数与和真值的转换
已知x的原码为1.0011,求x

x=1-1.0011=-0.0011

已知x的原码为1,1100,求x

x=2^4 - 1,1100=-1100x=0的原码
假设x=+0.0000->0.0000
假设x=-0.0000->1.0000
假设x=+0->0,0000
假设x=-0->1,0000

机器数表示的范围与其字长有关

补码表示法

补的概念:将减法转换为加法,+9是-3以12为模的补数

  1. 一个负数加上模极为该负数的补数
  2. 一个正数和负数互为补数的时候,绝对值之后为模数
  3. 正数的补数为其本身
  4. 当真值为负数的时候,补码可以用 原码除符号位外的每位取反,末位加1获得
  • 整数

1711397506547.png

  • 小数

1711397690037.png

已知x的补码为0.0001,求x
x=+0.00001
已知x的补码为1.0001,求x
x的原码为1.1111,所以x=-0.1111
已知x的补码为1,1110,求x
x的原码为1,0010,所以x=-0010
反码表示法
  • 整数

1711398275979.png

  • 小数

1711398366969.png

已知x的反码为0,1110,求x
x=+1110
已知x的反为1,1110,求x
x=x的反码-(2^5 -1)=1,1110 -11111=-0001
移码表示法

补码和移码只差一个符号位

x的移码=2^n+x

最小真值的移码全为0 作用:用移码表示浮点数的阶码能方便判断出浮点数的解码大小

数的浮点表示

表示:N=S * r^j(S为尾数,j为阶码,r为尾数的基值)

1711401935249.png 表示的范围: 上溢: 阶码>最大阶码 下溢:阶码<最小阶码,按机器0处理

1711401976277.png

定点运算

移位运算

1711404493836.jpg 算术移位:有符号数的移位 逻辑移位:无符号数的移位

  • 逻辑左移:低位添0,高位丢失
  • 逻辑右移:高位添0,低位丢失

加减法运算

符号位产生的进位自然丢掉 补码加减法运算公式:

整数加法:A[补]+B[补]=[A+B]补 (mod 2^(n+1))

小数加法:A[补]+B[补]=[A+B]补 (mod 2)

整数减法:[A-B]补=[A+(-B)]补=A[补]+(-B)[补] (mod 2^(n+1))

小数减法:[A-B]补=[A+(-B)]补=A[补]+(-B)[补] (mod 2)

指令系统

指令系统是软件和硬件之间的桥梁

机器指令

指令的格式:操作码 地址码 寻址方式

  • 操作码:指示要执行的操作,对什么样的数据进行操作
  • 地址码:指示操作数的位置
  • 寻址方式:指定了如何获取这些操作数

cpu

cpu结构

CPU功能:对指令进行解释

  1. 控制器
    • 取指令
    • 分析指令
    • 执行指令,发出各种操作命令,控制部件完成指定的操作
    • 控制程序的输入以及结果的输出
    • 总线的管理
    • 处理异常情况和特殊请求
  2. 运算器
    • 实现算术运算
    • 实现逻辑运算

结构

cpu通过总线(数据/地址/控制总线)和计算机的其他部分进行通信 指令控制:PC+IR 操作控制+时间控制:CU+时序电路 数据加工:ALU+寄存器 处理中断:中断系统

1711327195530.png

寄存器

用户可见寄存器

  1. 通用寄存器,存放操作数(也可以作为某种寻址方式所需的专用寄存器)
  2. 数据寄存器,存放操作数,满足各种数据类型,2个寄存器拼接存放双倍字长数据
  3. 地址寄存器,存放地址,其位数应满足最大的地址范围(用于特殊的寻址方式 段基值 栈指针)
  4. 条件码寄存器,存放条件码,可作程序分支依据

控制和状态寄存器

  1. 控制寄存器,PC->MAR->M->MDR->IR,控制cpu操作,其中MAR,MDR,IR用户不可见,PC用户可见
  2. 状态寄存器,存放条件码,PSW寄存器(程序状态字)

控制单元(控制器)

功能

微操作命令

概念:在指令解释过程中由控制单元发出的指令,该指令完成的动作和整条指令要完成的功能相比要小得多

指令完成的工作周期:

  1. 取指周期(给定的内存单元取出指令)
  2. 间址周期(指令寻址方式中使用了间接寻址,利用间址周期从给定的内存单元中取出操作数的地址,放到指令的地址码部分)
  3. 执行周期(完成对操作数的读取和操作)
  4. 中断周期(有中断请求,cpu要进行中断响应:保存程序断点,形成中断程序的入口地址)
取址周期:

1711319639720.png

  1. 指令从内存单元中取出需要指令的地址,这个地址保存在程序计数器(PC寄存器)
  2. PC把指令地址给MAR,通过MAR把信号给地址总线,最后送到存储器中
  3. 控制单元向存储器发出读命令,读出的数据由存储器通过数据总线送给MDR,最后送到IR(指令寄存器)
  4. 将指令寄存器中的操作码送给控制单元,完成译码任务(确定指令要做什么操作,其由指令的操作码决定)
  5. 对PC进行更新,对PC+1将结果保存到PC中
间址周期

1711320334809.png 把操作数的地址从存储器中取出,放入指令寄存器中所保存的指令的地址码部分

  1. 将指令形式地址传送给MAR,再传给地址总线,最终送到存储器的地址线上
  2. 控制器发出将IR地址码部分送给MAR的控制信号
  3. 控制器向存储器发出读操作命令
  4. 存储器接收到地址和读操作命令以后,在指定的内存单元中,将操作数的地址取出通过数据总线传输给MDR
  5. 被取出的操作数地址放入IR寄存器的地址码部分(操作数的物理地址/操作数所在的存储单元的地址)
执行周期

非访存类指令:

1711322602249.png

  • CLA 清理 ACC,0送给ACC寄存器
  • COM 取反,ACC中的内容按位取出
  • SHR 算术右移,数据右移,最左侧符号位空出,再将符号位写入
  • CSL 循环左移,
  • STP 停机指令,停机标志置为0

访存类指令:

1711324485369.png

image.png

  • 加法指令 ADD X(操作数之一的地址码),保存到ACC中
    • IR中的地址码部分传给MAR:在寄存器中读取操作数
    • 控制单元发出读命令
    • MAR寄存器中保存的地址作为访问存储器的地址,把给定单元中保存的数据取出放入MDR
    • ACC和MDR内容相加,将结果保存到ACC
  • 存数指令 STA X,把ACC中保存的数据传送到内存单元的给定地址
    • 指令寄存器中的地址码部分传给MAR
    • 控制单元向存储器发出写命令
    • ACC内容送入MDR寄存器,准备向内存单元进行写操作
    • 把MDR数据保存到给定的内存单元地址MAR中
  • 取数指令 LDA X,把内存单元中给定的地址的数据取出,保存在cpu的ACC寄存器中
    • IR的地址码部分给MAR
    • 控制单元向存储器发出读命令
    • 将MAR指定内存单元的内容读出并送到MDR
    • 把MDR内容保存到ACC

转移指令

1711325036867.png

  • 无条件转移 JMP X
    • 把指令寄存器中的指令的地址码部分送入PC
  • 条件转移 BAN X
    • 上一次计算结果为负数则进行转移,否则不转移
    • 指令寄存器中的指令的地址码部分送入PC

周期:

  • 非访存类:取址周期+执行周期
  • 直接访存:取址周期+执行周期
  • 间接访存:取址周期+间址周期+执行周期
  • 转移类:取址周期+执行周期
  • 间接转移类:取址周期+间址周期+执行周期
中断周期

保存断点+形成中断服务程序的入口地址+关中断

程序断点存入0地址

1)保存断点:

  1. 0送给MAR
  2. 控制单元向存储器发出写命令
  3. 将PC的内容保存到MDR
  4. MDR内容保存到MAR指定的内存单元中

2)形成中断服务程序的入口地址:

  1. 将向量地址保存到PC中

3)关中断:不允许发生中断

  1. 0送到中断允许的触发器中

程序断点进栈

  1. sp的内容减1,形成新的站点地址,送入MAR
  2. 控制单元向存储器发出写命令
  3. pc送入MDR
  4. mdr内容保存到MAR指定的内存单元中
  5. 将向量地址保存到PC中
  6. 0送到中断允许的触发器中