【深入理解计算机系统-第二版】3.55习题
深入理解计算机系统(英文版 第二版)中的第三章家庭作业3.55想了一个晚上也没有想出来到底是怎么回事。百度也没有百度出结果,而用google搜索相关内容,终于找到了其中的“猫腻”。
如果想要直接看,则点击下面链接。
http://stackoverflow.com/questions/11680720/implement-64-bit-arithmetic-on-a-32-bit-machine
书中,3.55题在P329页,题目略有不同,但原理一致。
The following code computes the product of x and y and stores the result in memory. Data type ll_t is defined to be equivalent to long long.
1 typedef long long ll_t; 2 void store_prod(ll_t *dest, int x, ll_t y) { 3 *dest = x*y; 4 }
gcc generates the following assembly code implementing the computation:
dest at %ebp+8, x at %ebp+12, y at %ebp+16
1 movl 16(%ebp), %esi 2 movl 12(%ebp), %eax 3 movl %eax, %edx 4 sarl $31, %edx 5 movl 20(%ebp), %ecx 6 imull %eax, %ecx 7 movl %edx, %ebx 8 imull %esi, %ebx 9 addl %ebx, %ecx 10 mull %esi 11 leal (%ecx,%edx), %edx 12 movl 8(%ebp), %ecx 13 movl %eax, (%ecx) 14 movl %edx, 4(%ecx)
This code uses three multiplications to implement the multiprecision arithmetic required to implement 64-bit arithmetic on a 32-bit machine. Describe the algorithm used to compute the product, and annotate the assembly code to show how it realizes your algorithm.
简要地分析一下上述代码的原理。我们知道x是32位,而y是64位,我们将x按符号扩展为64位,这一步即为汇编中3、4行的作用。实际上,x在符号扩展前后,与y相乘的64位结果是一样的。
x=xhigh*232+xlow
y=yhigh*232+ylow
x*y=(xhigh*yhigh)*264 (1)
+(xlow*yhigh+xhigh*ylow)*232 (2)
+xlow*ylow (3)
我们要取它的低64位结果,故(1)直接省略;
64位结果中,低32位的结果可以直接使用(3)计算出来;
高32位结果由两部分构成:(2)的低32位结果+(3)的高32位结果;
要得到(3)的高32位结果,我们需要使用mul的单操作数形式,在edx中保存乘积的高32位。需要注意的是这里使用mul无符号乘法运算,是由于y是64位的,低32位可以看作无符号数,因此,如果使用imul,虽然低32位的结果是正确的,但是高32位结果却是错误的。
转载于:https://www.cnblogs.com/XjChenny/archive/2013/04/06/3002000.html
【深入理解计算机系统-第二版】3.55习题相关推荐
- Python编程从入门到实践(第二版)课后习题自写代码
Python编程从入门到实践(第二版)课后习题自写代码 第八章 函数 最近自学的python,动手做了一下课后习题,错误也许会有,和大家一起探讨.多多指教! 8.3 返回值 动手试一试代码片 &quo ...
- 《视觉SLAM十四讲 第二版》课后习题
本文为<视觉SLAM十四讲>(第二版)的课后习题解答,为本人学习时参考着网上的资源所写的答案,可能有所纰漏,希望大家指出. 文章目录 第1讲 预备知识 第2讲 初始SLAM 第3讲 三维空 ...
- 刘汝佳《算法竞赛入门经典(第二版)》习题(三)
刘汝佳<算法竞赛入门经典(第二版)>第三章习题(一) 习题3-1 得分(ACM/ICPC Seoul 2005,UVa1585) 给出一个由O和X组成的串(长度为1~80),统计得分.每个 ...
- 刘汝佳《算法竞赛入门经典(第二版)》习题(六)
刘汝佳<算法竞赛入门经典(第二版)>第四章习题(4-1~4-3) 习题4-1 象棋(Xiangai,ACM/ICPC Fuzhou 2011,UVa1589) 考虑一个象棋残局,其中红方有 ...
- 刘汝佳《算法竞赛入门经典(第二版)》习题(二)
刘汝佳<算法竞赛入门经典(第二版)>第二章习题 目录 刘汝佳<算法竞赛入门经典(第二版)>第二章习题 习题2-1 水仙花数 习题2-2 韩信点兵 习题2-3 倒三角形 习题2- ...
- 开发日记-20190625 Linux系统管理技术手册(第二版) 第一章习题答案(个人版)
Preface 2333,果然,一章需要三天左右才能完成,这都第二天了,习题才做完前两道,不过通过这两道也了解到了这本书的习性了,不错,不错. Content E1.1 了解系统调用sync(不是sy ...
- 开发日记-20190626 Linux系统管理技术手册(第二版) 第一章习题答案(个人版)
Preface 交流才是王道,只有在极少数情况下,一个天才的能力会超越一百个凡人 Content E1.3 man和info之间的主要区别是什么?他们各自有什么优点? man手册页对单条命令,驱动程序 ...
- 《算法竞赛入门经典(第二版)》习题解答——第二章
文章目录 一.习题2-1 水仙花数(daffodil) 二.习题2-2 韩信点兵(hanxin) 三.习题2-3 倒三角形(triangle) 四.习题2-4 子序列的和(subsequence) 五 ...
- 深入理解计算机系统视频版,绝对干货
csapp的作者的讲课视频,分享给大家,看视频加上书效果应该不错. B站:https://www.bilibili.com/video/av31289365 youtube:https://www.y ...
- python第二版课后习题答案_《python核心编程第二版》课后习题6-12答案
下午脑子瓦特,想了半天也没有想出算法,刚刚抽风终于实现了,特此记录. ̄□ ̄|| 题目 (a)创建一个名字为 findchr()的函数,findchr()要在字符串 string 中查找字符 char, ...
最新文章
- jsp 出现cannot be resolved to a type问题解决办法
- Microsoft 服务器产品端口
- python入门教程2word-使用python操作word
- [Issue Fixed]-repo-error: .repo/manifests/: contains uncommitted changes
- oracle spa sta 使用,Oracle的SQL Tuning Advisor(STA) 到底做了什么?
- oracle中noguarantee,关于undo guarantee
- linux 安装库 编译提示-lcrypto 无法链接,缺少 crypto 库
- 数据分析师最终都会代码化的3点原因?!
- knn实战:如何对手写数字进行识别?
- php 动态多维数组长度,php – 动态创建多维数组
- Ant Design 框架
- 算法界的“视界杯”,2021腾讯广告算法大赛来了!
- 仿苹果手机_仿iphone12充电动画下载-仿iphone12充电动画软件下载 v1.1
- 阿里云盘登录空白问题解决
- 《Python自然语言处理》——1.1 语言计算:文本和词汇
- 智能手环---设计与实现
- 控制器分析-绘制伯德图
- 安全可靠快速地导出微信聊天记录
- 学生免费申请JetBrains许可
- 关于只读事务:@Transactional(readOnly = true)
热门文章
- Regular Expression(正则表达式)之邮箱验证
- 10.11 noip模拟试题
- 转载 :sql server 2005 无法删除数据库 #Test,因为该数据库当前正在使用
- 【转】Linux内核调试方法总结
- 多模态 | 从顶会论文看多模态预训练研究进展
- 【ICLR2019】重要的,是那些训练中被多次遗忘的样本
- 【BERT】BERT的嵌入层是如何实现的?看完你就明白了
- 【基础】集成学习 (Ensemble Learning)
- TF2—tf.keras.layers.BatchNormalization
- Mysql中的日期及时间相关函数