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

时间:2013-04-21 22:56:38

标签: segmentation-fault nasm

我正在尝试创建一个非常简单的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 

1 个答案:

答案 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