【问题标题】:Assembler code doesn't work on Linux汇编代码在 Linux 上不起作用
【发布时间】:2010-11-19 19:06:59
【问题描述】:

我正在尝试使用 JWasm 编译器在 Linux 中运行以下汇编代码。但是对于所有命令,它说,找不到命令。为什么?它在以“;”开头的行中返回错误。它是一种注释行吗?我可以删除这些行吗?谢谢。

;--- "hello world" for 64-bit Linux, using SYSCALL.
;--- assemble: JWasm -elf64 -Fo=Lin64_1.o Lin64_1.asm
;--- link:     gcc Lin64_1.o -o Lin64_1


stdout    equ 1
SYS_WRITE equ 1
SYS_EXIT  equ 60

.data

string  db 10,"Hello, world!",10

.code

_start:
mov edx, sizeof string
mov rsi, offset string
mov edi, stdout
mov eax, SYS_WRITE
syscall
mov eax, SYS_EXIT
syscall

end _start

【问题讨论】:

  • 听起来 OP 正在尝试将源文件作为 shell 脚本执行?
  • 你知道我应该如何解决它吗?谢谢。

标签: linux assembly


【解决方案1】:

我不熟悉 JWasm,但通常未缩进的条目是汇编指令而不是指令。

您想为任何实际的汇编程序指令(CPU 将运行的东西)放置一个(空格/制表符),而不是汇编程序指令(汇编程序用来帮助您的东西)

【讨论】:

  • 在文件中它的缩进,只是在这里它不是。你在 linux 上使用什么汇编编译器? GCC 编译它?
  • @psyhclo:我总是在 Linux 上使用gas(GNU 汇编器)。
  • 我安装了,但是,如何启动呢?我输入了./configure,make。而且它安装了一堆东西,但是如何让它编译文件呢??
【解决方案2】:

;通常在大多数类型的程序集中表示 cmets,奇怪的是 JWasm 不能识别这些行。尝试删除它们。

【讨论】:

  • 我删除了';'。但它不识别命令。对于程序的任何命令,JWasm 都会说找不到命令。不知道是不是汇编器的型号,因为linux的汇编代码和windows的汇编代码不一样。但是我已经尝试过使用 linux 的汇编代码,即使这样,JWasm 也无法识别。你已经用过 JWasm 了吗??
  • 我下载了 JWasm,它编译得很好; Lin64_1.asm:24 行,2 次通过,0 毫秒,0 次警告,0 次错误
  • 你是怎么配置的?我将文件夹 jwasm 粘贴到主文件夹中,并通过在终端中执行以下操作来访问它: cd jwasm ./jwasm cd Samples ./Lin64_1.asm 然后它返回此 ./Lin64_1.asm:第 1 行:@987654321 附近的 sintatic 错误@;' '/Lin64_1.asm: line 1: `;--- 64 位 Linux 的“hello world”,使用 SYSCALL。知道为什么会发生吗?谢谢。
  • 编译说明在文件中: ;--- assemble: JWasm -elf64 -Fo=Lin64_1.o Lin64_1.asm
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 2010-10-09
相关资源
最近更新 更多