사실 말이 버블정렬이지 pep/8은 처음 해보기두 하구
게다가 assembly language라 메모리에 올리는 법도 모르겠고
인덱스를 활용하고 싶어도 활용하는 방법도 모르겠고
찾아봐도 .......나오질않고
나와도............................모르겠고
결국 알아낸건
레지스터가 A말고도 X가 하나 더있다는걸 알아냈습니다
사실.........................큰 소용은 없었지만 사실 쓰지 않아도 되지만
그냥 써봅니다.
일단 Bubble sorting은 Swap을 기본으로합니당
A<->B를 맞교환하는 것이죠
첫번째와 두번째를 비교해서 순서대로 교환, 두번째와 세번째를 비교하고
교환, 교환, 교환, 교환, 교환!!!! 해서 결국 모든 정렬이 완성됩니다.
잘 모르겠다구요? 그럼 참고자료 나가요~~~~~~~~~~~
i번째 원소는 i-1번 비교됩니다~
따라서 n개의 원소의 나열일 경우
총 n(n-1)/2번의 비교를 하겠네용???????????
알고리즘은 다음과 같아요
간단하죠????????????????
그리고 C로 짜면 이렇게 되겠네요
간단 간단 간단 해보이죠? for문이 두번 돌아가네요
사실 이 때문에 다른 Sorting Algorithm에 비해 매우 비효율적입니다. 수행시간이 길어져버려요.
for문을 계속해서 계속해서 계속해섬ㄴ이ㅏㅁㄴ이러아으가으가으가으아ㅓ아어민알 계~~~~~~~~~~~속해서 돌려야 되기 때문에 매우 느려요 느려.
그래서 이 길고 .. 긴 .. .. 멍청한 sorting 방법은 하나 하나 말해줘야 알아듣는 비효율적인 어셈블리어에게 딱입니다. .....가 농담일지 진담일지... 알아봐야겠네요.
이 비효율적인 sorting 을 왜 쓰는걸까요?
그림을 보면 알다시피 매우 직관적이죠?
그래서 한줄 한줄 직접 말을 해줘야 알아듣는 기계에게 명령하기 딱인sorting 방법입니다.
보자마자 '아!!!!! 이거구나' 하고 직관적으로 알기가 쉬워서 우리가 바로 low-level language로 짜기두 쉽구요.
그렇다면
이 sorting 을 이용할 수 밖에 없는 어셈블리어가 얼마나 비효율적인지 그림에 보이는 그대로 짜봤습니다.
먼저 3개짜리입니다.
BR main
check: .WORD 0x0000
a1: .BLOCK 2
a2: .BLOCK 2
a3: .BLOCK 2
main: DECI a1,d
DECI a2,d
DECI a3,d
BR loop112
loop112: LDA a1, d
SUBA a2, d
BRLT ex112
BR loop123
ex112: LDA a1, d
LDX a2, d
STA a2, d
STX a1, d
BR loop123
loop123: LDA a2, d
SUBA a3, d
BRLT ex123
BR loop212
ex123: LDA a2, d
LDX a3, d
STA a3, d
STX a2, d
BR loop212
loop212: LDA a1, d
SUBA a2, d
BRLT ex212
BR sort
ex212: LDA a1, d
LDX a2, d
STA a2, d
STX a1, d
BR sort
sort: DECO a1, d
DECO a2, d
DECO a3, d
BR finish
finish: STOP
.END
짜잔 ㅋ.........................................................
아까 버블소팅이 input의 개수가 n개일때 n(n-1)/2라고했죠
3개짜리 sorting은 그러니까 3(2)/2 니까 3번 비교를 해야되요.
loop가 3개가 나와있는걸 알 수 있습니다.
그럼 과감하게 5개짜리를 sorting 해 볼까요 ~~~~~~~?
BR main
check: .WORD 0x0000
a1: .BLOCK 2
a2: .BLOCK 2
a3: .BLOCK 2
a4: .BLOCK 2
a5: .BLOCK 2
main: DECI a1,d
DECI a2,d
DECI a3,d
DECI a4,d
DECI a5,d
BR loop112
loop112: LDA a1, d
SUBA a2, d
BRLT ex112
BR loop123
ex112: LDA a1, d
LDX a2, d
STA a2, d
STX a1, d
BR loop123
loop123: LDA a2, d
SUBA a3, d
BRLT ex123
BR loop134
ex123: LDA a2, d
LDX a3, d
STA a3, d
STX a2, d
BR loop134
loop134: LDA a3, d
SUBA a4, d
BRLT ex134
BR loop145
ex134: LDA a3, d
LDX a4, d
STA a4, d
STX a3, d
BR loop145
loop145: LDA a4, d
SUBA a5, d
BRLT ex145
BR loop212
ex145: LDA a4, d
LDX a5, d
STA a5, d
STX a4, d
BR loop212
loop212: LDA a1, d
SUBA a2, d
BRLT ex212
BR loop223
ex212: LDA a1, d
LDX a2, d
STA a2, d
STX a1, d
BR loop223
loop223: LDA a2, d
SUBA a3, d
BRLT ex223
BR loop234
ex223: LDA a2, d
LDX a3, d
STA a3, d
STX a2, d
BR loop234
loop234: LDA a3, d
SUBA a4, d
BRLT ex234
BR loop312
ex234: LDA a3, d
LDX a4, d
STA a4, d
STX a3, d
BR loop312
loop312: LDA a1, d
SUBA a2, d
BRLT ex312
BR loop323
ex312: LDA a1, d
LDX a2, d
STA a2, d
STX a1, d
BR loop323
loop323: LDA a2, d
SUBA a3, d
BRLT ex323
BR loop412
ex323: LDA a2, d
LDX a3, d
STA a3, d
STX a2, d
BR loop412
loop412: LDA a1, d
SUBA a2, d
BRLT ex412
BR sort
ex412: LDA a1, d
LDX a2, d
STA a2, d
STX a1, d
BR sort
sort: DECO a1, d
DECO a2, d
DECO a3, d
DECO a4, d
DECO a5, d
BR finish
finish: STOP
.END
이건 input이 5개니까 5(4)/2 = 10
즉 10개의 loop를 볼 수가 있어요.
이렇게 C에서는 for문 한 줄이면 될 것을
어셈블리어에서는 loop하나하나를 다 구현해주었습니다.
사실 짜라고하면 input10개 짜리 sorting도 할 수 있겠지만
.............................. 우리들의 지식인 네이버에서 조차 나오지않는 PEP/8을 찾는데 많은 시간을 허비하느라 매우 피곤하여 ......10개 짜리는 여러분들의 상상력에 맡기며 넘어가도록 하겠습니다.
아마 instruction을 더욱 많이 알고 사용법을 자세히 알게 되면 위의 C 에서 짠 것과 같이 코드의 길이가 반의반의반의반의반의반의반의 반으로 화아아ㅏ아아아아ㅏㅏㅏㅏㅏ악 줄어들겠죠.
Bubble sorting 말고도 다른 효율적인 알고리즘들도 어셈블리어로 구현해낼수 있겠죠?
아마 그럴거에요. 그러지않고서야 저 긴 ..코드들을 다 써줄리가.
일단 PPT에 있는 inst로 만들 수 있는 건 저정도뿐이네요 ㅜ.ㅜ 잉잉
분명 더 많이 공부하면 길이 있을 것입니다.
공부는............ 좋은 거니까요.
하지만 ..............................................................................
이번 블로깅 마감날짜도 다가오고
Computer Organization and Design 과 Algorithm과 교직과 Programming language와 multimedia system 등 등 등의 몰아치는 과제로 인해.. ㅠㅠㅠ
PEP에 관해 더 알아 보고 싶지만 아쉽지만 아쉽지만 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
안녕펩......
이만 블로깅을 마치겠습니다.
그럼안뇽~~~~~~~~~~~~~~~~~~~~~~~~~~~~~♡
bubble sorting 도 알고 assembly language도 알고 1석 2조였죵 '-^ ㅋ 꺅
마지막으루 직접 돌려본 화면과
출처 - http://blog.naver.com/redwave102?Redirect=Log&logNo=80073404467
그럼 정말루 끗 ^^*
와..누나 진짜 짱이다
답글삭제감이 안왔는데 배워가염!