我正在尝试做一个非常简单的汇编程序运行,但是我似乎无论我做什么都会出现段错误。NASM:MOV上的SegFault ECX
这里是我的代码(应打印“A”在Linux机器上)
section .data
buffer times 50 db 97
pointer db 0
section .text
global _start
_start:
mov ECX , pointer
mov EDX , [buffer + ECX]
mov EAX , 4
mov EBX , 1
mov ECX , EDX
mov EDX , 1
int 0x80
它会导致第一MOV段错误,但它似乎明显,我认为它应该工作。
我把它减少到几乎没有,它仍然segfault。
section .data
msg db "hello"
section .text
global _start
_start:
mov EAX,1
我碰到这样成功地:
section .text
global _start
_start:
mov ax, 0b
dec ax
sub ax, 11111111b
mov bx, 97
add ax, bx
mov [INVENTORY], ax ; put a in first inventory pos
mov eax, 4
mov ebx, 1
mov ecx, INVENTORY
mov edx, 1
int 0x80
mov ax, [INVENTORY]
add ax, 1
mov [INVENTORY + 1], ax ; put b in second inventory pos
mov [VAR], ax
mov eax, 4
mov ebx, 1
mov ecx, VAR
mov edx, 1
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, '\n'
mov edx, 1
int 0x80
mov eax,1
int 0x80
_newline:
section .data
VAR DW 0
INVENTORY TIMES 8 DW 0
是否有可能,已与我用新行或制表符符号呢?我生成从Java的组件和我使用的标签和\ n作为新行(和空格\ t所以它看起来并不太坏
我使用NASM,我在这里运行它。 https://www.tutorialspoint.com/compile_assembly_online.php
谢谢
在您的简单示例中,您必须调用_EXIT_ syscall来离开程序。 –
我确实添加了一个EXIT系统调用,无效 –
我使用我的帖子中的链接进行编译和运行,我不确定什么确切的操作系统,但它是一个Linux机器。 –