如何在NASM中导出符号

Nul*_*lik 3 assembly gcc x86-64 nasm

我的函数未由NASM汇编器导出,因此无法将其与C程序链接。我使用的export指令像手册中所说的一样,但是未被识别。怎么了?这是我的方法:

[niko@dev1 test]$ cat ssefuncs.S 
use64
section .data
NEW_LINE_4_SSE  db  '1111111111111111'

section .text

export find_nl_sse

find_nl_sse:
    mov rax,NEW_LINE_4_SSE
    movntdqa xmm0,[esi]
    pcmpestri xmm0,[rax],0x0

    ret

[niko@dev1 test]$ nasm -f elf64 -o ssefuncs.o ssefuncs.S
ssefuncs.S:7: error: parser: instruction expected
[niko@dev1 test]$ 
Run Code Online (Sandbox Code Playgroud)

如果我省略export,重新编译程序集并尝试链接,则结果代码将不会与我的C程序链接:

[niko@dev1 test]$ gcc -o bench3 ssefuncs.o bench3.o
bench3.o: In function `main':
/home/niko/quaztech/qstar/test/bench3.c:34: undefined reference to `find_nl_sse'
collect2: error: ld returned 1 exit status
[niko@dev1 test]$ 
Run Code Online (Sandbox Code Playgroud)

我也尝试添加global指令,但出现相同的错误。为什么NA​​SM文档如此令人误解?

use*_*249 5

这是将标签定义为在当前装配单元外部可见的正确方法。

global _main 
_main: 
Run Code Online (Sandbox Code Playgroud)
  1. global声明必须是实际的标签之前
  2. 标签必须以单个下划线开头

C文件会将标签引用为

extern _main
Run Code Online (Sandbox Code Playgroud)