终于开始了学习《深入理解计算机系统》的旅程,路漫漫其修远兮!
今天开始看“系统”的程序结构和执行部分,现简要的总结一下学到的东西。
基本认识:
计算机中的信息都是二进制位表示,我们赋予不同的位模式以不同的含义从而表示区分出不同的信息。基本的数字表示分为整数和浮点数。整数又有unsigned和two's-complement两种表现形式,分别对应非负数和补码整数(正负)。值得注意的是浮点数尽管有更大的表示范围,但却只是数学值的近似表示。
$2.1 信息存储
机器级的程序将计算机中的所有存储器(RAM,显存等)都视为整体的虚拟存储器,存储单元为一个字节(8bits),系统为每一个字节分配一个数字作为其地址。指针变量中存储的就是这样一个地址。
a.位模式的表示:十六进制
用十六进制来表示一个字节是非常方便的,可以简洁明了的表示出每个二进制位上的情况。熟悉二进制-十六进制-十进制间的互相转换。特别留意:1)A-1010 C-1100 F-1111 2)2^n=100……00
b.字长(word size)
现在终于明白了为什么会有字长这种东东,因为每台计算机都有一个字长,指明整数(long)和指针数据(pointer)的标准大小。最重要的是系统参数中的虚拟空间地址就是一个字长来编码的。所以字长直接决定了系统所支持的最大虚拟地址的范围。
c.寻址和字节顺序
1)当系统存储一个多字节对象时,必须解决两个基本的问题:一个是这个对象要如何在内存中组织存储,另一个是如何确定这个多字节对象的地址。计算机系统采用连续的字节序列来存储多字节对象,取用这个多字节对象的最小字节地址作为其对象地址。
2)存储多字节对象时,按照存储数据高位和低位有效字节顺序的不同可以分为小端法(Inter)和大端法(IBM&Sun Microsystems)
3)字节顺序可见的三种情况:
01.网络传输时,为了是大端法和小端法的机器可以互相通讯,必须中间采取转换成标准形式作为媒介
02.阅读表示整数数据的字节序列时字节顺序就显得很重要了(如使用反汇编器时),此时应当先确定使 用的CPU类型或者确定大端法或者小端法
03.通过强制类型转换显示一个多字节对象的每一个字节的值时
d.位运算
1)位级运算: a|b, a&b, a^b, ~a
2)逻辑运算:a||b, a&&b, !a value: ~0-true(0), 0-false(0)
3)移位运算
01.左移运算——右端补0
02.右移运算——
逻辑运算:左端补0
算术运算:左端补最高有效位:0 or 1
阅读(2590) | 评论(4) | 转发(0) |