MASM32。在数组中查找min和max

时间:2014-12-11 21:59:05

标签: arrays assembly max procedure masm32

我需要在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 ?

有人能帮助我吗?

1 个答案:

答案 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是多余的。