由于某种原因,在我将其推入堆栈后在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