2013-03-01 2 views
1

Я делаю проект, который прикрепляет подпрограмму, которую я написал в основной файл, включенный учителем. Он дал нам инструкции для того, чтобы сделать нашу подпрограмму глобальной, но, по-видимому, я идиот. Два файла asm находятся в одной папке, я использую nasm -f elf -g prt_dec.asm и ld prt_dec, а затем делаю то же самое для main.asm. Вот соответствующий код в main.asm:nasm вызов подпрограммы из другого файла

SECTION .text     ; Code section. 
global _start     ; let loader see entry point 
extern prt_dec 

_start: 
mov  ebx, 17 
mov  edx, 214123 
mov  edi, 2223187809 
mov  ebp, 1555544444 


mov  eax, dword 0x0 
call prt_dec 
call prt_lf 

Линия call prt_dec бросает «неопределенная ссылка на prt_dec», когда я использую ld main.o

Вот сегмент кода из моего prt_dec.asm:

Section .text 
    global prt_dec 
    global _start 

start: 
prt_dec: 
     (pushing some stuff) 
L1_top: 
(code continues) 

ответ

2

Вы хотите вызвать процедуру в другом asm-файле или объектном файле? если вы Сборка prt_dec.asm и связывания нескольких ASM файлов для использования в основной программе, вот пример, 2 ASM файлы в собранном виде и связаны друг с другом ... * Примечание *hello.asm* НЕ * есть начать этикетку!

Основной файл ASM: hellothere.asm

sys_exit equ 1 

extern Hello 
global _start 

section .text 
_start: 
    call Hello 

    mov  eax, sys_exit 
    xor  ebx, ebx 
    int  80H 

Второй ASM файл: hello.asm

sys_write equ 4 
stdout  equ 1 

global Hello 

section .data 
szHello  db "Hello", 10 
Hello_Len equ ($ - szHello) 

section .text 
Hello: 
     mov  edx, Hello_Len 
     mov  ecx, szHello 
     mov  eax, sys_write 
     mov  ebx, stdout 
     int  80H 
    ret 

Makefile:

APP = hellothere 

$(APP): $(APP).o hello.o 
    ld -o $(APP) $(APP).o hello.o 

$(APP).o: $(APP).asm 
    nasm -f elf $(APP).asm 

hello.o: hello.asm 
    nasm -f elf hello.asm 

Теперь, если вы просто хотите, чтобы отделить кода в несколько asm-файлов, вы можете включить их в свой основной источник: с %include "asmfile.asm" на beginni ng основного исходного файла и просто соберите и соедините свой основной файл.

+0

Спасибо, похоже, проблема заключалась в моем методе сборки файлов. – rcj

 Смежные вопросы

  • Нет связанных вопросов^_^