2013-04-21 24 views
0

我正在嘗試製作一個非常簡單的NASM程序,它將輸出數組中的第一個值。SImple 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 

回答

2

由於您未正確結束程序,因此您會遇到seg故障。它正在奔向無人之境!

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 
+0

它的工作原理!但它打印出所有的值。我如何打印一個(即第一個)? – CodyBugstein 2013-04-22 18:26:15