已知在 DATA 开始的字单元中存放有 10 个无符号整数试编制程序挑选出其中的最大值和最小值并显示。
.data
nums dword 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
.code
main PROC
mov esi, OFFSET nums ; 将数组首地址存入 esi
mov eax, [esi] ; 取出第一个元素,作为最大值的初始值
mov ebx, [esi] ; 取出第一个元素,作为最小值的初始值
mov ecx, 1 ; 计数器
mov edx, OFFSET nums+4 ; 将数组第二个元素的地址存入 edx
loop_start:
cmp ecx, 10 ; 判断是否循环到最后一个元素
jg loop_end
mov ebx, [edx] ; 取出当前元素
cmp eax, ebx ; 比较当前元素和最大值
jle not_greater ; 如果当前元素不大于最大值,跳过下一条语句
mov eax, ebx ; 如果当前元素大于最大值,将其赋值给最大值
not_greater:
cmp ebx, eax ; 比较当前元素和最小值
jge not_less ; 如果当前元素不小于最小值,跳过下一条语句
mov ebx, [edx] ; 如果当前元素小于最小值,将其赋值给最小值
not_less:
add edx, 4 ; 将 edx 加上 4,指向下一个元素
inc ecx ; 计数器加 1
jmp loop_start ; 跳回循环开始处
loop_end:
; 最大值存放在 eax 中,最小值存放在 ebx 中
; 在此处添加显示最大值和最小值的代码
mov eax, 0 ; 返回值设为 0
ret
main ENDP
END main
原文地址: http://www.cveoy.top/t/topic/bxSZ 著作权归作者所有。请勿转载和采集!