<深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP)第三章的家庭作业,并与网上的一些答案进行了对比修正. 感谢博主summerhust的整理,以下贴出AT&T常用汇编指令 AT&T常用汇编指令 数据传送指令 指令 效果 描述 movl S,D D <-- S 传双字 movw S,D D <-- S 传字 movb S,D D &l…
今天继续完成上周没有完成的习题---C++第三章课后作业,本章题涉及指针的使用,有指向对象的指针做函数参数,对象的引用以及友元类的使用方法等 它们具体的使用方法在下面的题目中会有具体的解析(解析标注在代码中). 题目: 1.建立一个对象数组,内放5个学生数据(学号,成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号. #include <iostream> #include<stdlib.h> using namespace…
在2.10中的inplace_swap函数的基础上,你决定写一段代码,实现将一个数组中的元素两端依次对调,你写出下面这个函数: void reverse_array(int a[], int cnt) { int first, last; , last = cnt - ; first <= last; first ++, last --) { inplace_swap(&a[first], &a[last]); } } 当对一个数组包含1.2.3.4时,得到预期的结果4.3.2.1.…
对于任一位向量a,有a ^ a = 0.考虑下面的程序: void inplace_swap(int *x, int *y) { *y = *x ^ *y; *x = *x ^ *y; *y = *x ^ *y; } 假设x和y指向的位置分别是a和b.完成下表: 步骤 *x *y 初始 a b 第一步 a a^b 第二步 a^(a^b) a^b 第三步 a^(a^b) a^(a^b)^(a^b) 由于异或运算满足交换率和结合率,且a ^ 0 = 0, a ^   = ~a.所以有 步骤 *x *…
T2Uw(w)=x, x≥0时 T2Uw(w)=x+2w, x<0时 利用上面的公式,重新计算2.19的问题.…
在2.17的基础上完成下表: x 十六进制 T2U(x) -8 0x8 -3 0xD -2 0xE -1 0xF 0 0x0 5 0x5…
将32位补码表示的数转换为10进制数. 32位补码 十进制 0x1b8 0x14 0xFFFFFE58 -424 0xFFFFFE74 -396 0x44 0xFFFFFEC8 -312 0x10 0xC 0xFFFFFEEC -276 0x20…
假设w=4,我们能给每个可能的十六进制数字赋予一个数值,假设用一个无符号或者补码表示.完成下表: x 无符号(B2U(x)) 补码(B2T(x)) 十六进制 二进制 0xE 1110 14 -2 0x0 0x5 0x8 -8 0xD -3 0xF -1…
填写下表,说明不同移位运算对单字节数的影响. x x<<3 x>>2(逻辑) x>>2(算术) 十六进制 二进制 二进制 十六进制 二进制 十六进制 二进制 十六进制 0xC3 1100 0011 0001 1000 0x18 0011 0000 0x30 1111 0000 0xF0 0x75 0111 0101 1010 1000 0xA8 0001 1101 0x1D 0001 1101 0x1D 0x87 1000 0111 0011 1000 0x38 001…
只使用位级运算和逻辑运算,编写一个C表达式,它等价于x==y.换句话说,当x和y相等时它将返回1,否则就返回0. !(x ^ y)…
假设x和y的字节值分别为0x66和0x39.填写下表,指明各个C表达式的字节值. 0x66 = 0110 0110(B) 0x39 = 0011 1001(B) 表达式 值 x & y 0x20 x | y 0x7F ~x | ~y 0xDF x & !y 0x00 x && y 0x01 x || y 0x01 !x || !y 0x00 x && ~y 0x01…
从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入都是一个数据字x和一个掩码字m.它们生成一个结果z,z是由根据掩码m的位来修改x的位得到的.使用bis指令,这种修改就是在m为1的每个位置上,将z对应的位设置为1.使用bic指令,这种修改就是在m为1的每个位置,将z对应的位设置为0. 只使用这两个函数实现C语言的按位|和^运算. int bis(i…
对于下面的值,写出变量x的C语言表达式.代码应该对任何字长w≥8都能工作.我们给出当x=0x87654321以及w=32时表达式的结果,仅供参考. A.x的最低有效字节,其他位均为0.[0x00000021]. B.除了x的最低有效字节外,其他位都取补,最低有效字节保持不变.[0x789ABC21]. C.x的最低有效字节设置成全1,其他字节都保持不变.[0x876543FF]. 解答: A. x & 0xFF B. ~(x ^ 0xFF)或者x ^ (~0xFF) C. x | 0xFF…
基于三元色R(红)G(绿)B(蓝)关闭(0)和打开(1),能够创建8种不同的颜色,如下: R G B 颜色 R G B 颜色 0 0 0 黑色 1 0 0 红色 0 0 1 蓝色 1 0 1 红紫色 0 1 0 绿色 1 1 0 黄色 0 1 1 蓝绿色 1 1 1 白色 这些颜色的每一种都能通过用一个长度为3的位向量一表示,同时可以对它们进行布尔运算. A.一种颜色的补是通过关闭打开的颜色,同时打开关闭的颜色形成的.那么上面8种颜色的补是什么颜色? 利用非运算求解: 颜色 补色 黑色 白色 红…
给出位微量的布尔去处的求值结果. 运算 结果 a 0110 1001 b 0101 0101     ~a 1001 0110 ~b 1010 1010     a&b 0100 0001 a|b 0111 1101 a^b 0011 1100…
下面的函数将输出什么结果? const char *s = "abcdef"; show_bytes((byte_pointer) s, strlen(s)); 其中字母'a'~'z'的ASCII码为0x61~0x7A. show_bytes()函数定义如下: #include <stdio.h> typedef unsigned char *byte_pointer; void show_bytes(byte_pointer p, int n) { int i; ; i…
使用打印字节的方式可以知道十进制数12345的十六进制为0x00003039,十进制浮点数12345.0的十六进制为0x4640E400. 转换为二进制为 /* 0 0 0 0 3 0 3 9 ************* 4 6 4 0 E 4 0 0 0000000000 */ 移动后有13位匹配. 已知十进制数3510593的十六进制为0x00359141,十进制浮点数3510593.0的十六进制为0x4A564504. A.写出上面两个数对应的二进制表示. B.移动两个二进制串的相对位置,…
分别写出十六进制数0x87654321在大端法机器和小端法机器上第1个.前2个.前3个字节. A.小端法:21    大端法:87 B.小端法:21 43      大端法:87 65 C.小端法:21 43 65 大端法:87 65 43…
不进行数字转换为二进制和十六进制,计算结果. A. 0x503C + 0x8 = 0x5044 B. 0x503C - 0x40 = 0x4FFC C. 0x503C + 64 = 0x503C + 0x40 = 0x507C D. 0x50EA - 0x503C = 0xAE…
填写空白.单字节可以用两个十六进制数表示. 十进制 二进制 十六进制 0 0000 0000 0x00 167 1010 0111 0xA7 62 0011 1110 0x3E 188 1011 1100 0xBC 0011 0111 0x37 1000 1000 0x88 1111 0011 0xF3 0101 0010 0x52 1010 1100 0xAC 1110 0111 0xE7…
填写空白项. n 2n(十进制) 2n(十六进制) 9 512 0x200 19 0x80000 16384 0x4000 0x10000 17 0x20000 32 0x20 0x80…
A.将0x39A7F8转换为二进制. 0011 1001  1010 0111  1111 1000 B.将二进制1100 1001 0111 1011转换为十六进制. 0xC97B C.将0xD5E4C转换为二进制. 0000 1101  0101 1110  0100 1100 D.将二进制10 0110 1110 0111 1011 0101转换为十六进制. 0x26E7B5…
初始完成者:哈尔滨工业大学 李秋豪 许可:除2.55对应代码外(如需使用请联系randy.bryant@cs.cmu.edu),任何人可以自由的使用,修改,分发本文档的代码. 本机环境: (有一些需要在多种机器上测试的就没有试验) frank@under:~/tmp$ uname -a Linux under 4.10.0-35-generic #39~16.04.1-Ubuntu SMP Wed Sep 13 09:02:42 UTC 2017 x86_64 x86_64 x86_64 GNU…
3.1分布式文件 HDFS默认一个块的大小是64MB,与普通文件不同的是如果一个文件小于数据块的大小,它并不占用整个数据块的存储空间. 主节点又叫名称节点:另一个叫从节点又叫数据节点.名称节点负责文件和目录的创建.删除和重命名,同时管理数据节点和文件块的映射关系.数据节点负责数据存储和读取. 3.2HDFS的相关概念 MapReduce中的map一次只处理一个块中的数据.HDFS抽象块的概念可以带来一下好处: 支持大规模文件存储 简化系统 适合数据备份 名称节点在启动过程中处于安全模式,只对外提…
3.58 long decode2(long x, long y, long z) { int result = x * (y - z); if((y - z) & 1) result = ~result; return result; } 3.59 这个题考察的是2.3.4和2.3.5节的一个定理:w比特长度的两个数相乘,会产生一个2w长度的数,不管这两个数是无符号数还是补码表示的有符号数,把结果截取的低w比特都是相同的. 所以我们可以用无符号数乘法指令mulq实现有符号数乘法:先把数有符号扩…
本人python新手,答案自己做的,如果有问题,欢迎大家评论和讨论! 更新会在本随笔中直接更新. 我在Windows使用python版本是2.7.0 3–10. 异常.使用类似readTextFile.py 中异常处理的方法取代 readTextFile.py makeTextFile.py 中对os.path.exists() 的调用.反过来, 用os.path.exists() 取代readTextFile.py 中的异常处理方法. 我的答案; makeTextFile.py ''' @au…
<深入理解计算机系统> 第三版 第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了 29 ~ 34 页) 第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9866674.html 对于跨越多字节的程序对象,有两个规则必须建立 1.这个对象的地址是多少? 一般使用所有字节中最小的地址作为对象的地址 2.这个对象的内容在内存中如何排列? 有两种排列方法 (1)大端法 最高有效为放在前面 (2)小端法 最低有效位放在前面 Android 和 IOS…
<深入理解计算机系统> 第三版 第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了 22 ~ 28 页) 第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9824395.html 计算机中存储整数时,一般都是以补码的形式存储的 因为使用补码计算的话,计算机可以不用判断符号位(直接把所有位的值都当做数值),可以用加法去替代减法(少了一种算法) 对于虚拟地址和虚拟地址空间不大理解,先把相关内容摘抄下来: “机器级程序将内存视为一个非常大的字节数组…
9.11 A. 00001001 111100 B. +----------------------------+ | Parameter Value | +----------------------------+ | VPN 0x09 | | TLB index 0x01 | | TLB tag 0x02 | | TLB hit? N | | Page fault? N | | PPN 0x17 | +----------------------------+ C. 010111 11110…
4.52以后的题目中的代码大多是书上的,如需使用请联系 randy.bryant@cs.cmu.edu 更新:关于编译Y86-64中遇到的问题,可以参考一下CS:APP3e 深入理解计算机系统_3e Y86-64模拟器指南 流水线部分只写了偶数题号的,这几天太浮躁,落下了好多课... 4.45 A. 不正确,当REG为%rsp时,这样会压入%rsp - 8而非%rsp B. 对于 pushq REG: movq REG, -8(%rsp) subq $8, %rsp 4.46 A. 不正确,当R…