繁体   English   中英

Masm32。 在数组中查找最小值和最大值

[英]Masm32. Find min and max in array

我需要在Masm32上编写一个过程,该过程应该在数组中找到min和max元素。 此过程应使用4个参数:1)浮点数数组,2)数组长度,3)min-out参数4)max-out参数

我尝试编写它,但是没有用。 我无法将元素从数组插入过程。 只有第一个元素是正确的,而其他元素则不正确。

此过程:

getMinMax PROC arr:QWORD, len:DWORD, _min:PTR QWORD, _max:PTR QWORD
  XOR ECX, ECX
  XOR EBX, EBX          

  MOV ECX, len
  DEC ECX

  FLD arr[0]
  FST _min
  FSTP _max

  ADD EBX, type arr

start:
  FLD arr[EBX]
  FLD _min

  FCOMPP
  FSTSW AX
  SAHF

  JP nomin 
  JZ nomin ; min == arr
  JC nomin ; min > arr

  ; min < arr[i]
  FLD arr[EBX]
  FSTP _min
  ADD EBX, type arr

nomin:
  LOOP start

  ret
getMinMax  ENDP

而这里的程序调用

invoke getMinMax, result, n, offset minVal, offset maxVal

哪里:

result dq 100 dup(?)
n       dd 4
minVal  dq ?
maxVal  dq ?

有人可以帮我吗?

一种。 您不应该在第一个参数上使用OFFSET / PTR吗?

invoke getMinMax, offset result, n, offset minVal, offset maxVal

getMinMax PROC arr:PTR QWORD, len:DWORD, _min:PTR QWORD, _max:PTR QWORD

b。 危险地假设LEN始终至少为2。您应该测试LEN = 0和LEN = 1的情况

C。 您必须交换这些行! 加法必须始终经过每次迭代。

ADD EBX, type arr
nomin:

d。 您当前的程序不会计算任何最大值。

e。 在将LEN移入ECX之前,清除ECX是多余的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM