深入理解计算机系统 练习题3.8 理解计算机二元操作
我讲解这道题的目的是为了让大家理解结果为什么是那样的,假如对基础知识不是特别了解的人,可能会对答案有疑问,但是答案并没有详细讲解为什么会得到哪些答案。
这里推荐我写的另一篇博客,https://blog.csdn.net/ciqingloveless/article/details/84136002
,这里详细讲述了寄存器寻址,后面有的内存我回省略。
题目
假设下面的值存放在指定的内存地址和寄存器中:
地址 | 值 |
---|---|
0x100 | 0xFF |
0x108 | 0xAB |
0x100 | 0xFF |
0x100 | 0xFF |
寄存器 | 值 |
---|---|
%rax | 0x100 |
%rcx | 0x1 |
%rdx | 0x3 |
填写下表,给出下面之灵的效果,说明被更新的寄存器或内存位置,以及得到的值:
指令 | 目的 | 值 |
---|---|---|
addq %rcx,(%rax) | ||
subq %rdx,8(%rax) | ||
imulq $16,(%rax,%rdx,8) | ||
incq 16(%rax) | ||
decq %rcx | ||
subq %rdx,%rax |
解答
其实这道题的难点还是在寄存器寻址上,假如对寄存器寻址不是特别清楚,那么这道题可能特别绕,下面我就讲解答案。
根据二元运算符定义,使用add举例:
ADD S,D的含义是 D <- D + S
其他指令格式与上面相同,他的理解就是用D加上S放入D,这个放入D很关键。好了,下面进行答案讲解。
在addq %rcx,(%rax)这个题目中,我们列取一下各个的值:
S -> %rcx
D -> (%rax)
addq %rcx,(%rax) = (%rax) + %rcx
现在的问题是各个值是多少,那么这里着重说一下%rcx与(%rax)的区别,%rcx是寄存器寻址,(%rax)是寄存器间接寻址,%rcx就是所需要的值,(%rax)中的值是地址,所以(%rax)的值还得根据(%rax)中的值再去找一次,所以得出如下结果
S -> %rcx -> 0x1
D -> (%rax) -> 0x100 -> 0xFF
addq %rcx,(%rax) = 0xFF + 0x1 = 0x100
subq %rdx,8(%rax)我们也按照上面方式讲解
S -> %rdx
D -> 8(%rax) -> %rax + 8 -> 0x100 +8 -> 0x108 -> 0xAB
subq %rdx,8(%rax) = %rax + 8 - %rdx
这里的难点是8(%rax)为什么是%rax + 8,因为这个采用的是(基址 + 偏移量)寻址。
subq %rdx,8(%rax) = 0xAB - 0x3 = 0xA8
后面我就不那么详细讲解了直接列了
imulq $16,(%rax,%rdx,8)
S -> $16 -> 16
D -> (%rax,%rdx,8) -> %rax + 8 * %rdx -> 0x100+0x18 -> 0x118 -> 0x11
imulq $16,(%rax,%rdx,8) = 0x11 * 16 = 0x110
incq 16(%rax)
INC D 的定义是 D <- D + 1
所以根据定义有如下结果
D -> %rax + 16 -> 0x100 + 16 -> 0x110
所以计算结果为
incq 16(%rax) = 0x13 + 1 = 0x14
decq %rcx
解释如上
incq 16(%rax) = 0x1 - 1 = 0x0
subq %rdx,%rax
这个也不再详细解释了,有问题留言
subq %rdx,%rax = 0x100 - 0x3 = 0xFD
所以最后结果如下
指令 | 目的 | 值 |
---|---|---|
addq %rcx,(%rax) | 0x100 | 0x100 |
subq %rdx,8(%rax) | 0x108 | 0xA8 |
imulq $16,(%rax,%rdx,8) | 0x118 | 0x110 |
incq 16(%rax) | 0x110 | 0x14 |
decq %rcx | %rcx | 0x0 |
subq %rdx,%rax | %rax | 0xFD |
深入理解计算机系统 练习题3.8 理解计算机二元操作相关推荐
- 深入理解计算机系统 相关课程,深入理解计算机系统
作者简介: Randal E. Bryant 1981年于麻省理工学院获得计算机博士学位,1984年至今一直任教于卡内基-梅隆大学.现任卡内基-梅隆大学计算机科学学院院长.教授,同时还受邀任教于电 ...
- 【送两本】计算机领域神书《深入理解计算机系统》
作者:Randal E. Bryant,David R. O'Hallaron 来源:华章计算机(hzbook_jsj) 文末送两本<深入理解计算机系统>第三版,包邮. <深入理解计 ...
- 深入了解计算机的知识,电脑入门基础知识之深入理解计算机系统
电脑入门基础知识之深入理解计算机系统 导语:计算机系统由计算机硬件和软件两部分组成.硬件包括中央处理机.存储器和外部设备等.下面就来看看小编为大家整理的资料,希望对您有所帮助! 简介 按人的要求接收和 ...
- 理解计算机的特性性能和应用,计算机系统性能评价认识与理解.doc
计算机系统性能评价认识与理解 对计算机系统性能评价的认识和理解 1.什么是计算机系统性能评价? 在20世纪60年代中期,出现了多任务.多用户的计算机系统,随着大家对这种系统的应用,人们发现这些系统表现 ...
- 《深入理解计算机系统》 练习题3.9-3.11 移位操作
移位操作 移位操作是二元操作.第一个操作数是移位量,第二个操作数是被移位的数. 移位量只能是立即数,或者放在单字节寄存器%cl中. 被移位的数可以是一个寄存器,或者一个内存位置. 如果移位操作对w位长 ...
- 《深入理解计算机系统(英文版.第2版)》
<深入理解计算机系统(英文版.第2版)>china-pub计算机新书推荐 本书双色印刷,计算机软硬件理论结合讲述的经典之作. 页码:1077 基本信息原书名: Computer Syste ...
- 如何阅读《深入理解计算机系统》?(文末送书)
来源:华章计算机 作者:木羊同学 导读:如果你也读CS专业,如果你也不知道怎么回答"学计算机不就是学修电脑"这个CS系的宿命之问,推荐一定读一读<深入理解计算机系统>. ...
- 《深入理解计算机系统(原书第三版)》pdf
下载地址:网盘下载 内容简介 · · · · · · 和第2版相比,本版内容上*大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础.主要更新如下: 基于x86-64,大量地重 ...
- 如何阅读《深入理解计算机系统》
作者:Randal E. Bryant,David R. O'Hallaron 来源:华章计算机(hzbook_jsj) <深入理解计算机系统>(简称CS:APP)的主要读者是计算机科学家 ...
最新文章
- Message LongText(消息的详细长文本)
- 不显示坐标刻度_如何使用坐标交叉位置来改变Excel图表的展现形态
- php 字符符转整数
- python求小于n的所有素数_用python求出2000000内所有素数的和?不知怎么写?
- JVM优化系列-JVM内存溢出的原因
- 多个ajax执行混乱问题
- php mysql sum_thinkphp mysql语句 sum
- 【Flutter】Dart中的var、final 和 const基本使用
- 冒泡、选择、快速、归并、堆排序算法 python实现
- x265中checkMerge2Nx2N_rd0_4()分析(版本2.8)
- 过来-神秘的Word域代码
- Ubuntu 报错 malloc(): unsorted double linked list corrupted
- 创业公司的融资阶段:天使轮、种子轮、A轮、C轮、E轮到底是什么意思?
- 小米平板2刷哪个系统更流畅_Windows 10版小米平板2简测:流畅度不及自家MIUI版...
- 学会这几个.你就能成为bat脚本小子了...(转来看看的)
- linux fstab错误无法启动,Linux 系统 fstab错误导致系统无法启动的修复
- 实例简述Spring AOP之对AspectJ语法的支持
- 从0和1开始,揭开数字世界的神秘面纱
- lm2576使用注意
- Web基础(从入门到项目实战)