我必须调用一个汇编方法,用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寄存器中。
感谢您的帮助。 :)