2010년 10월 31일 일요일

컴과개 과제 6: 3가지 수 비교하기

이번 과제는 어셈블리 언어를 이용해서 3가지의 수를 입력받아 대소를 비교하여 크기가 큰 순서대로 나열하는 것이었는데요....이해하느라 정말 힘들었습니다....

무튼 열심히 이해하여 결과를 출력해보았습니다.
일단 코드는 이와같이 짰습니다.
BR main
num1: .BLOCK 2
num2: .BLOCK 2
num3: .BLOCK

main: DECI num1,d
         DECI num2,d
         DECI num3,d
         BR case1

case1: LDA num1,d
          SUBA num2,d
          BRLT c1_1;num2>num1
          BR c1_2;num1>num2

c1_1: LDA num1,d
         SUBA num3,d
         BRLT c1_1_1 ;num3>num1
         BR c1_1_2 ;num2>num1>num3

c1_1_1: LDA num2,d
SUBA num3,d
BRLT c1_1_1_1 ;num3>num2>num1
BR c1_1_1_2 ;num2>num3>num1

c1_1_1_1: DECO num3,d
                 DECO num2,d
                 DECO num1,d
                 BR finish

c1_1_1_2: DECO num2,d
                 DECO num3,d
                 DECO num1,d
                 BR finish

c1_1_2: DECO num2,d
             DECO num1,d
             DECO num3,d
             BR finish

c1_2: LDA num2,d
         SUBA num3,d
         BRLT c1_2_1 ;num3>num2
         BR c1_2_2 ;num1>num2>num3
 
c1_2_1: LDA num1,d
             SUBA num3,d
             BRLT c1_2_1_1 ;num3>num1>num2
             BR c1_2_1_2 ;num1>num3>num2

c1_2_1_1: DECO num3,d
                 DECO num1,d
                 DECO num2,d
                 BR finish

c1_2_1_2: DECO num1,d
                 DECO num3,d
                 DECO num2,d
                 BR finish

c1_2_2: DECO num1,d
             DECO num2,d
             DECO num3,d
             BR finish

finish: STOP
.END


     이거 일일이 캡쳐하기 귀찮아서 복붙을 했는데, 더 보기가 이상해졌네요.그래도 눈 뜨고 잘 보시면 잘 보이실꺼에요..이걸 해보면서 해본 결과 DECI는 c에서 scanf와 비슷한 역할을 하는군요.그리고 DECO는 printf에서 %d,%f등과 비슷한 역할을 하는것 같구요.SUBA는 뺄셈, BR과 BRLT는 if문과 비슷한 역할을 하는거 같네요.다만 BR과 BRLT는 항상 기준이 0이 되는군요. 여기까지가 제 의견이구요 무튼 이 SUBA와 BR,BRLT를 이용하여 c의 if문과 비슷한 역할을 만들어 작성해 보았습니다.
그래서 결과는 다음과 같이 나오더군요.
네 이렇게 결과가 나왔습니다. 이번 과제 정말 난감했습니다....그래도 배우니 재미는 있네요.

댓글 없음:

댓글 쓰기