티스토리 뷰

반응형

[2] : array의 크기는 10으로 지정. (정수형이기 때문에 x4)

 

 


 

[17] : input_data 서브루틴을 호출.

       서브루틴 호출은 $ra에 다음 명령어 주소를 저장해야하기 때문에 jal을 사용.

[31-32] : 홀수 출력을 통해 $a1에 1을 저장하고 서브루틴 output_data 호출.

[37-38] : 짝수 출력을 통해 $a1에 0을 저장하고 서브루틴 output_data 호출.

 

 


 

[49-52] : "1, 2, 3, 4, 5 ..." 형태의 문자열을 입력.

[60-61] : $t1에 저장된 문자가 쉼표(,) , 엔터(\n) 이면 number_buffer에 저장된

            문자열 "300"을 정수로 형변환해 배열에 저장하기위해 if_comma로 점프.

[67-68] : $t1에 저장된 문자가 숫자(0-9)면 number_buffer[Index]에 저장하고 다음 숫자를

            저장하기위해 number_buffer의 Index를 1 증가시킨다.

[77-79] : number_buffer[index]의 값이 0x00이거나, index가 4를 넘어가면 parse_end로 점프.

[85] : $t2, 즉 Index가 0이면 10을 곱하지 않고 넘어간다.

       ( 근데 생각해보니 어차피 0 x 10은 0이니까 따로 안걸러도 되겠다.... )

 

 


 

[94-96] : array[$t3] 에 해당 숫자를 더해 숫자를 만들어 나간다.

              ( 10곱하고 더하고, 10곱하고 더하고 하는 방식을 사용 )

[102] : 여기서 4를 더해주는 이유는 int형 배열이기 때문에 4Byte를 증가해줘야 한다.

         C언어에서는 index처리시 자동으로 자료형에 따라 처리해줬지만 여기선 아니다.

[108] : 여기서 1인 이유는 문자열의 문자 하나하나를 순환해야 하기 때문에 1Byte이다.

 

 


 

[127-129] : array[j], array[j + 1] 을 비교해서 순서가 안맞으면

[131-132] : 이 라인을 통해 두 개의 배열을 Swap한다.

[134, 137] : 마찬가지로 Index를 다루는 레지스터이기 때문에 4Byte를 증가시킨다.

 

 


 

 

[147-150] : array[index]의 값을 2로나눈 나머지를 $v0에 저장.

                ( 특히 150번 라인의 명령어를 잘 기억하자. )

[151] : 나머지가 $a1 이면 출력을 건너뛴다. (홀수, 짝수 구분을 위함)

 

 


코드 다운로드

 

bubble_sort.asm

 

drive.google.com

 

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함