Segmentation fault 简单的NASM程序输出数组中的第一个数字会产生分段错误

Segmentation fault 简单的NASM程序输出数组中的第一个数字会产生分段错误,segmentation-fault,nasm,Segmentation Fault,Nasm,我正在尝试制作一个非常简单的NASM程序,它将输出数组中的第一个值 当我运行它时,我得到一个分段错误。我不明白为什么。数组中的值是一个字节,我输入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 e

我正在尝试制作一个非常简单的NASM程序,它将输出数组中的第一个值

当我运行它时,我得到一个
分段错误
。我不明白为什么。数组中的值是一个字节,我输入
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 

您将遇到seg故障,因为您没有正确结束程序。它正在跑进无人区

mov   eax, 1
xor    ebx, ebx
int     80H
是退出程序的正确方式。而且,您的打印机没有打印您期望的内容。数组中的这些数字不是ASCII码,您需要在代码中转换为ASCII码,或者只是用引号括起来

array    db  "2", "9", "6", "7", "1", "4"
另外,如果sys_write期望和address不是一个值,请删除数组周围的括号

*编辑*

%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   

它起作用了!但它会打印出所有的值。如何只打印一个(即第一个)?