这段代码试图做什么?

阿托梅尔兹

我试图了解以下代码的工作方式:

#define M32toX128(x128,m32) __asm__               \
  ("movddup %1, %0\n\t"                           \
   "movsldup    %0, %0"                           \
   : "=&x"(x128) : "m"(m32) )

我只有基本的组装知识。在使用它的程序的上下文中进行搜索,我了解到它正在复制32位变量并将结果存储在128位变量中。
我的问题是:

  • 什么%0%1指的是什么?
  • 冒号(:)在做什么?
  • 实际执行的汇编代码是什么?我的意思是替换%ns之后,"=&x"(x128)...
小丑

gcc内联汇编是一个复杂的野兽,过于复杂,无法在此处进行详细描述。快速概览,asm块的一般形式为:"template" : outputs : inputs : clobbers您可以通过使用%后跟基于零的索引来引用模板中的输出和输入(统称为操作数)因此%0x128%1m32对于每个操作数,您可以指定一个约束,该约束告诉编译器如何分配所述操作数。=&x方法x128在任意可用的xmm寄存器中将其分配为早期消息输出,并且该m方法将存储地址用作操作数。有关令人难以置信的详细信息,请参见手册

生成的实际程序集将取决于编译器使用的操作数选择。您可以看到是否要求使用该-S选项列出程序集假设m32是一个局部变量,代码可能如下所示:

movddup x(%esp), %xmmN
movsldup %xmmN, %xmmN

请注意,gcc内联汇编程序当然是gcc和体系结构特定的,这意味着使用等效的编译器内在函数更为简单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

这段C ++代码做什么?

来自分类Dev

$ {2:-$ 2}这段代码是做什么的

来自分类Dev

这段代码中的“ s”是做什么的?

来自分类Dev

这段代码中的[0]在做什么?

来自分类Dev

这段代码在做什么,python

来自分类Dev

解释这段代码在做什么

来自分类Dev

Swift困惑这段代码在做什么

来自分类Dev

这段代码在做什么?javascript基础

来自分类Dev

这个C代码试图做什么

来自分类Dev

什么是|| 在这段代码中做什么?这段代码的目的类似于 C 中的 switch(condition)?

来自分类Dev

这段代码在做什么?(大小_t)-1

来自分类Dev

*(void **)(&funcp)在涉及dlsym()的这段代码中做什么?

来自分类Dev

(n--!= 0){}在这段代码中做什么?

来自分类Dev

这段代码中的箭头功能是做什么的?

来自分类Dev

我如何弄清楚这段代码在做什么?

来自分类Dev

这段代码究竟是做什么的?

来自分类Dev

除了获取日期外,这段代码还在做什么?

来自分类Dev

这段JavaScript代码中的.apply在做什么?

来自分类Dev

*(void **)(&funcp)在涉及dlsym()的这段代码中做什么?

来自分类Dev

这段代码中的箭头功能是做什么的?

来自分类Dev

这段代码实际上在做什么?

来自分类Dev

pl/sql 中的变量。这段代码在做什么?

来自分类Dev

数组映射和字典——这段代码在做什么?

来自分类Dev

这段代码返回什么?

来自分类Dev

这段代码缺少什么?

来自分类Dev

这样的返回结果如何,这段代码中的lambda函数是做什么的?

来自分类Dev

python docs与我的re实现中的这段斐波那契代码在做什么?

来自分类Dev

看起来像JavaScript对象的这段代码是做什么的?

来自分类Dev

java扩展arraylist我想知道这段特定的代码做什么

Related 相关文章

  1. 1

    这段C ++代码做什么?

  2. 2

    $ {2:-$ 2}这段代码是做什么的

  3. 3

    这段代码中的“ s”是做什么的?

  4. 4

    这段代码中的[0]在做什么?

  5. 5

    这段代码在做什么,python

  6. 6

    解释这段代码在做什么

  7. 7

    Swift困惑这段代码在做什么

  8. 8

    这段代码在做什么?javascript基础

  9. 9

    这个C代码试图做什么

  10. 10

    什么是|| 在这段代码中做什么?这段代码的目的类似于 C 中的 switch(condition)?

  11. 11

    这段代码在做什么?(大小_t)-1

  12. 12

    *(void **)(&funcp)在涉及dlsym()的这段代码中做什么?

  13. 13

    (n--!= 0){}在这段代码中做什么?

  14. 14

    这段代码中的箭头功能是做什么的?

  15. 15

    我如何弄清楚这段代码在做什么?

  16. 16

    这段代码究竟是做什么的?

  17. 17

    除了获取日期外,这段代码还在做什么?

  18. 18

    这段JavaScript代码中的.apply在做什么?

  19. 19

    *(void **)(&funcp)在涉及dlsym()的这段代码中做什么?

  20. 20

    这段代码中的箭头功能是做什么的?

  21. 21

    这段代码实际上在做什么?

  22. 22

    pl/sql 中的变量。这段代码在做什么?

  23. 23

    数组映射和字典——这段代码在做什么?

  24. 24

    这段代码返回什么?

  25. 25

    这段代码缺少什么?

  26. 26

    这样的返回结果如何,这段代码中的lambda函数是做什么的?

  27. 27

    python docs与我的re实现中的这段斐波那契代码在做什么?

  28. 28

    看起来像JavaScript对象的这段代码是做什么的?

  29. 29

    java扩展arraylist我想知道这段特定的代码做什么

热门标签

归档