Вызов процедуры сборки из другого файла сборки?

Просто простой вопрос:

Допустим, у меня были следующие две программы сборки:

1:

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

2:

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

Могу ли я позвонить add10 (заявлено в первом файле) из второго файла, или наоборот? Если так, как это можно сделать? (даже если это невозможно)

ПРИМЕЧАНИЕ: это будет работать на голом металле, а не на любых модных звонках NT!

Благодарю.

Изменить: я использую NASM на Windows.

2 ответа

Решение

Если оба файла связаны в один и тот же исполняемый файл, да. Поиск EXTERN или EXTRN.

Два файла:

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". Посмотрите на командные строки, чтобы получить порядок этих имен. Имена произвольны.

НТН

Другие вопросы по тегам