我正在尝试创建一个非常简单的NASM程序,它将在我的数组中输出第一个值。
当我运行它时,我得到一个Segmentation Fault
。我无法弄清楚为什么。数组中的值是一个字节,我放入edx
寄存器的长度是1
。为什么会有错?
segment .data
array: db 2, 9, 6, 7, 1, 4
segment .bss
segment .text
global main
main:
mov eax, 4
mov ebx, 1
mov ecx, [array]
mov edx, 1
int 0x80
答案 0 :(得分:2)
你得到一个段错误,因为你没有正确地结束程序。它正在进入无人之地!
mov eax, 1
xor ebx, ebx
int 80H
是退出程序的正确方法。此外,你没有打印你期望的。数组中的数字不是ASCII,您需要在代码中转换为ASCII,或者只是用引号括起来。
array db "2", "9", "6", "7", "1", "4"
另外,sys_write期望并且不是一个值,删除数组
周围的括号*编辑*
%define sys_exit 1
%define sys_write 4
%define stdout 1
section .data
array db "2", "9", "6", "7", "1", "4"
section .text
global main
main:
mov eax, sys_write
mov ebx, stdout
mov ecx, array
mov edx, 1
int 80H
mov eax, sys_exit
xor ebx, ebx
int 80h