gpt4 book ai didi

c - GNU 内联汇编程序——汇编指令的语法?

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:29 26 4
gpt4 key购买 nike

在下面的代码中,我可以通过 PSUBSW 指令得到 mm0 中的 mm0 - mm1 的结果。当我在 Mac book air 上用 gcc 编译时。

但是,PSUBSW 指令被解释为我们可以在Intel developer's manual 中的mm1 中得到mm1 - mm0 的结果。 : PSUBSW mm, mm/m64,从以 mm 为单位的带符号打包字中减去以 mm/m64 为单位的带符号打包字并使结果饱和。

#include <stdio.h>

int
main()
{
short int a[4] = {1111,1112,1113,1114};
short int b[4] = {1111,2112,3113,4114};
short int c[4];

asm volatile (
"movq (%1),%%mm0\n\t"
"movq (%2),%%mm1\n\t"
"psubsw %%mm1,%%mm0\n\t"
"movq %%mm0,%0\n\t"
"emms"
: "=g"(c): "r"(&a),"r"(&b));

printf("%d %d %d %d\n", c[0], c[1], c[2], c[3]);

return 0;
}

这有什么区别?哪个是 src,mm0 或 mm1?如果这个区别是 Intel 语法和 AT&T 语法。

最佳答案

GNU manual它声明 gcc 不是基于 Intel 汇编语言,而是基于 AT&T Unix 汇编语言的后裔。汇编语法有两个主要阵营:

  • 英特尔:opcode dest, src
  • AT&T:操作码 src,dest

在您的示例中,您使用的是默认的 AT&T 语法。但是,如果您更喜欢切换到 Intel 语法,则可以使用 -masm=intel 进行编译或使用以下命令:

__asm__(".intel_syntax;" ...);

您可以在 this 中找到关于该主题的更多讨论。或 this Stackoverflow 线程,或阅读更多 here .

关于c - GNU 内联汇编程序——汇编指令的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439337/

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