I'm doing a project that attaches a subroutine that I wrote to a main file included by the teacher. He gave us the instructions for making our subroutine global but apparently I'm an idiot. The two asm files are in the same folder, I'm using nasm -f elf -g prt_dec.asm
and ld prt_dec
and then doing the same for main.asm. Here's the relevant code in the main.asm:
SECTION .text ; Code section.global _start ; let loader see entry pointextern prt_dec_start:mov ebx, 17mov edx, 214123mov edi, 2223187809mov ebp, 1555544444mov eax, dword 0x0call prt_deccall prt_lf
The line call prt_dec
throws "undefined reference to prt_dec" when i use ld main.o
Here's the a code segment from my prt_dec.asm:
Section .text global prt_dec global _startstart:prt_dec: (pushing some stuff)L1_top:(code continues)
/////////////
You want to call a routine in another asm file or object file?if you are Assembling prt_dec.asm and are linking multiple asm files to use in your main program, here is a sample, 2 asm files Assembled and linked together... * NOTE * hello.asm
*DOES NOT * have a start label!
Main asm file: hellothere.asm
sys_exit equ 1extern Hello global _start section .text_start: call Hello mov eax, sys_exit xor ebx, ebx int 80H
Second asm file: hello.asm
sys_write equ 4stdout equ 1global Hellosection .dataszHello db "Hello", 10Hello_Len equ ($ - szHello)section .textHello: 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
Now, if you just want to separate your code into multiple asm files, you can include them into your main source: with %include "asmfile.asm"
at the beginning of your main source file and just assemble and link your main file.