没有合适的资源?快使用搜索试试~ 我知道了~
首页深入理解计算机系统答案.docx
深入理解计算机系统答案.docx
需积分: 48 867 浏览量
更新于2023-05-30
评论
收藏 11KB DOCX 举报
深入理解计算机系统答案深入理解计算机系统答案深入理解计算机系统答案深入理解计算机系统答案深入理解计算机系统答案深入理解计算机系统答案深入理解计算机系统答案深入理解计算机系统答案
资源详情
资源评论
资源推荐

深入理解计算机系统答案
【篇一:深入理解计算机系统笔记】
(1)对于一个无符号数字 x,截断它到 k 位的结果就相当于计算 x mod2^k.
(2)在大多数的机器上,整数乘法指令相当地慢,需要 12 或者更多的始终周期,然而其他整
数运算-例如加法、减法、位移运算和移位-只需要 1 个时钟周期.因此,编译器使用的一
项重要的优化就是试着使用移位和加法运算的组合来代替乘以常数因子的乘法.
(3)在大多数的机器上,整数除法要比整数乘法更慢-需要 30 或者更多的始终周期.除以 2
的幂也可以用移位运算来实现,只不过我们用的是右移,而不是左移.对于无符号和二进制补
码数,分别使用逻辑移位和算术移位来达到目的.
1.注意系统的分类:主流的 ia32(也就是 x86),以及 x86-64(也就是 x64),还有种
intel 的与原 32 位系统不兼容的 ia64。
2.编译系统由预处理器,编译器,汇编器和链接器组成。
3.单指令多数据并行称为 simd 并行,其扩展为 sse 指令集。 4.x64 上 long 为 8 字节,
指针也为 8 字节。
5.无符号数右移必须采用逻辑右移,而有符号数一般采用算术右移。 6.有符号数遇见无
符号数会默认强转为无符号数。
7.short 转为 unsigned 时,是先扩展大小再符号转换。
8.补码非的计算:从左到右将第一个为 1 的位前的所有位取反。 9.负数的补码移位向下
舍入。
10.正浮点数能使用整数排序函数来进行排序。
11.浮点加法和乘法不具备结合性,浮点乘法在加法上不具备分配性。 12.预处理器扩展
源代码,然后编译器生成源代码的文本汇编代码,汇编器转成二进制汇编码,链接器生成
exe 或 dll 或 lib。
13.寄存器可以保存地址也可以保存值。注意汇编中的加括号表示为取该地址指向的值,
如(%eax)指%eax 中保存的地址指向的值。 14.传送指令的两个操作符不能都指向存储
器。
15.栈指针%esp 保存着栈顶元素的值,%eax 保存函数返回值。 16.栈从高地址往低地
址分配,堆从低地址往高地址分配。
17.注意:lea,假设为 leal 7(%edx, %eax, 4),则当%edx 中保存的是地址时,lea 为
取有效地址,而当%edx 中保存的是值时,lea
为算术运算,即 7 + %edx + %eax * 4。这儿的%eax 总保存值。说白了,其实 lea 一
直是在做计算,只是%edx 影响了直观表达而已。 18.注意:处理有无符号值的操作是通
过不同的汇编指令来区分的。 19.大多数汇编器根据一个循环的 do-while 形式来产生循
环代码,逆向工程会用到。
20.指令无视操作数的长度。
21.因为有个条件传送的优化策略,所以(xp ? *xp : 0)这条语句其实两个选择分支都会
执行。
22.32 位系统中,大多数栈中信息的访问其位置都是基于帧指针的。而 64 位系统中,栈











安全验证
文档复制为VIP权益,开通VIP直接复制

评论0