2011-11-29 97 views
2

我開發在Mac OS X(FreeBSD的)大會:找到一個數組的最大數量,不工作

這裏是代碼

section .data 
v dd 72,54, 89, 21, 0, 12 
n equ 6 

section .bss 
max resd 1 
section .text 
global _start 
_start: 
    mov eax, 0 
    mov ebx, [v] 
    mov cx, n 
    dec cx 
    change_max: 
     mov ebx, [v+eax*4] 
     loop lp 
    lp: 
     inc eax 
     cmp ebx, [v+eax*4] 
     jl change_max 
     loop lp 
    return_max: 
      mov [max], ebx 
    exit: 
     push dword 0    
     mov eax, 0x1    
     sub esp, 4 
     int 0x80 

我得到一個分割故障:11我不明白爲什麼,有什麼線索?

回答

2

看起來你的程序沒有辦法終止,因爲你不會減少cx(最初保存數組大小)的值,並在它變成0時停止比較。相反,你不斷循環,繼續做:

inc eax 
cmp ebx, [v+eax*4] 

導致分段錯誤,因爲在某些時候您嘗試訪問過去數組末尾,屬於你沒有自己的一段記憶。

+0

另一個問題是'LOOP'將使用整個32位的'ECX',而不僅僅是'CX'的低16位,並且它看起來並不像所提供的代碼清除'ECX'的前16位。 –

+0

loop命令會自動減少ecx中的值,所以我的錯誤是使用cx而不是ecx。這是我所做的更正:mov ecx,n。現在,它的工作,謝謝。 – AR89

相關問題