페이지

2014. 12. 15.

[MASM] 배열의 최소값 구하기

Title  배열의 최소값 구하기

INCLUDE Irvine32.inc
IntegerCount = 20; array size

.data
intArray SDWORD 5 DUP(?)
min SDWORD ?
prompt1 BYTE  "Enter an integer: ",0
prompt2 BYTE  "Min : ",0


.code

main PROC

    mov  esi,OFFSET intArray
    mov  ecx, lengthof intArray
    call PromptForIntegers ; 입력 다받음


    mov esi, 0 ; index
    mov eax, intArray[0] ; min
    mov ecx, lengthof intArray-1 ; 4번 돌아야함

 L1 : 
     add esi, type intarray ; 한칸증가 array[1] 부터 검사
     cmp intarray[esi], eax ; 비교
     jnl L2 ; 작지 안으면 반복
     mov eax, intarray[esi] ; 작으면 교환   

 L2 : loop L1

    mov  edx,OFFSET prompt2
    call WriteString    ; display string
    call WriteInt        ; display EAX = min
    call Crlf

    exit
main ENDP



;-----------------------------------------------------
PromptForIntegers PROC
;
; 사용자로부터 배열에 정수를 입력 받는다.
; 매개변수 >> ESI : 더블형 정수 배열 주소, ECX : 배열의 크기
; Returns: the array contains the values
;   entered by the user(반환값 >> 사용자에 의해 입력된 정수)
; Calls: ReadInt, WriteString(정수입력, 정수입력을 위한 안내문)
;-----------------------------------------------------
    pushad        ; save all registers
    mov  edx,OFFSET prompt1

L1:
    call WriteString    ; display string
    call ReadInt    ; read integer into EAX
    mov  [esi],eax    ; store in array
    add  esi,4        ; next integer
loop L1

L2:
popad        ; restore all registers


ret
PromptForIntegers ENDP



END main