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

2023-11-30

我正在做一个项目,该项目将我编写的子例程附加到老师包含的主文件中。他给了我们使子程序全局化的说明,但显然我是个白痴。这两个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(使用前将#替换为@)

nasm 从另一个文件调用子例程 的相关文章

  • 如何在8086汇编中减去两个64位整数

    编写一个名为 SUB64 的程序 用 0x0160 和 0x0164 中的 64 位整数减去内存位置 0x0150 和 0x0154 中的 64 位整数 将结果存储在内存位置 0x0170 和 0x0174 中 我理解将其分成更小的部分背后
  • 如何停止子程序并升起标志?

    I am writing a program in Fortran 95 to be compiled with with gfortran containing a subroutine that performs a certain c
  • 尝试为程序集/nasm 应用程序创建 Makefile 文件

    我正在尝试创建一个简单的 make 文件 我现在使用的命令是 nasm f elf64 main asm ld s o test1 main o 就是这样 我如何从它们创建一个 Makefile 我已经阅读了手册 但还没有找到解决方案 您可
  • “创建共享对象时不能使用针对‘.bss’的重定位 R_X86_64_32S”

    我对此完全陌生 但在课堂上 老师给了我们他为我们编写的文件来运行它 然后它运行得很好 但是当我尝试在家中执行此操作时 我在 VirtualBox 上使用 Linux 并使用 nasm f elf64 hello asm o hello o
  • 带有 x86-64 组件的谐波系列

    尝试计算调和级数 现在我正在输入我想要添加的数字 当我输入像 1 2 这样的小数字时 程序只是停止 不会崩溃 它似乎正在进行计算 但它永远不会完成程序 这是我的代码 denominator xor r14 r14 zero out r14
  • macOS 上的 NASM 间接寻址程序集不正确

    在 macOS 上汇编以下代码 global start default rel section text start lea rdx buffer 0 lea rdx buffer 1 lea rdx buffer 2 lea rdx b
  • ORG 汇编指令有什么作用?

    谁能给我一个关于 ORG 指令的全面描述 何时以及为何在汇编编写的应用程序中使用它 在 x86 或 AMD64 上使用 Nasm ORG用于设置汇编器位置计数器 这可能会也可能不会在链接时转换为加载地址 它可用于定义绝对地址 例如当定义诸如
  • 是什么原因导致“x.asm:(.text+0xd): 对‘y’的未定义引用”?

    我已经很长一段时间没有使用 C 和汇编语言进行编程了 大约 2 年 现在我决定重新开始 但我想做一些更复杂的事情 我考虑过创建一个简单的内核 现在我在网上找到了这个源代码 启动 asm global loader extern kernel
  • 将小数字加载到 64 位 x86 寄存器中

    在 64 位 x86 CPU 下 通常我们将数字 1 加载到寄存器中 如下所示 mov rdx 1 48BAFFFFFFFFFFFFFFFF 该指令按照旧版本 NASM 的组装方式占用 10 个字节 另一种方法是 xor rdx rdx 4
  • 我应该如何将对象传递给子例程?

    这些方法之一是最好还是最差的方法 使用范围 my cache CHI gt new driver gt File expires in gt 3600 sub one if my data cache gt get key one sub
  • 在除以零的中断处理程序中该怎么做?

    操作系统中断处理程序应该如何处理与编码错误相关的中断 例如 我尝试除以 0 来测试我的中断 但我的中断处理程序被调用 然而 由于 div 指令没有成功执行 EIP 不会更新到它之后的下一条指令以及从中断处理程序返回后iret 它又回到了错误
  • 如何获取变量的地址并在 nasm x86 程序集中取消引用它?

    在c语言中我们使用 获取变量的地址并 取消引用该变量 int variable 10 int pointer pointer variable 汇编中没有变量 variable db A 做几件事 它定义了汇编时间符号variable 就像
  • 函数声明“sub function($$)”是什么意思?

    我使用 Perl 一段时间了 但今天我遇到了这段代码 sub function1 snip 这在 Perl 中意味着什么 它是一个带有原型 http perldoc perl org perlsub html Prototypes这需要两个
  • 汇编部分 .code 和 .text 的行为不同

    我是装配新手 从我所学到的 code与 text 但是使用下面的代码会崩溃 code segment data msg db hello world 0xa len equ msg section text global start sta
  • nasm idiv 为负值

    尝试将正数除以负数 目前我的程序将正确划分 并且我可以正确访问其余部分 但是当我输入一个正数除以一个负值时 它根本不会被除 我知道有一种方法可以 签名扩展 并且它会正确划分 我只是看不懂说明书 movsss imm reg reg mem
  • void 子例程返回什么?

    我刚刚对pluralsight 进行评估 并得到了以下问题 无效子程序返回什么 我的印象是无效子例程没有返回任何内容 但这不是提供的答案之一 多项选择题 Net 在后台返回值类型还是这个问题不正确 我得到的选择是 整数 布尔值 细绳 约会时
  • 从 NASM 调用 C 函数 _printf 会导致分段错误

    我一直在尝试使用 NASM 在 Mac OS 和 Windows 上学习 64 位汇编 我的代码是 extern printf section data msg db Hello World 10 0 section text global
  • Polygot 包含 nasm/yasm 和 C 的文件

    我有一堆幻数 我想将它们包含在由 nasm 或 yasm 编译的 C 程序和汇编文件中 在纯 C 语言中 该文件看起来像是一系列定义 例如 define BLESS 55378008 define ANSWER 42 在 nasm 或 ya
  • 打印出匿名子程序的代码

    我目前正在一个非常复杂的 Perl 架构中工作 我想创建一些调试工具 由于许多行为涉及匿名子例程 因此我想分析其中一些行为 而我所要做的就是对子例程的引用 简而言之 有没有办法打印子例程引用的代码 因为 Perl 被解释 它可能仍然可用 核
  • 将十进制转换为十六进制

    首先 这是家庭作业 我正在尝试将 5 位数字读入寄存器 bx 假定该数字不大于 65535 16 位 以下是我尝试这样做的方法 但是 当我尝试打印该号码时 我仅打印输入的最后一位数字 这让我猜测 当我向 bx 添加另一个数字时 它会覆盖以前

随机推荐

  • 为什么当类返回 Lambda 时反射不起作用

    我遇到了一种有点奇怪的行为 我使用注释来标记具有特定用途的某些类 然后使用 org reflections 库查找具有特定注释的所有类 然而 当一个类实现一个返回 lambda 函数的方法时 反射将不再找到带注释的类 类的签名没有改变 注释
  • 如何自定义 Jersey JAXB 序列化的 XML 输出

    我有一些 javax xml bind annotation Xml 带注释的类 用于 REST Web 服务 Jersey 设置在 Spring 管理的 Web 容器中 并且 Web 服务返回格式良好的 xml 我们使用 maven en
  • Joomla 登录重定向回上一页

    我有某些页面需要用户登录 Joomla 当他们单击这些页面的链接时 iframe 覆盖层中会出现一个登录框 一旦他们登录 我想将他们重定向回他们尝试登录的页面 但是 Joomla 似乎只允许用户重定向到登录表单参数中预定义的页面 有没有办法
  • 通过单独的任务更新 BindingSource 中的元素

    我有一个类 比如 Person 有一个 ID 和一个名字 此类正确实现了 INotifyPropertyChanged 补充 有些人要求Person类 我真正的问题是一个更复杂的类 我已将其简化为一个相当简单的 POCO 以确保这不是因为我
  • 如何通过 WebAssembly 将 Rust 闭包返回给 JavaScript?

    的评论关闭 rs非常棒 但是我无法让它从 WebAssembly 库返回闭包 我有一个这样的函数 wasm bindgen pub fn start game start time f64 screen width f32 screen h
  • 真实的 iPhone 设备上有类似“getStreamsToHost”的东西吗?

    我想使用苹果的示例代码将 NSOutputStream 写入服务器 NSURL website NSURL URLWithString str IP NSHost host NSHost hostWithName website host
  • 如何使用文本框中的 onchange() 事件获取旧值

    我有一个文本输入 当页面加载时 一个值会被填充到其中 如果用户更改文本框中的任何内容 那么我想获取更改后的值 新值 和旧值 但打电话ELEMENT value它只返回更改的 新的值 我如何获得旧值 这是我的代码
  • Python请求错误10060

    我有一个抓取网站的脚本 直到今天它运行完美 但现在不这样做了 它给中小企业以下错误 Connection Aborted Error 10060 A connection attempt failed becvause the connec
  • 用于查找带有自己的 Java 版本的应用程序的 Powershell 脚本

    我正在寻找一种方法来从所有已安装的应用程序中查找 一个带有自己的java版本的应用程序 网上有一些脚本可以查看 PC 上安装的版本 但没有脚本可以获取使用 Java 的应用程序以及它们所拥有的 Java 版本 我发现与使用系统资源管理器很接
  • 使用 #define 定义数字的平方

    我只是在浏览面试中经常被问到的某些代码 我提出了一些问题 是否有人可以帮助我解决这个问题 我现在对此完全困惑 include
  • 为什么打印指针与打印取消引用的指针打印相同的内容?

    来自 Rust 指南 取消引用 获取被引用的值而不是引用本身 y 我们使用星号 所以我这样做了 fn main let x 1 let ptr y x println x ptr y x ptr y 即使没有显式取消引用 这也会给我相同的结
  • 在 C# 中,是否可以将 List 转换为 List

    我想做这样的事情 List
  • 如何评估包含等号的字符串?

    我有一些问题eval功能 我有一个列表 例如 list1 a 1 b 2 c 3 我想将元组的每个值分配给第一个元素 for el in list1 eval el 0 el 1 我怎样才能做到这一点 You could做这个 exec s
  • 如何在 Django 中更新用户配置文件

    我想让我的学生在登录后更新他的个人资料 但我似乎无法正确编码个人资料更新 这是我的代码 class User AbstractUser pass class Student models Model user models OneToOne
  • Google Cloud Dataflow 用户定义的 MySQL 源

    我正在编写一个 Google 数据流管道 并且作为其中之一Sources我需要通过查询获取 MySQL 结果集 那么有几个问题 作为管道中的一个步骤 从 MySQL 中提取数据的正确方法是什么 可以简单地使用 JDBC 内联完成吗 如果我确
  • 在 Python 中访问 Azure Key Vault 时出现意外的关键字参数“tenant_id”

    我试图访问我的密钥保管库 但总是遇到相同的错误 AppServiceCredential get token failed request got an unexpected keyword argument tenant id Manag
  • PhantomJS 不返回结果

    我正在测试 PhantomJS 并尝试返回在angel co 上列出的所有初创公司 我决定使用 PhantomJS 因为我需要通过单击底部的 下一步 来对首页进行分页 现在这段代码不返回任何结果 我对 PhantomJS 完全陌生 并且已经
  • 带有运算符重载的矩阵乘法

    我正在尝试为我构建的矩阵类创建一个重载运算符 我的矩阵类将矩阵存储在动态分配的多维数组中 我只是想通过将两个完全相同的矩阵相乘并显示输出来测试我的重载运算符 我得到了奇怪的结果 我相信这与我的 for 循环中的条件之一有关 然而 我已经遍历
  • 查找字符串中存在的不同字符

    有没有办法找到字符串中存在的所有唯一字符没有找到该字符串的所有出现位置 例如 设为 string a mississippi 输出应为 i m p s 在 C 中是否有任何内置函数可以找到它 你可以使用std sort std unique
  • nasm 从另一个文件调用子例程

    我正在做一个项目 该项目将我编写的子例程附加到老师包含的主文件中 他给了我们使子程序全局化的说明 但显然我是个白痴 这两个asm文件位于同一个文件夹中 我正在使用nasm f elf g prt dec asm and ld prt dec