索引通过子例程NASM程序集传递的数组时出现段错误?

时间:2018-12-04 02:30:06

标签: arrays assembly x86 segmentation-fault nasm

由于某种原因,在我将其推入堆栈后在NASM中对数组进行索引(称为子例程),并在该子例程中抓取该数组时出现分段错误。

下面的子例程(称为sorthem)应该从堆栈中获取数组和大小,然后对数组进行排序

在这里,我正在调用递归的子例程sorthem,并且正在edx寄存器(从子例程内部)抓取数组(在压入堆栈并调用子例程之后),然后使用dword[edx]为数组建立索引。为什么这会造成几秒钟的故障?我该如何解决?

这是主要内容:

    push eax
    push array
    call sorthem
    add esp, 8

    jmp END

这是子例程:

sorthem:
enter 0,0
pusha

mov ebx, dword[ebp + 12]   ;size
mov edx, dword[ebp + 8]    ;array

cmp ebx, 1
je sorthem_end

add edx, 4
dec ebx
push ebx
push edx
sub edx, 4
inc ebx
call sorthem
pop eax
pop eax

mov eax, 4
mul ebx
mov ebx, eax    

mov ecx, 0
Sloop:

    sub ebx, 4
        cmp ecx, ebx
        je loop_end
    add ebx, 4      

    mov eax, dword[edx + ecx]         ;SEG FAULT HERE
    cmp eax, dword[edx + 4 + ecx]     ;SEG FAULT HERE 
    ja loop_end                                      

            mov eax, debug
            call print_string
            call print_nl

    mov eax, dword[edx + ecx]
    push eax
    mov eax, dword[edx + 4 + ecx]
    push eax

    pop dword[edx+ecx]
    pop dword[edx+4+ecx]

    add ecx, 4
    jmp Sloop 



loop_end:
push 5
push array
call showp
add esp, 8  

sorthem_end:
popa
leave
ret

0 个答案:

没有答案