《深入理解计算机系统》读书笔记

Computer System a Programmer’s Perspective

《深入理解计算机系统》读书笔记

 

 

 

 

 

 

 

 

 

 

 

    者:starshift

    本:.v1.0

开始时间:2006.11.30

结束时间:未知

    注:本文可以自由转载,引用,但请注明原作者和出处。

原文:Computer System a Programmer’s Perspective

by Randal E.Bryant David O’Hallaron

 

 

 

 

 

第一章 计算机系统漫游

第二章 信息的处理和表示

习题2.1

完成下面的数字转换:

A, 0x8F7A93转换为2进制

0x     8            F            7            A            9            3

    1000        1111        0111        1010       1001       0011

B, 2进制1011 0111 1001 1100 转化为十六进制

1011        0111        1001       1100

 B           7           9             C

C,将0xC4E5D转换为二进制

       0x    C            4            E            5            D

              1100              0100       1110        0101       1101

D, 2进制转换为16进制 11 0101 1011 0111 1110 0110

       11    0101     1011 0111 1110     0110

       3        5          B       7     E       6

2.1.2

       每台计算机都有一个字长(word size),指明整数和指针(注意还有指针)数据的标称大小(nominal size)。因为虚拟地址也是以这样的字编码的,所以字长决定了重要的系统参数也就是虚拟地址空间的最大值。对于一个字长为n的计算机系统而言,虚拟地址的范围是02n1程序最多访问2n 字节,现在大多数的计算机字长为32,也就是程序的最大虚拟空间为4GB

2.1.3数据大小

C语言数据类型的大小(以字节为单位)

Char              1

Short int         2

Int                4

Long int         4

Char *           4            指针长度一般为一个字长

Float             4

Double           8

 

2.1.4寻址和字节顺序

寻址要解决的问题是:对象的地址是什么和我们在存储器中如何对这些字节进行排序。在几乎所有的机器上,多字节对象都会被存储为连续的字节序列,对象的地址使用序列中最小的地址。Egint变量x的地址为0x100,那么0x1000x1010x1020x103也都是存储x的空间。

字节排列顺序的小端法和大端法:

       有一个16进制的数为0x01234567,地址范围是0x1000x103,那么

       大端法:

                     0x100     0x101     0x102     0x103

                      01         23           45           67

       小端法

                     0x100     0x101     0x102     0x103

                      67         45         23           01

              注意:在这里字内的顺序是不变的。仍然是67 45 23 01

通常而言,机器内部采用何种编码形式是不会影响到系统的内部运行的。但是,当在网络中传送数据时,不同的机器需要统一的标准进行数据传输,因此拥有已经建立的字节顺序标准。

字符顺序发生改变的第二种情况是当阅读表示整数数据的序列时,这通常发生在检查机器级程序时,eg:

80438bd: 01 05 64 94 04 08                             add %eax,  0x8049464

前面的部分是由反汇编器生成的,注意到这行的十六进制字节串 01 05 64 94 04 08是一条指令的字节级表示,这条指令的意思是增加一个字节的数据宽度到地址0x8049464上,如果我们取出字节表示的最后四个字节:64 94 04 08,按照反向排序的话,将得到08049464,就是右边写着的数值。当小端法机器生成机器级表示程序时,通常也会将字节按照相反的方向表示。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值