32位汇编语言实现求数组的最大值

INCLUDE Irvine32.inc
.data
    arr dd 99,2,3,1,22,188,7,77,54,10 ;定义数组
	len dd ($-arr)/4 ;用当前地址减去数组首元素地址除以4得到数组的长度
.code
main PROC
    mov edx,offset arr ;用edx数据寄存器存储数组首元素的地址,不要漏了offset
    mov ecx,len ;用ecx计数寄存器存储数组的长度
    call max_num
    call writeint

    exit
main ENDP

max_num PROC
    push esi ;将esi源地址寄存器压入栈保护
    mov esi,0 ;初始化esi
    mov eax,[arr] ;初始化eax,eax用来返回数组中的最大值
again:
    cmp esi,ecx ;比较esi和数组长的大小
    jge final ;若大于等于则结束遍历
    cmp eax,[edx+esi*4] ;比较eax和当前数组元素的大小
    jge next ;若大于等于则继续遍历
    mov eax,[edx+esi*4] ;若小于则将当前数组元素的值赋值给eax
next:
    add esi,1 ;每次遍历都将esi加1,否则死循环
    jmp again 
final:
    pop esi ;结束时将esi弹出栈
    ret
max_num ENDP
END main
posted @ 2023-03-14 13:15  Travelever  阅读(92)  评论(0)    收藏  举报