Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86汇编中的SSE2寄存器_Assembly_X86_Sse2 - Fatal编程技术网

Assembly x86汇编中的SSE2寄存器

Assembly x86汇编中的SSE2寄存器,assembly,x86,sse2,Assembly,X86,Sse2,我有以下代码: global _start section .text input: mov edx, buffer_size mov ecx, buffer mov ebx, 0 ; stdin mov eax, 3 ; read int 0x80 mov ecx, eax

我有以下代码:

global _start

section .text

input:
        mov     edx, buffer_size
        mov     ecx, buffer
        mov     ebx, 0                  ; stdin
        mov     eax, 3                  ; read
        int     0x80

        mov     ecx, eax                ; number of read bytes
        mov     eax, 0                  ; clear eax
        mov     ebx, 10
        lea     esi, [buffer]

convert:
        mov     edx, 0
        mov     dl, [esi]
        sub     dl, '0'
        push    edx
        mul     ebx                     ; edx = eax * ebx
        pop     edx
        add     eax, edx                ; store result in eax
        inc     esi
        dec     ecx
        cmp     ecx, 1                  ; conversion to int finished
        jnz     convert

        xorpd   xmm0, xmm0
        movups  xmm0, [eax]             ; move number to SSE2 register
        mov     ecx, 1
        movups  xmm2, [ecx]
        xorpd   xmm1, xmm1              ; clear xmm1
        movups  xmm1, xmm2

factorial:
        mulpd   xmm1, xmm0              ; result in xmm1
        subpd   xmm0, xmm2
        jnz     factorial



基本上,我从用户那个里得到这个数字,然后我想用SSE2计算这个数字的阶乘。“阶乘”部分还没有完成,我只想检查这些寄存器是否得到正确的值。所以问题是当我尝试
movupsxmm0[eax]
时,我得到了分段错误,因此我的问题是,什么是将这个数字传输到sse2寄存器的正确方法?我找不到任何好的来源来学习如何处理SSE2,如果有任何提示,我将不胜感激。我在Linux上工作。

movupsxmm0,[eax]
从eax中的地址加载16个字节,并将它们存储到
xmm0
中。但是:在您的代码中,
eax
似乎包含一个值,而不是一个地址。是否确实要将
eax
解释为地址并从内存加载?这同样适用于第二个
movupsxmm0,[ecx]

如果要将值作为整数移动到
xmm0
,请使用
movd
。如果要将其转换为单精度浮点,请使用
cvtsi2ss xmm0,eax
。如果要将其转换为双精度浮点,请使用
cvtsi2sd xmm0,eax


有关良好的SSE参考,请参阅。另外,请查看。但在此之前,您应该了解一些基础知识,比如表示内存操作数的
[…]
,以及这意味着什么。如果您不理解这一点,您就没有机会掌握汇编编程。汇编程序手册中应该有一些详细信息。

movupsxmm0,[eax]
从eax中的地址加载16个字节,并将它们存储到
xmm0
中。但是:在您的代码中,
eax
似乎包含一个值,而不是一个地址。是否确实要将
eax
解释为地址并从内存加载?这同样适用于第二个
movupsxmm0,[ecx]

如果要将值作为整数移动到
xmm0
,请使用
movd
。如果要将其转换为单精度浮点,请使用
cvtsi2ss xmm0,eax
。如果要将其转换为双精度浮点,请使用
cvtsi2sd xmm0,eax


有关良好的SSE参考,请参阅。另外,请查看。但在此之前,您应该了解一些基础知识,比如表示内存操作数的
[…]
,以及这意味着什么。如果您不理解这一点,您就没有机会掌握汇编编程。您的汇编程序手册应该有一些关于这方面的详细信息。

我如何将值从
eax
复制到
xmm0
?删除
[]
不起作用,然后我得到
错误:操作码和操作数的组合无效
谢谢,如果您愿意,您可以将您的评论作为答案发布,以便我可以接受;)如何将值从
eax
复制到
xmm0
?删除
[]
不起作用,然后我得到
错误:操作码和操作数的组合无效
谢谢,如果您愿意,您可以将您的评论作为答案发布,以便我可以接受;)