簡體   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