Mengzelev's Blog

汇编语言复习笔记(一)

Word count: 897 / Reading time: 3 min
2018/08/29 Share

前言

本文为学校课程面向考试复习笔记,参考内容为老师的课堂讲义&深入理解计算机系统,依据这两者做了一些个人的整理便于复习。然而浪了一个假期在退课的边缘试探

信息的表示

数值的表示

  • 原码:这个很直观的
  • 反码:这个几乎不用的
  • 补码:$D’=R^n-D$ / 按位取反加1;
  • 移码:见浮点数

补码

  • 相当于取模操作
  • 着重区分基数的值(R)补码位表示的实际的值(D)
  • R与D的相对大小一致
  • $R=D+D_{w-1}\cdot 2^w$

C语言中的整数

  • 无符号数:在数后加U或u
  • 同时有无符号数和带符号数,编译器将带符号数强制转换为无符号数
  • int的最大正值为2147483647,最大负值为-2147483648
  • 比较时要特别注意是按什么规则进行的

数据的存放

  • 小端:最低有效字节存放在最小地址
  • 大端:最低有效字节存放在最大地址

浮点数

编码表示分3个字段

  • 符号s   0正1负
  • 阶码E   k位阶码字段exp
  • 尾数M   n位小数字段frac   表示的是a/2^n

float   k=8,n=23

double   k=11,n=52

三种表示情况

1.规格化   
阶码部分既不全0也不全1

采用偏置形式:E=e-Bias

其中,E为阶码实际的值,e为位模式下的无符号数,偏置Bias= $2^{k-1}-1$ float:127, double:1023

指数范围: float: -126~+127; double -1022~1023

尾数 M=f+1   其中 0<=f<1; 1<=M<2

非规格化   
阶码全0

阶码E=1-Bias

尾数M=f

存在意义:提供了0的表示方法,逐渐溢出   (否则[0,$2^{-n})范围内的数都无法表示)

特殊值   
阶码全1

  • 尾数全0:正负无穷大
  • 尾数非全0: NaN

浮点数加减运算
步骤:对阶→加减→规格化(→舍入)

对阶:小阶向大阶看齐,小阶尾数右移(带上隐含的1)

整数运算

位运算

没什么好说的。

移位运算

  • 左移x<<k 丢弃最高k位,在右端补k个0
  • 右移x>>k 丢弃最低k为,在右端补k个0/符号位

移位运算是向下取整

整数加减法

发生在n位带标志加法器中

###条件标志位
计算t=a+b

eflag 中文名称 有效条件
OF 溢出标志 a,b同号但t与a,b异号
SF 符号标志 t<0
ZF 零标志 t==0
CF 进位标志 (unsigned)t<(unsigned)a

比较大小相当于做减法

  • 无符号数: CF==0 $\Leftrightarrow$ a>b
  • 有符号数: OF==SF $\Leftrightarrow$ a>b

整数乘法

乘数中有常数时:采用移位(左移)+加减法相结合的形式

整数除法

默认朝0方向舍入:,即正数商取比自身的最接近整数,负数商取比自身的最接近整数

用移位代替除法时需要负数需要加上一个偏移量

除数为2的幂次时,采用右移运算,得到朝0方向舍入的结果

  • 无符号数、有符号正整数: 移出的地位直接丢弃
  • 有符号负整数: :加偏移量 (2^k-1) ,然后再右移k位,低位截断

作业一的教训

1.~按位取反 和 !全部取反要区分清楚

2.非按位运算操作符非0的都视为true

3.浮点数的转化要好好看一下,把转化公式写好

4.移位是向下取整

CATALOG
  1. 1. 前言
  2. 2. 信息的表示
    1. 2.1. 数值的表示
    2. 2.2. C语言中的整数
    3. 2.3. 数据的存放
    4. 2.4. 浮点数
  3. 3. 整数运算
    1. 3.1. 位运算
    2. 3.2. 移位运算
    3. 3.3. 整数加减法
    4. 3.4. 整数乘法
    5. 3.5. 整数除法
  4. 4. 作业一的教训