底部的方框应该是 %rax 而不是 Jonathan Barlett 书中图 6-1 中的 %rbx 吗?

问题描述 投票:0回答:1

我一直在读一本名为 “学习用汇编编程,Jonathan Barlett”的书。其中,我没看懂图6-1a diagram with some boxes and arrows pointing to/from a memory array

上下文: 作者正在解释注册间接模式,使用mov (%rbx), %rax

我怀疑底部的盒子应该标记为

%rax

而不是
%rbx
。但我并不是100%有信心。因为我是装配新手。我是否遗漏了一些我必须知道的东西或者作者犯了错误?

assembly x86-64 gnu-assembler att
1个回答
0
投票
对于

mov (%rbx), %rax

,加载结果写入RAX。
RBX 未修改,仅读取。
(与 ARM 不同,x86 没有任何后递增或预递增寻址模式,可以将任何内容写回寻址模式寄存器。除了
rep movsb
 等,但它们使用固定寄存器,而不是正常的 ModRM 寻址模式。)

%rax

 对于底部的框来说是有意义的,作为记忆中箭头的目的地。
但框外的文字已经涵盖了这一点。

底部框的一个可能解释是内存对地址%rbx

的响应。
上面的文字说明了它的分配位置。

就 CPU 的工作方式而言,如果保存该 qword 的缓存行在 L1d 缓存中尚未处于热状态,则处理此微操作的加载执行单元将必须发出请求。 如果 L2 高速缓存也未命中,则必须通过内核和内存控制器之间的互连“离开内核”发送请求。 (假设典型的现代 x86 具有 3 级缓存,内部两级缓存是每个核心私有的。)

因此从概念上讲,内存请求可能是一件大事并且需要一些时间(或者对于重复访问同一行可能非常便宜)。 同一缓存行的其他加载也可以将自己附加到同一缓冲区以等待传入数据。 无论如何,对我来说,绘制一个将请求和响应分开的图表是有意义的,所以我认为这就是正在发生的事情。

我不知道作者是否为这样的框图建立了约定;如果是这样,那么解释的空间就较小了。

不久前,我花了几分钟浏览 Jonathan 的上一本书《Programming from the Ground Up》(免费,GFDL,使用 AT&T 语法涵盖 i386,该书从
x86 标签 wiki 以及其他有用的资源链接),他确实谈到了一些关于真实的 CPU 和真实的操作系统如何工作的内容。

© www.soinside.com 2019 - 2024. All rights reserved.