[英]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.