게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
어셈블리 하는 거 질문인데요..
게시물ID : computer_114343짧은주소 복사하기
작성자 : 아버지레드불
추천 : 0
조회수 : 1855회
댓글수 : 2개
등록시간 : 2013/09/24 15:36:12
TITLE Descending Integer Sort    (test.asm)

; Program Description: 4byte 정수 리스트를 sort하는 프로그램
; Author: 201024405 구한솔
; Date Created: 2013. 09. 24
; Last Modifiction Date: 2013. 09. 25

INCLUDE Irvine32.inc

.data
    prompt1 BYTE "입력받을 정수 개수:",0
    prompt2 BYTE "정수 입력:",0
    num DWORD 0                    ;입력받는 정수 개수
    array DWORD 100 dup(?)        ;입력된 정수 저장
    count DWORD ?                ;OuterLoop 카운터를 위한 변수
.code

main PROC
    ;prompt "입력받을 정수 개수:"
    mov edx, OFFSET prompt1
    call WriteString
    call ReadInt
    mov num, eax

;"정수 입력" 루프 반복
mov esi, OFFSET array
mov ecx, num

L1:
    ;prompt "정수 입력"
    mov edx, OFFSET prompt2
    call WriteString
    call ReadInt
    
    ;array 배열에 읽은 정수 저장
    mov [esi], eax
    add esi, TYPE array
    
    loop L1
;배열 값 출력

mov esi,OFFSET array
mov ecx,num
L2:
    mov eax,[esi]
    add esi,4
    call WriteInt
    call Crlf
    loop L2

outerLoop:
    mov count, ecx            ; 바깥루프 카운터를 임시 변수에 저장
    mov edi, 0            ; set the innerLoop index
    mov ecx, LENGTHOF array - 1

    ; 안쪽 루프 @@@
innerLoop:
    mov eax, array[edi]        ; eax = array[edi]
    cmp eax, array[edi + TYPE array]    ; eax값(배열값)과 다음 배열값 비교
    ja tempLoop            ; 원래 배열값이 더 크면 tempLoop로 이동
                    ; array[edi] > array[edi + 4]
    ; 원래 배열값보다 다음 배열값이 크면 값을 바꿈
    xchg eax, array[edi + TYPE array]    ; eax = array[edi + 4], array[edi] = array[edi + 4]
    xchg eax, array[edi]        ; array[edi + 4] = array[edi]
    jmp tempLoop            ; sorting후에 tempLoop로 이동

tempLoop:
    add edi, TYPE array        ; innerLoop 인덱스 증가
    loop innerLoop    

    inc esi                ; outerLoop 인덱스 증가
    mov ecx, count            ; outerLoop 카운터를 임시변수에서 불러 옴
    loop outerLoop

    ; sort 끝 @@@

    ; 배열을 내용을 출력 @@@

mov esi,OFFSET array
mov ecx,num
L3:
    mov eax,[esi]
    add esi,4
    call WriteInt
    call Crlf
    loop L3

    exit

main ENDP
END main

잘 못해서 친구한테 물어도 보고, 인터넷의 소스도 활용해보고 해서 만들었는데...

밑 Sort하는 부분에서 무한루프가 도는거 같네요...

도데체 왜 그런거죠?
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호