

信息=位+上下文
第二章整体即为进制转换,对于无符号数与有符号数之间的转换,以及OP操作,本质而言为模运算。
通用形式:
do
body-statement
while(test-expr);
循环体body-statement至少执行一次。
可以翻译成:
loop:
body-statement
t = test-expr;
if(t)
gotoloop;
即先执行循环体语句,再执行判断。
通用形式:
while(test-expr)
body-statement
GCC的方法是,使用条件分支,表示省略循环体的第一次执行:
if(!test-expr)
gotodone;do
body-statement
while(test-expr);done:
接下来:
t =test-expr;if(!t)
gotodone:
loop:
body-statement
t =test-expr;
if(t)
goto loop;done:
归根究底,还是要把循环改成do-while的样子,然后用goto翻译。
栈的操作:
对于一个栈首先进行栈的建立:push %ebp; mov %esp,%ebp
然后进行大小进行申请:sub $xx,%esp ,紧接着进行数据的存储
当进行调用时保存返回地址,即下一条指令的地址,调用call指令
即一个函数的栈帧。整体而言与c语言中函数的调用极其相似。
第四章整体总结见难点梳理。
局部性原理:
存储器层次结构:每层存储设备都是下一层的“缓存”。
即第k层的缓存是空的(称为冷缓存),对任何数据对象的访问都不会命中。
由于一个放置策略:将第k+1层的某个块限制放置在第k层块的一个小的子集中,这就会导致缓存没有满,但是那个对应的块满了,就会不命中。
当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。
高速缓存存储器:
高速缓存是一个高速缓存组的数组,它的结构可以用元组(S,E,B,m)来描述:
S:这个数组中有S=2^s个高速缓存组E:每个组包含E个高速缓存行
B:每个行是由一个B=2^b字节的数据块组成的m:每个存储器地址有m位,形成M=2^m个不同的地址
除此之外还有标记位和有效位:
有效位:每个行有一个有效位,指明这个行是否包含有意义的信息
标记位:t=m-(b+s)个,唯一的标识存储在这个高速缓存行中的块
组索引位:s
块偏移位:b
对于这门课程来说,我觉得知识点的联系非常重要。每学完一个章节,要进行一下复习,善于总结每个章节之间的联系,有助于我们更好地理解和学习这门课程。比如第三章和第四章,对于函数栈桢的每条指令,我们联系一下4.3节,各个指令的具体作用,有助于我们更好的理解%esp,%ebp的具体操作,使我们更好的理解栈桢的使用。
原文:http://www.cnblogs.com/20135302wei/p/4928491.html