gpt4 book ai didi

assembly - QWORD 之后是什么?

转载 作者:行者123 更新时间:2023-12-04 00:30:23 26 4
gpt4 key购买 nike

如果

  • 8 位是一个字节
  • 两个字节就是一个字
  • 四个字节是一个双字
  • 8 个字节是一个 qword

  • 16 字节的好名字是什么?

    最佳答案

    电话:DR : 在 NASM 中,在 RESB/RESW/RESD/RESQ 之后是 RESO、RESY 和 RESZ .在指令助记符和 Intel 术语(在手册中使用)中,都使用了 O(八进制)和 DQ(双四线)。但是不使用 DQWORD,只使用 OWORD。
    反汇编者将使用 xmmword ptr [rsi]用于 MASM 或 .intel_syntax 中的内存操作数显式大小GNU 语法。 IIRC,没有指令说明助记符和/或寄存器尚未暗示该大小。

    请注意,此问题特定于 x86,并且与 Intel 的术语有关。在大多数其他 ISA(如 ARM 或 MIPS)中,“字”是 32 位,但 x86 术语起源于 8086。
    指令助记符中的术语
    Octword 用于一些 x86-64 指令的助记符。例如CQO将 rax 符号扩展为 rdx:rax。
    CMPXCHG16B是另一个对 1​​6 字节进行操作的非向量指令,但英特尔在描述中的任何地方都没有使用“oct”。相反,他们将内存位置描述为 m128。该手动输入不使用任何基于“单词”的大小。
    SSE/AVX 整数指令通常将元素大小作为助记符的一部分。在这种情况下,使用 DQ (double-quad),从不使用 O (oct)。例如,PUNPCKL*将两个源向量的一半中的元素交织到一个完整的目标向量中的指令:

  • PUNPCKLWD:word->dword (16->32)
  • PUNPCKLDQ:dword->qword (32->64)
  • PUNPCKLQDQ:两个qwords->全128位寄存器(64->128)。

  • 但是,它只是 DQ,而不是 DQWord .双四字听起来有些不自然,但我认为它可能偶尔会在英特尔手册中使用。如果您省略“Word”,而只说“在此位置存储一个 Double-Quad”,这听起来会更好。如果要附加“单词”,我认为只有 OWord 听起来自然。
    还有用于加载/存储/注册注册移动的 MOVDQA。好在AVX将矢量宽度扩展到256b时,他们保持了相同的助记符,并没有将256b版本称为VMOVQQA。
    一些操作 256 位寄存器的 128 位 channel 的指令有 128在名称中,例如 VEXTRACTF128 ,这是英特尔的新功能(CMPXCHG8B 除外)。

    汇编指令:
    从 NASM 手册:

    3.2.1 DB and Friends: Declaring Initialized Data

    DB, DW, DD, DQ, DT, DO, DY and DZ are used ... (table of examples)

    DO, DY and DZ do not accept numeric constants as operands.

    DT是一个十字节的 x87 浮点数。 DO 是 16 字节,DY 是 YMMWORD(32 字节),DZ 是 64 字节(AVX512 ZMM)。由于它们不支持数字常量作为初始化器,我猜您只能将它们与字符串文字初始化器一起使用?无论如何,对于带有逗号分隔的每个元素初始值设定项列表的 DB/DW/DD/DQ 会更正常。
    同样,您可以保留未初始化的空间。
    realarray       resq    10              ; array of ten reals 
    ymmval: resy 1 ; one YMM register
    zmmvals: resz 32 ; 32 ZMM registers


    内在函数和 AVX512 中的术语
    正如我在 How can Microsoft say the size of a word in WinAPI is 16 bits? 上的回答中提到的, AVX512 在其他操作期间的每个元素屏蔽使命名变得棘手。 VSHUFF32x4 混洗 128b 元素,并以 32 位元素粒度进行掩码。
    然而,英特尔并没有放弃 word=16 位。例如AVX512BW 和 AVX512DQ 将这个术语放在名称中。一些内在函数甚至使用它们,以前它总是 epi32 ,不是 d . (即 _mm256_broadcastd_epi32(__m128i)_mm256_broadcastw_epi16(__m128i) 。b/w/d/q 是完全多余的。也许这是一个错误?)
    (有没有其他人发现 asm 助记符比长烦人的内在函数更容易记住和输入?您必须知道 asm 助记符才能读取编译器输出,所以如果内在函数只使用助记符而不是第二个命名方案,那就太好了.)

    关于assembly - QWORD 之后是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39645078/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com