2009-04-26 13 views
0

ich eine Funktion geschrieben haben NABS in Baugruppendatei math.nasm wie folgtAufruf Assemblierung-Routine in Objective C

%ifdef USE_x86_ASM 
SECTION .text 

    cglobal nABS 
;*------------------------* 
;* int nABS(int a)  * 
;* return value in eax * 
;*------------------------* 
ALIGN 16 
    nABS: 
     push ebx 
     ...... 
       ...... 
       pop ebx   
     ret 
%endif 

ich diese Funktion von c-Funktion func1 in Datei myfunc.c nenne
ich verwende nasm Assembler für Baugruppendatei ich bin mit Xcode 3.1-Version und gcc 4.0 Compiler ich habe USE_x86_ASM definiert

in Xcode Einstellungen Projekteinstellungen/Build/NASM BUILD OPTIONs/ANDERE FLAGS AS -DUSE_X86_ASM
auch ich diese vorher definiert haben -Prozesse sor in myfunc.h auch Datei-Header
Ich habe NAbs in myfunc.h als

#define USE_x86_ASM 
int nABS(int a); 

erklärt und enthalten myfunc.h in myfunc.c
Beide myfunc.c und math.nasm sind sussessfuly zusammengestellt und erzeugen math.o und myfunc.o, aber ich bekomme einen Verknüpfungsfehler

kann mir jemand sagen, warum ich Linkfehler erhalte?


ich die Modifikation zusätzlich vorgeschlagen habe ich entfernt% ifdef der modifizierte Code Bedingung als

.text 
.align 2 
.globl _nABS 
.private_extern _nABS 

_nABS folgt: Push ebx ...... ..... . pop ebx
ret immer noch bekomme ich gleichen Linkfehler die Datei ist kompiliert, aber ich bekomme den gleichen Linkfehler. Ich habe überprüft, dass die .o generiert wird app.LinkFileList enthalten.

Antwort

1

Einige C-Compiler fügen C-Symbolen einen vorangehenden Unterstrich hinzu. Fügen Sie einfach den Unterstrich zu Ihrem Label in der Assembly-Datei hinzu (und selbstverständlich auch globl).

1

Mehrad ist richtig Dies sollte

%ifdef USE_x86_ASM 
SECTION .text 

;*------------------------* 
;* int nABS(int a)  *  
;* return value in eax *  
;*------------------------* 
ALIGN 16 
global _nABS 
    nABS: 
     push ebx 
     ...... 
       ...... 
       pop ebx   
     ret 
%endif 

arbeiten