我需要在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 ?
有人能帮助我吗?
答案 0 :(得分:2)
一个。你不是在第一个参数上使用OFFSET / PTR吗?
invoke getMinMax, offset result, n, offset minVal, offset maxVal
getMinMax PROC arr:PTR QWORD, len:DWORD, _min:PTR QWORD, _max:PTR QWORD
湾您危险地假设LEN始终至少为2.您应该测试LEN = 0且LEN = 1
的情况℃。你必须交换这些线!添加必须始终经历每次迭代。
ADD EBX, type arr
nomin:
d。您当前的程序不会计算任何最大值。
即在将LEN移入其中之前清除ECX是多余的。