数制与码制
BCD码
- **8421码:**有权码,若两数之和大于9,需要加6修正;
- **余3码:**无权码,在8421码基础上加3;
- **2421码:**大于等于5的最高位为1;
定点数的编码表示
- 定点数:小数点位置固定;
- 机器数的定点表示:
- 定点小数
- 定点整数
原码
- 若字长为n+1,
- 原码整数的表示范围:x≤|2n-1|;
- 原码小数的表示范围:x≤|1-2-n|;
- ±0;
补码
- 负数补码转原码最右边的1及其右边是跟原码一致,左边与反码一致
- 0唯一;
- 加减均由加法实现,以节省硬件成本;
- 若字长为n+1,补码整数的表示范围:-2n ≤ x ≤ 2n-1;(比原码多-2n)
- 符号位可以和数值位一起参加运算;
- 由[X]补求[-X]补是将[X]补连同符号位一起取反,末位+1;
反码
- ±0;
移码
- 在补码的基础上将符号位取反;
- n位的移码,偏置量为2n-1
- 0唯一;
- 通常用于表示阶码,用于表示整数,不能表示定点小数;
- 移码=真值+偏置量(n位移码的偏置量为2n-1)
无符号整数的表示
- n位的无符号数表示范围为0~2n-1;
- 通常用于表示主存地址;
运算方法和运算电路
定点数的移位运算
算术移位
- 实质:不管正/负数,移位后其符号位均不变,且移位后都相当于对真值补0;
- 对象:有符号数;移位过程中符号位不变;
- 正数:[X]原=[X]补=[X]反=真值,空位补0;
- 负数:
- 原码:只要符号位不变,左移右移都补0;若舍弃位≠0,右移丢失精度,左移产生严重误差
- ==补码:左移补0,右移添1;==左移的前提:原最高有效位=原符号位
- 反码:左移右移都补1;
- 双符号位的移位操作只有低符号位需要参加移位操作;
逻辑移位
将操作数视为无符号数;
左移丢高位补0,右移丢低位补0;
循环移位
- 带进位标志位CF的循环移位(大循环):连同进位标志一起移位;
- 不带进位标志位的循环移位(小循环)
- 适合将数据的低字节数据和高字节数据互换;
定点数的加减运算
补码的加减法运算
- 减法:被减数与减数的机器负数相加。
- 符号位与数值位一起参与运算,结果的符号位也在运算中直接得出;
- 最终运算结果的高位丢弃,保留n+1位,运算结果为补码;
补码加减运算电路
-
Sub=1时,选择取反的线路;
-
**ZF:**零标志位;
-
**OF:**溢出标志;带符号位;OF=最高位产生的进位⊕次高位产生的进位
溢出标志位OF可采用两种方法得到
-
若两个加数的符号位相同,但与结果的符号位却相异,则溢出。
O F = A ‾ 7 B ‾ 7 C 7 + A 7 B 7 C ‾ 7 OF=\overline{A}_7\overline{B}_7C_7+A_7B_7\overline{C}_7 OF=A7B7C7+A7B7C7 -
若最高位上的进位和次高位上的进位不同,则溢出。
O F = F o u t ⊕ 次高位产生的进位 OF=F_{out}⊕次高位产生的进位 OF=Fout⊕次高位产生的进位
-
-
**SF:**符号标志;**带符号位;**SF=最高位的本位和
溢出判断方法
上溢:正+正=负;下溢:负+负=正
-
一位符号位(模2补码)
0无溢出,1有溢出
-
双符号位(模4补码)
00正数,无溢出;**01**正溢;10负溢;11负数,无溢出;
在存储时,只需一个符号位;运算时会复制一个符号位;
原码的加减法运算(了解)
定点数的乘除运算
定点数的乘法运算
原码一位乘法
-
符号位与数值位分开求
- 乘积符号:两数符号位异或;
- 数值部分:两数绝对值的乘积;
-
运算规则:自己多练练吧,不要放弃哦
答题时最终结果最好写为原码机器数
无符号数乘法运算电路
补码一位乘法(Booth算法)
定点数的除法运算
符号扩展
在符号位与数值位之间添新位
- 定点整数:
- 正数:添0;
- 负数:原码添0,反补添1;
- 定点小数:
- 正数:添0;
- 负数:原补添0,反码添1;
原码除法运算(不恢复余数法)
- 也称原码加减交替除法;
- 商符和商值分开进行,减法用补码加法实现,商符由俩符号位“异或”形成;
- 仅当最后一步不够减时,才恢复一次余数;
补码除法运算(加减交替法)
- 符号位和数值位一起运算,商符自然形成;
- 异号相除时,够减商0,不够减商1;
C语言中的整数类型及类型转换
-
**char:**8;**short:**16;**int、long、float:**32;
**longlong、double:**64;
-
C语言中定点整数用”补码“存储
有符号数和无符号数的转换
-
(short int)——>(unsigned short)
-
x为补码,y为无符号的二进制真值:
x=-4321,y=61215;
x=65535,y=-1;
不同字长整数之间的转换
大字节转小字节:高位截断,低位保留
数据的存储与排列
数据的”大端方式“和”小端方式“存储
"大端方式“存储:便于人阅读,最高位存在低地址
”小端方式“存储:便于机器阅读,最低位存在低地址
数据按”边界对齐“方式存储
- 每次访存只能读/写一个字;
- 空间换时间,提高取值令和取数的速度;
浮点数的表示和运算
浮点数的表示
浮点数的表示格式
N = ( − 1 ) s ∗ M ∗ R E N=(-1)^s *M*R^E N=(−1)s∗M∗RE
**s:**0/1,用来决定浮点数的符号;
**M:**尾数,二进制定点小数,一般用定点原码小数表示;
**E:**阶码/指数,二进制定点整数,用移码表示;
**R:**基数,隐含,通常为2
浮点数的表示范围
浮点数的规格化
左规:
右规:
IEEE754
-
尾数用隐藏位的原码表示,阶码用移码表示;
-
浮点数的格式
类型 数符 阶码 尾数数值 总位数 偏置值(十六进制) 偏置值(八进制) float 1 8 23 32 7FH 127 double 1 11 52 64 3FFH 1023 long double 1 15 64 80 3FFFH 16383 -
规格化的短浮点数的真值:(-1)s * 1.M * 2E-127
规格化的长浮点数的真值:(-1)s * 1.M * 2E-1023
浮点数的加减运算
-
转化格式
-
对阶
-
尾数求和
-
规格化
-
舍入
浮点数舍入的两种情况:①对阶 ②右规
-
溢出判断
寄存器
状态寄存器
-
运算器部件
-
状态寄存器用来存放两类信息:
-
体现当前指令执行结果的各种状态信息(条件码)
如有无进位(CF位)、有无溢出(OV位)、结果正负(SF位)、结果是否为零(ZF位)、奇偶标志位(P位)等;
-
存放控制信息(PSW程序状态字寄存器),
如允许中断(IF位)、跟踪标志(TF位)等。有些机器中将PSW称为标志寄存器FR(Flag Register)。
-
地址寄存器
-
存储器部件
-
用来保存当前CPU所访问的内存单元的地址。
由于在内存和CPU之间存在着操作速度上的差别,所以必须使用地址寄存器来保持地址信息,直到内存的读/写操作完成为止 。
程序计数器PC
- 存放下一条要执行的指令的地址,决定CPU指令执行顺序;
- PC的值会根据CPU在执行指令的过程中修改,或自增,或转移到程序的某处;
- 转移指令时,需要判别转移是否成功,若成功则修改为转移指令的目标地址,否则仍为PC+“1”
- PC的位数=MAR的位数;
- 汇编程序员可见;
中断寄存器
位于计算机主机
通用寄存器
指令字长=机器字长
指令寄存器IR
- 指令字长要存系统中最长的指令