Assembly 非法指令臂组件Raspberry Pi 4

Assembly 非法指令臂组件Raspberry Pi 4,assembly,arm,raspberry-pi4,Assembly,Arm,Raspberry Pi4,我第一次在我的Raspberry Pi 4上尝试汇编代码(如果代码的格式不是标准的,那么很抱歉),我正在尝试执行我的Hello World代码 .global _start _start: mov r0, #1 ldr r1, =helloworld mov r2, #12 mov r8, #64 svc 0 mov r0, #0 mov r8, #93 svc 0 .data helloworld: .ascii "Hello World\n" 代码编译时没有错误,但

我第一次在我的Raspberry Pi 4上尝试汇编代码(如果代码的格式不是标准的,那么很抱歉),我正在尝试执行我的Hello World代码

.global _start

_start:
mov r0, #1
ldr r1, =helloworld
mov r2, #12
mov r8, #64
svc 0
mov r0, #0
mov r8, #93
svc 0

.data
helloworld: .ascii "Hello World\n"

代码编译时没有错误,但是当我尝试使用./HelloWorld执行代码时,我得到了arror“非法指令”,没有其他消息。有什么想法吗?

您正在使用32位汇编语言中的64位系统调用号和ABI,这可能是在32位进程中,但不起作用


将32位系统调用号放入r7(write=4,exit=1)或在64位进程中使用64位汇编语言(不同的寄存器名)。

使用调试器和/或strace。我假设您的上一次svc调用是错误的,因此它不会终止进程,cpu将继续执行。请参阅文档。使用
r8
是可疑的,而且数字也很奇怪。您使用的是什么操作系统?我发现了我的问题,我正在学习的那本书说我需要在我的raspberry pi上运行64位版本的Linux,但现在我正在运行32位raspbian。@适用于ARM64和ARM32的LordBobbiox Assembly差别很大。我很惊讶你没有注意到。您不能在32位Raspbian上运行ARM64程序。请注意,所有体系结构上的Linux系统调用号都不同。没有“64位系统调用号”或“32位系统调用号”,而是“i386系统调用号”、“amd64系统调用号”、“ARM EABI系统调用号”等。