3

只是一个简单的问题:

假设我有以下两个汇编程序:

1:

add10:
   add eax, 10
   ret
;call add5 from other file

2:

add5:
   add eax, 5
   ret
;call add10 from other file

我可以add10从第二个文件调用(在第一个文件中声明),反之亦然?如果是这样,怎么办?(即使不可行)

注意:这将在裸机上运行,​​而不是在任何花哨的 NT 调用上!

谢谢。

编辑:我在 Windows 上使用 NASM。

4

2 回答 2

4

两个文件:

1:

BITS 32

GLOBAL add5

section .code
add5:
    add eax, 5
    ret

2:

BITS 32

EXTERN add5
EXTERN printf
EXTERN ExitProcess

section .data
    fmt db `eax=%u\n`

section .code
add10:
    add eax, 5
    call add5
    ret

_main:
    mov eax, 87
    call add10

    push eax
    push fmt
    call printf
    add esp, 8

    push 0
    call ExitProcess

将它们组装并链接在一起。我用 GoLink 作为链接器,其他链接器类似:

nasm.exe -fwin32 -o add5.obj add5.asm
nasm.exe -fwin32 -o add10.obj add10.asm
GoLink.exe /ENTRY:_main /console /fo add10.exe add5.obj add10.obj kernel32.dll msvcrt.dll

我将源命名为“add5.asm”和“add10.asm”。汇编器生成“add5.obj”和“add10.obj”。链接器使用“add5.obj”和“add10.obj”以及一些系统库(用于“printf”和“ExitProcess”)。结果是可执行文件“add10.exe”。查看命令行以获取这些名称的顺序。名称是任意的。

高温高压

于 2014-04-23T06:41:11.267 回答
2

如果两个文件都链接到同一个可执行文件,是的。查找 EXTERN 或 EXTRN。

于 2014-04-23T04:47:33.363 回答