64 位机器上 QWORD 的大小是多少?

2023-12-09

我目前正在寻找上述问题的答案。到目前为止,我发现人们说,字大小是指处理器寄存器的大小,这表明在 64 位机器上,字大小为 64 位,因此 QWORD(4 * 字)的大小为 256 位。

但另一方面,我发现了类似的来源this有人说大小为 128 位(32 位为 64 位,64 位则加倍),而即使如此,其他人也建议大小为 64 位。但最后一个在某种程度上与微软有关,因为微软将字的大小定义为 16 位,让所有人都感到困惑,从而使事情变得更糟。

也许有人可以解决我的困惑并启发我关于这个话题。


在 x86 术语/文档中,“字”是 16 位因为 x86 是从 16 位 8086 发展而来的。随着扩展的添加而改变这个术语的含义只会令人困惑,因为英特尔仍然必须记录 16 位模式和所有内容,以及指令助记符,例如cwd(符号扩展字到双字)将术语烘焙到 ISA 中。

  • x86 字 = 2 字节
  • x86 双字 = 4 字节(双字)
  • x86 qword = 8 字节(四字)
  • x86 double-quad 或 xmmword = 16 字节,例如movdqa xmm0, [rdi].
    也在cqo助记符,八字。 (将 RAX 符号扩展为 RDX:RAX,例如之前idiv)

然后我们有有趣的指导,比如punpcklqdq:将两个 qword 混在一起形成一个 dqword,或者pclmulqdq用于 qword 的无进位乘法,产生 dq 完整结果。但除此之外,SIMD 助记符往往是 AVXvextracti128或 AVX512(具有可选的每个元素屏蔽)vextractf64x4提取 ZMM 寄存器的高 256 位。

更不用说像“tbyte”= 10字节x87扩展精度浮点数这样的东西了; x86 很奇怪,并不是所有东西都是 2 的幂。保护模式下还有 48 位 seg:off 16:32 远指针。 (基本上没用过,只是32位偏移部分。)


大多数其他 64 位 ISA 都是从 32 位 ISA 发展而来的(AArch64、MIPS64、PowerPC64 等),或者从一开始就是 64 位(Alpha),所以“字”在该上下文中意味着 32 位。

  • 32 位字 = 4 字节
  • dword = 8 个字节(双字),例如米普斯daddu是64位整数加法
  • qword = 16 字节(四字)(如果支持的话)。

“机器词”并在架构上贴上标签。

“机器字”的整体概念并不真正适用于 x86,其机器代码格式是字节流,并且对多个操作数大小的同等支持,以及大多数不关心自然对齐内容的未对齐加载/存储,仅关心普通可缓存内存的缓存行边界。

即使是“面向字”的 RISC,其寄存器和高速缓存访​​问的自然大小也可能与其指令宽度或文档中使用的“字”不同。

“字长”的整个概念总体上被高估了,不仅仅是在 x86 上。即使 64 位 RISC ISA 也可以以相同的效率加载/存储对齐的 32 位或 64 位内存,因此请选择对您所做的事情最有用的一个。不要将您的选择建立在确定哪一个是机器的“字大小”的基础上,除非只有一种最大有效大小(例如,某些 32 位 RISC 上的 32 位),然后您可以有效地将其称为字大小。


在我听说过的任何 64 位机器上,“单词”并不意味着 64 位。即使是从头开始设计为 64 位的 DEC Alpha AXP 也使用 32 位指令字。 IIRC,手册上称一个字为32位。

Being able使用单个指令将 64 位加载到整数寄存器中并不意味着“字大小”。位数和字长没有严格的特定技术含义;大多数 CPU 内部都有多种不同的大小。 (例如 64byte自 Haswell 以来,Intel 上的 L2 和 L1d 缓存之间的总线以及 32 字节 SIMD 加载/存储。)

因此,基本上由 CPU 供应商的文档作者来选择“word”(以及 dword / qword)对于其 ISA 的含义。


有趣的事实:SPARC64 谈论“短字”(32 位)与“长字”(64 位),而不是字/双字。我不知道不带任何限定符的“word”在 64 位 SPARC 文档中是否有任何含义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

64 位机器上 QWORD 的大小是多少? 的相关文章

  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 为什么 GCC 不将 a*a*a*a*a*a 优化为 (a*a*a)*(a*a*a)?

    我正在对科学应用程序进行一些数值优化 我注意到的一件事是 GCC 会优化调用pow a 2 通过将其编译成a a 但是调用pow a 6 没有优化 实际会调用库函数pow 这大大降低了性能 相比之下 英特尔 C 编译器 http en wi
  • 在 x86 ASM 中测试零通常哪个更快:“TEST EAX, EAX”与“TEST AL, AL”?

    测试 AL 中的字节是否为零 非零通常哪个更快 TEST EAX EAX TEST AL AL 假设之前有一个 MOVZX EAX BYTE PTR ESP 4 指令加载了一个带有零扩展的字节参数到 EAX 的其余部分 防止了我已经知道的组
  • Nasm 打印到下一行

    我用 nasm Assembly 编写了以下程序 section text global start start Input variables mov edx inLen mov ecx inMsg mov ebx 1 mov eax 4
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • AVX-512CD(冲突检测)与原子变量访问有何不同?

    所以我在看他们展示了如何 void Histogram const float age int const hist const int n const float group width const int m const float o
  • 没有 FPU 的处理器中的浮点计算

    是否可以在没有浮点单元的嵌入式处理器中执行浮点运算 是的 您只需要在软件中完成即可 你的编译器可能会提供支持 http gcc gnu org onlinedocs gccint Soft float library routines ht
  • ARMv8 A64 汇编中立即值的范围

    我的理解是 ARMv8 A64 汇编中的立即参数可以是 12 位长 如果是这样的话 为什么这行汇编代码是 AND X12 X10 0xFEF 产生此错误 使用 gcc 编译时 Error immediate out of range at
  • “mov (%ebx,%eax,4),%eax”如何工作? [复制]

    这个问题在这里已经有答案了 一直在从事装配作业 并且在很大程度上我对装配非常了解 或者至少对于这项任务来说足够好 但这个 mov 的声明让我很困惑 如果有人能解释这个 mov 语句如何操作寄存器值 我将非常感激 mov ebx eax 4
  • 为什么如果内存组织为字,则程序计数器加 1;如果内存组织为字节,则程序计数器加 2?

    如果在计算机中一条指令是 16 位 并且如果存储器被组织为 16 位字 则通过在当前指令的地址中加 1 来计算下一条指令的地址 如果内存是按字节组织的 可以单独寻址 那么我们需要在当前指令地址上加二 得到顺序执行的下一条指令的地址 为什么会
  • 阴影空间示例

    EDIT 我接受了下面的答案 并添加了我自己的代码的最终修订版 希望它向人们展示影子空间分配的实际示例 而不是更多的文字 编辑 2 我还设法在 YouTube 视频 所有内容 的注释中找到了一个调用约定 PDF 的链接 其中有一些关于 Li
  • 如何在 icarus verilog 中包含文件?

    我知道基本的 include filename v 命令 但是 我试图包含另一个文件夹中的模块 现在 该模块还包括同一文件夹中存在的其他模块 但是 当我尝试在最顶层运行该模块时 出现错误 C Users Dell Desktop MIPS
  • 如何使用movntdqa避免缓存污染?

    我正在尝试编写一个 memcpy 函数 该函数不会将源内存加载到 CPU 缓存中 目的是避免缓存污染 下面的 memcpy 函数可以工作 但会像标准 memcpy 一样污染缓存 我正在使用带有 Visual C 2008 Express 的
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 在 64 位操作系统上以 32 位运行 IIS 与以 64 位运行 IIS 有何优缺点?

    可能更适合 机架溢出 但从开发人员的角度来看 在 64 位 Windows 主机上将 IIS 同时服务于传统经典 ASP 和 NET 作为 32 位进程而不是 64 位进程运行有哪些优点和缺点 32 64 iis 服务器 相对于 32 32
  • 添加冗余赋值可以在未经优化的情况下编译时加快代码速度

    我发现一个有趣的现象 include
  • NASM 中的 equ 和 db 有什么区别?

    len equ 2 len db 2 它们是否相同 产生可以用来代替的标签2 如果不是 那么每种申报表的优点或缺点是什么 它们可以互换使用吗 第一个是equate 与 C 类似 define len 2 因为它实际上并没有在最终代码中分配任
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么X86中没有NAND、NOR和XNOR指令?

    它们是您可以在计算机上执行的最简单的 指令 之一 它们是我亲自实施的第一个指令 执行 NOT AND x y 会使执行时间和依赖链长度和代码大小加倍 BMI1 引入了 andnot 这是一个有意义的补充 是一个独特的操作 为什么不是这个问题

随机推荐

  • 上传文件抛出无方法签名异常(在 getFile() 方法中)

    我正在尝试上传文件并将其存储在文件中 这是 GSP 中的代码
  • 当轴标签分成多条线时会偏离中心

    我在用graph twoway scatter并添加我自己的ylabels 我经常有很长的标签并将它们分成多行 然而当我想要破解的时候却遇到了问题some标签超过两行 但不超过两行 当我这样做时 单行标签相对于它们的中心是偏离的tick标记
  • Laravel 如何使用 Eloquent 获取对象的行号?

    我想根据用户的创建日期了解用户的位置 我该如何使用 Eloquent 来做到这一点 我希望能够做这样的事情 User getRowNumber user obj 我想你想要 MySQL 解决方案 所以你可以这样做 DB statement
  • 选定的项目数据从表格到 ZK 中的文本框

    我正在开发一个小型 Web 应用程序 用于存储医院患者的数据 以便更多地了解 zk 及其令人惊叹的功能 这次我的目标是 当我选择一行 复选标记 时 我想将该行的数据 红色 获取到相应的文本框 蓝色 当我选择表的任何行时 这将起作用 也许这是
  • Python - CSV:具有不同长度行的大文件

    简而言之 我有一个 20 000 000 行的 csv 文件 它具有不同的行长度 这是由于陈旧的数据记录器和专有格式造成的 我们得到以下格式的最终 结果作为 csv 文件 我的目标是将此文件插入到 postgres 数据库中 我怎样才能做到
  • HomeAsUp 按钮在 Android 4.2.2 和 Appcompat 21.0.0 中无效

    我使用 Appcompat 21 中的工具栏而不是标准操作栏 一切都很顺利 除了HomeAsUp额外活动中的按钮不起作用 当我打开PrefsActivity 下面的代码片段 HomeAsUp按钮正常显示 一个向左的小箭头 当我单击按钮时 从
  • 如何调整 html canvas 元素的大小?

    我在 html 中静态定义了一个带有宽度和高度的画布元素 如果我尝试使用 JavaScript 动态调整其大小 设置新的宽度和高度 在画布的属性上或通过样式属性 我在 Firefox 中收到以下错误 未捕获的异常 异常 对WrappedNa
  • WINAPI - 设置组合框下拉列表的背景和文本颜色

    所以我尝试使用 Common Controls 和 WINAPI 设置 ComboBox 的背景和文本颜色 我确实设法设置了组合框本身的背景和文本颜色 但其下拉列表的颜色保持不变 这几乎就是我所做的 创建组合框时 我使用了CBS DROPD
  • 我需要一个 php 正则表达式来用另一个标签替换一个标签

    这是我需要能够做到的 我需要匹配以下标签 span text sample span 我需要用 html3 兼容标签替换 span 但保留中间的文本 替换后的最终标签应如下所示 u text sample u 我只是不擅长正则表达式 似乎无
  • ILMerge 替代方案,如何将应用程序的依赖 DLL 嵌入 EXE 文件中?

    如此处所述我试图将 dll 嵌入到 exe 应用程序中 以便只分发一个 exe 但是当我尝试在安装了完整 NET 4 的 xp 计算机上运行我的应用程序时 它只是崩溃而没有错误 我将以下代码放在主要方法 STAThread static v
  • 发布编译时 WCF .SVC Debug="true" 被忽略?

    默认情况下 SVC 文件包含 Debug true 我想知道如果您编译发布版本是否会忽略它 或者仍然使用调试符号进行编译 Ex Debug true属性在 ServiceHost仅当您将服务编写为inline svc 文件中的代码 或在 中
  • 如何在不同条件下选择同一字段两次并将结果显示为单独的字段

    我想用 C 创建一个表适配器 如下所示 我希望在不同的条件下在表中使用相同的字段两次 并且它必须显示为两个不同的字段 这是我的源表 来自AttendanceReg我需要的表Count每个学生的记录基于AttendStatus找出他们在的天数
  • 如何判断 Pandas 中的值是否随维度变化

    假设我有一些特定日期的客户数据 我想看看他们的地址是否已更改 超过那些日期 理想情况下 我想将发生更改的两列复制到新表中 或者只是获取总更改量的指标 所以 如果我有一张像这样的桌子 Date Customer Address 12 31 1
  • 如何获得倒排索引?

    我新使用 Spark 如何使用 Spark 获取 csv 文件的倒排索引 我有 csv 文件 df show id title tags closeddate 48702270 null null null 48702455 null
  • 使用 jQuery jsonp 跨域调用 ASP.NET Web 服务

    我的问题是已知问题并已讨论here and here 但即使在阅读并实施了建议的解决方案之后 我也无法完成这项工作 问题 Web 服务返回 xml 而不是 json
  • 阐明 Java 对 Unicode 的进化支持 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我发现 Java 对 char 和 codepoint 的区分很奇怪而且不合适 例如 字符串是字符数组或 字母表中出现的字母 与代码点相反 代码点可以是单个字母 也可能是复合或代理对 然而
  • 在 Mac OS 上使用 gdb 进行 Fortran 调试?

    我在使用 gdb 在 Mac OS Mountain Lion 上调试 Fortran 程序时遇到问题 当我调用 gdb fortran executable name 从终端 我收到以下消息 This GDB was configured
  • 处理/转置 Pandas Dataframe

    我得到了以下熊猫数据框 Id Category 1 type 2 1 type 3 1 type 2 2 type 1 2 type 2 我需要处理上述数据帧并将其转置为 Id Category type 1 Category type 2
  • 如何使用方法引用/java 8 泛化实用函数

    我遇到过一种常见情况 我有一个对象列表 需要生成一个带有单个属性的逗号分隔字符串 然后每个属性都用单引号引起来 2 示例 public String partIDsToString List
  • 64 位机器上 QWORD 的大小是多少?

    我目前正在寻找上述问题的答案 到目前为止 我发现人们说 字大小是指处理器寄存器的大小 这表明在 64 位机器上 字大小为 64 位 因此 QWORD 4 字 的大小为 256 位 但另一方面 我发现了类似的来源this有人说大小为 128