我想计算数组的最大值。我只完成了寄存器,但现在我在操作内存中的变量时遇到了麻烦。一开始我想让第一个数字成为最大值。我做了movl array(, %edi, 4), &max
它给出了错误,无效的字符''。做正确的方法是什么?
我对decl &n
指令有类似的问题。
在代码中,我使用%edi作为索引,使用%eax作为当前值。
.data
array:
.int 31, 9, 42, 18, 40
n:
.int 5
max:
.int 0
.text
.globl _start
_start:
movl $0, %edi
movl array(, %edi, 4), &max
start_loop:
incl %edi
decl &n
cmpl $0, n
je exit_loop
movl array(, %edi, 4), %eax
cmpl max, %eax
jle start_loop
movl %eax, &max
jmp start_loop
exit_loop:
movl $1, %eax
movl &max, %ebx
int $0x80
答案 0 :(得分:0)
我想计算数组中的最大值。
解决获取数组最大值问题的一种天真的方法是以下代码(复制数据序言):
_start:
movl n, %ecx ; %ecx is now equal to the array len
lea array, %esi ; %esi points to the beginning of the array
xorl %edx, %edx ; first maximum value is 0
start_loop:
movl (%esi), %eax ; get value from array to %eax
cmpl %edx, %eax ; is new value greater (or equal) to the current max?
cmovge %eax, %edx ; then replace it
add $4, %esi ; set pointer to next element of array
loop start_loop ; decrement %ecx and jump to label if not 0
exit_loop:
movl $1, %eax ; SYS_EXIT
movl %edx, %ebx ; copy max to 'exit status'
int $0x80 ; execute SYSCALL