信息=位+上下文
第二章整体即为进制转换,对于无符号数与有符号数之间的转换,以及OP操作,本质而言为模运算。
通用形式:
do
body-statement
while
(
test-expr);
循环体body-statement至少执行一次。
可以翻译成:
loop:
body-statement
t = test-expr;
if
(t)
goto
loop
;
即先执行循环体语句,再执行判断。
通用形式:
while(
test-expr)
body-statement
GCC的方法是,使用条件分支,表示省略循环体的第一次执行:
if(
!
test-expr
)
goto
done;
do
body-statement
while
(
test-expr);
done:
接下来:
t =
test-expr;
if(!t)
goto
done:
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