gpt4 book ai didi

nasm 从另一个文件调用子程序

转载 作者:行者123 更新时间:2023-12-01 06:03:09 26 4
gpt4 key购买 nike

我正在做一个项目,将我编写的子程序附加到老师包含的主文件中。他给了我们使我们的子程序成为全局性的说明,但显然我是个白痴。这两个 asm 文件在同一个文件夹中,我正在使用 nasm -f elf -g prt_dec.asmld 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

当我使用 ld main.o 时,call prt_dec 行抛出“undefined reference to prt_dec”

这是我的 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 文件组装并链接在一起...... * 注意 * 你好。 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

第二个汇编文件: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"然后组装并链接您的主文件。

关于nasm 从另一个文件调用子程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15148730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com