我正在做一个项目,该项目将我编写的子例程附加到老师包含的主文件中。他给了我们使子程序全局化的说明,但显然我是个白痴。这两个asm文件位于同一个文件夹中,我正在使用nasm -f elf -g prt_dec.asm
and ld prt_dec
然后对 main.asm 执行相同的操作。 main.asm中的相关代码如下:
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)
您想调用另一个 asm 文件或目标文件中的例程吗?
如果您正在组装 prt_dec.asm 并链接多个 asm 文件以在主程序中使用,这里是一个示例,2 个 asm 文件已组装并链接在一起...* NOTE * 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
生成文件:
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"
在主源文件的开头,然后组装并链接主文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)