计算机的运算方法
无符号数和有符号数
无符号数
定义:指的是没有正负号的数据,只有数值部分。将其转为二进制,用寄存器或存储器按照规定长度保存到计算机中
寄存器的长度(位数)可以反映出无符号数的表示范围。比如寄存器8位,则表示范围为00000000-11111111(0-255)
有符号数
定义:指的是有正负号的数据,包含符号部分+数值部分
机器数与和真值
机器数:保存在计算机中的数据,将符号进行数字化
真值:平时用的数据,带符号的数
保存要素:数字的符号+小数点的位置+数值
- 小数点在符号位后面:小数定点机
- 小数点在数值位后面:整数定点机
原码表示法
定义:n为数值部分的位数,x为真值,保存在计算机中的数据 特点:带符号的绝对值表示
- 整数:用逗号将符号位和数值位分开
x=+1110 ->原码[x]原=0,1110,
x=-1110->源码[x]原=2^4+1110=1,1110
- 小数:用小数点将符号位和数值位分开
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=-1100
求x=0的原码
假设x=+0.0000->0.0000
假设x=-0.0000->1.0000
假设x=+0->0,0000
假设x=-0->1,0000
机器数表示的范围与其字长有关
补码表示法
补的概念:将减法转换为加法,+9是-3以12为模的补数
- 一个负数加上模极为该负数的补数
- 一个正数和负数互为补数的时候,绝对值之后为模数
- 正数的补数为其本身
- 当真值为负数的时候,补码可以用 原码除符号位外的每位取反,末位加1获得
- 整数
- 小数
已知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
反码表示法
- 整数
- 小数
已知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为尾数的基值)
表示的范围:
上溢: 阶码>最大阶码
下溢:阶码<最小阶码,按机器0处理
定点运算
移位运算
算术移位:有符号数的移位
逻辑移位:无符号数的移位
- 逻辑左移:低位添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功能:对指令进行解释
- 控制器
- 取指令
- 分析指令
- 执行指令,发出各种操作命令,控制部件完成指定的操作
- 控制程序的输入以及结果的输出
- 总线的管理
- 处理异常情况和特殊请求
- 运算器
- 实现算术运算
- 实现逻辑运算
结构
cpu通过总线(数据/地址/控制总线)和计算机的其他部分进行通信 指令控制:PC+IR 操作控制+时间控制:CU+时序电路 数据加工:ALU+寄存器 处理中断:中断系统
寄存器
用户可见寄存器
- 通用寄存器,存放操作数(也可以作为某种寻址方式所需的专用寄存器)
- 数据寄存器,存放操作数,满足各种数据类型,2个寄存器拼接存放双倍字长数据
- 地址寄存器,存放地址,其位数应满足最大的地址范围(用于特殊的寻址方式 段基值 栈指针)
- 条件码寄存器,存放条件码,可作程序分支依据
控制和状态寄存器
- 控制寄存器,PC->MAR->M->MDR->IR,控制cpu操作,其中MAR,MDR,IR用户不可见,PC用户可见
- 状态寄存器,存放条件码,PSW寄存器(程序状态字)
控制单元(控制器)
功能
微操作命令
概念:在指令解释过程中由控制单元发出的指令,该指令完成的动作和整条指令要完成的功能相比要小得多
指令完成的工作周期:
- 取指周期(给定的内存单元取出指令)
- 间址周期(指令寻址方式中使用了间接寻址,利用间址周期从给定的内存单元中取出操作数的地址,放到指令的地址码部分)
- 执行周期(完成对操作数的读取和操作)
- 中断周期(有中断请求,cpu要进行中断响应:保存程序断点,形成中断程序的入口地址)
取址周期:
- 指令从内存单元中取出需要指令的地址,这个地址保存在程序计数器(PC寄存器)
- PC把指令地址给MAR,通过MAR把信号给地址总线,最后送到存储器中
- 控制单元向存储器发出读命令,读出的数据由存储器通过数据总线送给MDR,最后送到IR(指令寄存器)
- 将指令寄存器中的操作码送给控制单元,完成译码任务(确定指令要做什么操作,其由指令的操作码决定)
- 对PC进行更新,对PC+1将结果保存到PC中
间址周期
把操作数的地址从存储器中取出,放入指令寄存器中所保存的指令的地址码部分
- 将指令形式地址传送给MAR,再传给地址总线,最终送到存储器的地址线上
- 控制器发出将IR地址码部分送给MAR的控制信号
- 控制器向存储器发出读操作命令
- 存储器接收到地址和读操作命令以后,在指定的内存单元中,将操作数的地址取出通过数据总线传输给MDR
- 被取出的操作数地址放入IR寄存器的地址码部分(操作数的物理地址/操作数所在的存储单元的地址)
执行周期
非访存类指令:
- CLA 清理 ACC,0送给ACC寄存器
- COM 取反,ACC中的内容按位取出
- SHR 算术右移,数据右移,最左侧符号位空出,再将符号位写入
- CSL 循环左移,
- STP 停机指令,停机标志置为0
访存类指令:
- 加法指令 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
转移指令
- 无条件转移 JMP X
- 把指令寄存器中的指令的地址码部分送入PC
- 条件转移 BAN X
- 上一次计算结果为负数则进行转移,否则不转移
- 指令寄存器中的指令的地址码部分送入PC
周期:
- 非访存类:取址周期+执行周期
- 直接访存:取址周期+执行周期
- 间接访存:取址周期+间址周期+执行周期
- 转移类:取址周期+执行周期
- 间接转移类:取址周期+间址周期+执行周期
中断周期
保存断点+形成中断服务程序的入口地址+关中断
程序断点存入0地址
1)保存断点:
- 将
0送给MAR - 控制单元向存储器发出写命令
- 将PC的内容保存到MDR
- MDR内容保存到MAR指定的内存单元中
2)形成中断服务程序的入口地址:
- 将向量地址保存到PC中
3)关中断:不允许发生中断
- 将
0送到中断允许的触发器中
程序断点进栈
- sp的内容减1,形成新的站点地址,送入MAR
- 控制单元向存储器发出写命令
- pc送入MDR
- mdr内容保存到MAR指定的内存单元中
- 将向量地址保存到PC中
- 将
0送到中断允许的触发器中