混合 C 和汇编。 64 位 Linux 上的“Hello World”

2023-12-21

基于此tutorial https://pl.wikibooks.org/wiki/C/%C5%81%C4%85czenie_z_innymi_j%C4%99zykami,我正在尝试写Hello World到 64 位 Linux 上的控制台。编译没有出现错误,但我在控制台上也没有收到任何文本。我不知道出了什么问题。

write.s:

.data
    SYSREAD = 0
    SYSWRITE = 1
    SYSEXIT = 60
    STDOUT = 1
    STDIN = 0
    EXIT_SUCCESS = 0

message: .ascii "Hello, world!\n"
message_len =  .-message

.text
.globl _write
_write:
    pushq %rbp
    movq %rsp, %rbp
    movq $SYSWRITE, %rax
    movq $STDOUT, %rdi
    movq $message, %rsi
    movq $message_len, %rdx
    syscall
    popq %rbp
    ret

main.c:

extern void write(void);
int main (int argc, char **argv)
{
    write();
    return 0;
}

编译:

as write.s -o write.o
gcc main.c -c -o main.o
gcc main.o write.o -o program
./program 

好吧,我的代码有两个错误:

1)我将我的函数命名为“write”,这是常见的c名称,我需要重命名它。

2)在函数名称中,我不应该添加下划线。

正确的代码:

writehello.s

.data
SYSREAD = 0
SYSWRITE = 1
SYSEXIT = 60
STDOUT = 1
STDIN = 0
EXIT_SUCCESS = 0

message: .ascii "Hello, world!\n"
message_len =  .-message

.text
#.global main
#main:
#call write
#movq $SYSEXIT, %rax
#movq $EXIT_SUCCESS, %rdi
#syscall

#********
.global writehello
writehello:
pushq %rbp
movq %rsp, %rbp
movq $SYSWRITE, %rax
movq $STDOUT, %rdi
movq $message, %rsi
movq $message_len, %rdx
syscall
popq %rbp
ret

main.c

extern void writehello(void);
int main (int argc, char **argv)
{
    writehello();
    return 0;
}

编译保持原样:)感谢所有提供帮助的人!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

混合 C 和汇编。 64 位 Linux 上的“Hello World” 的相关文章

随机推荐

  • 如何设置热图纵横比

    我有一个单通道图像 其中每个整数像素值映射到一个字符串 例如 5 gt 人 我正在尝试创建一个交互式图像 将鼠标悬停在像素上将显示其相应的字符串 我认为使用绘图热图可能是做到这一点的方法 我遇到的问题是 真的很慢 如果我将 numpy 数组
  • Hibernate 多对多映射与附加列?

    我需要在许多生成的表中添加额外的列 有 2 个实体彼此之间存在多对多关联 用户多对多组 Entity public class User other fields private Set
  • ndb 一对多建模:重复 KeyProperty 与外键的优点

    我的问题是关于在 ndb 中建模一对多关系 我知道这可以通过 至少 两种不同的方式来完成 使用重复属性或使用 外键 我在下面创建了一个小例子 基本上我们有一篇文章可以有任意数量的标签 假设标签添加后可以删除但不能更改 我们还假设我们不担心交
  • 如何强制嵌套列表项与父列表项具有相同的宽度?

    我有一个水平家长列表 某些列表项在单击时会显示嵌套的垂直列表 如何强制垂直子列表中的项目与父列表项目的宽度相同 See jsFiddle http jsfiddle net BXnxc 1 HTML ul class mainMenu ho
  • 如何处理来自BackgroundWorker线程的异常?

    在 WPF 应用程序中 我有一个预定的数据库访问任务 由计时器定期运行 并且该任务已在 BackgroundWorker 线程中执行 当连接尝试失败时 我通过以下方式引发异常try catch构造 我想更新 UI 线程中的状态栏文本 是否有
  • C# 函数接受 Enum 项并返回枚举值(而不是索引)

    假设我有以下声明 public enum Complexity Low 0 Normal 1 Medium 2 High 3 public enum Priority Normal 1 Medium 2 High 3 Urgent 4 我想
  • 从 Firebase Web 应用程序发送邮件

    var express require express var app express var nodemailer require nodemailer var transporter nodemailer createTransport
  • Nestjs:如何构建nestjs应用程序并生成dist文件夹?

    我正在尝试编写 jenkins shell 脚本来部署 Nestjs 应用程序 我尝试 npm run start prod 这个生成 dist 文件夹 但它也提供我不需要它的应用程序 如何构建应用程序 你可以运行 npm run buil
  • x:Key="{x:Type TextBox}" 的作用是什么?

    一切都在标题中 我不止一次读过设置这样的样式 大致相当于 上次在对另一个问题的评论中 https stackoverflow com questions 4853272 how to set a comboboxs style inside
  • 从 CDATA 中检索值

    我正在使用 java JAXB 我想从中检索数据CDATA 所需输出 Need Help 任何人都可以帮助我吗 我尝试了几种解决方案 Thanks try this XmlAccessorType XmlAccessType FIELD p
  • 为什么类名不大写会导致编译器错误?

    这个 Groovy 脚本运行良好 println 0 class MyClass public MyClass int j public MyClass method return this 此操作因编译错误而失败 意外标记 公共位于行 5
  • Prolog 中发生检查的简单最坏情况是什么?

    许多论文确实指出 如下所示的方程统一问题可能会在指数时间内运行 当occurs check true 没有规定这是一个顶级查询或子句主体 它只是等式统一问题 X1 f X0 X0 X2 f X1 X1 Xn 1 f Xn 2 Xn 2 Xn
  • 图像分类 - 检测图像是否类似于卡通

    我有大量 JPEG 缩略图 尺寸从 120x90 到 320x240 不等 我想将它们分类为逼真或卡通 如何使用图像魔术师 http en wikipedia org wiki ImageMagick的实用程序 convert compar
  • Xcode 4.3.3 找不到任何头文件

    到目前为止 我已经设法让 Xcode 链接到我安装在 usr local lib 下的 Gnu Scientific Libraries GSL 并在 usr local include 下包含头文件 在 Build Phases gt L
  • 多播期间的行为变化[重复]

    这个问题在这里已经有答案了 下面是一个简单的声明 System out println int char byte 1 当我运行它时 我得到的输出为65535 我不知道原因 它 执行期间 byte 1返回 1 因此 int char byt
  • 具有三个条件的索引/匹配

    我搜索了又搜索 搜索了又搜索 我只能找到具有两个条件的索引 匹配的解决方案 有谁有具有三个标准的索引 匹配的解决方案吗 作为我的实际数据的示例 我想索引 匹配年份 类型和名称以查找月份列中的数据 您可以使用以下方式匹配无限数量的条件求和 找
  • 为什么我不能使用显式模板参数调用模板友元函数?

    考虑以下示例 struct S template
  • Rails Devise gem - 通过将默认用户模型拆分到其他模型来自定义默认用户模型

    我尝试过 devise Rails gem 并且想知道最好的方法是什么来分割它在多个模型中创建的用户模型属性 目前 我的用户模型如下所示 这是默认的设备行为 用户 id 整数 电子邮件 字符串 加密密码 字符串 密码盐 字符串 重置密码令牌
  • Passport-js 如何创建自定义策略

    我正在寻找制定自己的策略 I have client id client secret以及相关的元数据 我也知道执行流程 所以我想创建自己的策略并添加自定义逻辑进行身份验证 我在看护照策略 https www npmjs com packa
  • 混合 C 和汇编。 64 位 Linux 上的“Hello World”

    基于此tutorial https pl wikibooks org wiki C C5 81 C4 85czenie z innymi j C4 99zykami 我正在尝试写Hello World到 64 位 Linux 上的控制台 编