如何将int从xmm寄存器移动到eax寄存器?

时间:2015-06-04 15:26:48

标签: c assembly x86 nasm sse

我必须调用一个汇编方法,用C中的sse计算两个整数的加法。

简单的C代码是:

#include <stdio.h>
#include <stdlib.h>

extern int add(int a, int b);

int main(){

    int a=5;
    int b=2;
    int n = add(a,b);
    printf("%d\n",n);

    return 0;

}

虽然nasm代码是:

section .bss
    RISULTATO   resd    1

section .text

global add

add:
    ;-----------------------------------------------
    ;   start point of the function
    ;-----------------------------------------------

    push ebp    ; salva il Base Pointer
    mov ebp, esp    ; il Base Pointer punta al Record di Attivazione corrente
    push ebx    ; salva i registri da preservare
    push esi
    push edi

    ;-----------------------------------------------
    ;   add implementation
    ;-----------------------------------------------

    movss xmm0, [ebp+8]
    movss xmm1, [ebp+12]

    addss xmm1, xmm0
    movss [RISULTATO], xmm1

    mov eax, [RISULTATO]

    ;-----------------------------------------------
    ;   exit point of the function
    ;-----------------------------------------------

    pop edi     ; ripristina i registri da preservare
    pop esi
    pop ebx
    mov esp,ebp ; ripristina lo Stack Pointer
    pop ebp     ; ripristina il Base Pointer
    ret     ; ritorna alla funzione chiamante

但是这样我需要从存储在内存中的RISULTATO传递。 有什么方法可以避免这种情况,并将存储在xmm0中的结果直接移动到eax?

当然我需要在eax中移动添加的结果以将其传递给我的C方法,因为返回值必须在eax寄存器中。

感谢您的帮助。 :)

0 个答案:

没有答案