2014-12-11 4 views
0

배열에 최소 및 최대 요소를 찾아야하는 Masm32에 절차를 작성해야합니다. 최대 출력 매개 변수 4) - - out 매개 변수Masm32. 최소 및 최대 배열 찾기

내가 작성하려고하지만, 아무튼 3) 분 부동 소수점 숫자의 1) 배열, 2) 배열의 길이 :이 절차는 4 개 매개 변수를 사용한다 일하지 마라. 배열에서 요소를 프로 시저로 가져올 수 없습니다. 첫 번째 요소 만 정확하지만 다른 요소는 정확하지 않습니다.

이 절차 :

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

a. 첫 번째 매개 변수에 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 = 0이고 LEN = 1 인 경우를 테스트해야합니다.

c. 이 줄을 바꿔야 해! 추가는 항상 각 반복을 따라야합니다.

ADD EBX, type arr 
nomin: 

d. 현재 프로그램은 최대 값을 계산하지 않습니다.

e. ECX를 지우는 것은 LEN을 움직이기 전에 불필요합니다.