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
标签:arr,汇编语言,32,最大值,mov,eax,数组,edx,esi
From: https://www.cnblogs.com/linhongyu0090/p/17214609.html