【问题标题】:SImple NASM program to output first number in an array gives Segmentation Fault error简单的 NASM 程序输出数组中的第一个数字给出分段错误错误
【发布时间】:2013-04-21 22:56:38
【问题描述】:

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

【问题讨论】:

    标签: segmentation-fault nasm


    【解决方案1】:

    您遇到了段错误,因为您没有正确结束程序。它正在奔向无人区!

    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   
    

    【讨论】:

    • 有效!但它会打印出所有值。如何只打印一个(即第一个)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多