Assembly 汇编:查找数组中的最大数,不';行不通
我正在开发MacOSX(FreeBSD) 这是密码Assembly 汇编:查找数组中的最大数,不';行不通,assembly,Assembly,我正在开发MacOSX(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
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,我不明白为什么,有什么线索吗?看起来你的程序没有办法终止,因为你没有减少
cx
(它最初保持数组大小)的值,并在它变为0
时停止比较。相反,您将继续循环并继续执行以下操作:
inc eax
cmp ebx, [v+eax*4]
这会导致分段错误,因为在某个点上,您试图通过阵列端访问属于您不拥有的分段的内存。另一个问题是
循环将使用ECX
,即整个32位,不仅是CX
的低16位,而且提供的代码似乎没有清除ECX
的前16位。loop命令会自动减少ECX中的值,因此我的错误是使用CX而不是ECX。这是我所做的更正:mov ecx,n。现在可以了,谢谢。