gpt4 book ai didi

linux - 在 linux mint 中运行汇编程序时需要帮助

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:33 25 4
gpt4 key购买 nike

我是汇编编程的新手,在我的 PC 上运行汇编程序时遇到困难。我不太了解运行程序的过程。我正在做的是尝试运行如下所示的“HELLO WORLD”程序。

     #include <asm/unistd.h>
#include <syscall.h>
#define STDOUT 1
.data
hello:
.ascii "hello world\n"
helloend:
.text
.globl _start
_start:
movl $(SYS_write),%eax // SYS_write = 4
movl $(STDOUT),%ebx // fd
movl $hello,%ecx // buf
movl $(helloend-hello),%edx // count
int $0x80

movl $(SYS_exit),%eax
xorl %ebx,%ebx
int $0x80
ret

很抱歉没有添加评论,因为我自己大部分都不明白。我只是想在我的 PC 上设置环境,以便我可以学习汇编。

为了运行上面的代码,我首先将文件保存为“hello.S”。然后在当前目录中打开终端,运行以下命令:

     /lib/cpp hello.S hello.s
as -o hello.o hello.s //to generate an object file named hello.o
ld hello.o
./a.out

但是在运行可执行文件 a.out 之后,我没有看到预期的结果。我的意思是该程序应该打印出“hello world”,但我没有得到任何结果或任何错误消息。我知道程序是正确的。所以一定是我的系统或我运行程序的方式有问题。

为什么我在运行可执行文件 a.out 后没有得到任何结果?

最佳答案

让 gcc 完成“繁重的工作”通常会更好。另请注意,如果您使用的是 64 位 Linux 并尝试汇编和运行 32 位代码,那么您可能需要提供 -m32 以生成 32 位代码。

无论如何,我拿了你的代码,编译并运行如下:

linux:~/scratch> cat hello.S
#include <asm/unistd.h>
#include <syscall.h>
#define STDOUT 1
.data
hello:
.ascii "hello world\n"
helloend:
.text
.globl _start
_start:
movl $(SYS_write),%eax // SYS_write = 4
movl $(STDOUT),%ebx // fd
movl $hello,%ecx // buf
movl $(helloend-hello),%edx // count
int $0x80

movl $(SYS_exit),%eax
xorl %ebx,%ebx
int $0x80
ret
linux:~/scratch> gcc -m32 -nostartfiles -nodefaultlibs hello.S
linux:~/scratch> ./a.out
hello world
linux:~/scratch>

关于linux - 在 linux mint 中运行汇编程序时需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35734355/

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