목차
1. Program explain
1.1. Bubble sort
1.1.1 Insertion of given number
1.1.2 Deletion of given number
1.2. Quick sort
2. Source code with comments
2.1 Bubble sort code
2.2 Quick sort code
3. Program result
3.1 Bubble sort
3.2 Quick sort
4. Discussion
1.1. Bubble sort
1.1.1 Insertion of given number
1.1.2 Deletion of given number
1.2. Quick sort
2. Source code with comments
2.1 Bubble sort code
2.2 Quick sort code
3. Program result
3.1 Bubble sort
3.2 Quick sort
4. Discussion
본문내용
ll
li$t4,0# for( i=0 ; i<55 ; i++)
li$s055
#################
display1:
beq$t4,$s0,delete_outer
li$v0,1
lb$a0,a($t4)
syscall
li$v0,4
la$a0,space
syscall
addi$t4,$t4,1
jdisplay1
################# #---------------------------------------------#
delete_outer:#---------deleting given number start---------#
li$t3,0
li$t2,5
#################
delete:
beq$t3,$t2,out2
li$s7,0
li$s6,0
lb$t6,dele($t3)# a = dele[i]
################## if 'a' is matched with some value of array 'a'
dele_loop: # delete the matched number
lb$t9,a($s6)# and do below operation until last address of 'a'
beq$t6,$t9,delete_in# a[address of matched number]
addi$s6,$s6,1# = a[address of matched number+1]
jdele_loop
#################
delete_in:
li$s5,53
addi$t7,$s6,1
lb$t5,a($t7)# a = a[j+1]
sb$t5,a($s6)# a[j] = a
beq$s6,$s5,dele_exit# if j=212, branch 'delete_exit'
addi$s6,$s6,1# j=j+1
jdelete_in
#################
dele_exit:# make trash values '0'
li$t1,0
addi$s5,$s5,1
sb$t1,a($s5)
addi$t3,$t3,1
jdelete
#################
out2:li$v0,4#---------- deleted data printout------#
la$a0,srttxt2
syscall
li$t4,0
li$s0,50# for( i=0 ; i<50 ; i++)
#################
display2:
beq$t4,$s0,end1
li$v0,1
lb$a0,a($t4)
syscall
li$v0,4
la$a0,space
syscall
addi$t4,$t4,1
jdisplay2 #---------------------------------------------#
##################
end1:li$v0,10
syscall
3. Program result
3.1 Bubble sort
3.2 Quick sort
4. Discussion
- 코딩을 하는데 있어 c 코딩에 익숙해 있던 습관대로 짜려니 어셈블리어는 여간 불편한게 아니었다. 하지만 c로 먼저 의사코드를 작성한 다음 어셈블리어 코딩을 하는 것이 조금 더 수월하게 코딩을 하게 해준다는 것을 알 수 있었다.
- 어셈블리어 코딩을 할 때 주의해야 할 점은 라인 수의 축소에 있는 것이 아니라 루프가 얼마나 사용되는지 얼마나 가까운 것들 끼리 프로그램이 동작하는지 그리고 dependency를 얼마나 줄일수 있는지를 생각하며 코딩을 해야 한다는 것을 알 수 있었다.
- 퀵 소트를 구현하는데 있어 처음에는 숫자를 워드단위로 구성했으나 mid(중간 주소)계산을 위해서 (first주소 + last주소)/2 를 하는데 있어 정확하게 mid 계산이 되지 않음에 따라 숫자를 바이트 단위로 받아들여 코딩하였다.
li$t4,0# for( i=0 ; i<55 ; i++)
li$s055
#################
display1:
beq$t4,$s0,delete_outer
li$v0,1
lb$a0,a($t4)
syscall
li$v0,4
la$a0,space
syscall
addi$t4,$t4,1
jdisplay1
################# #---------------------------------------------#
delete_outer:#---------deleting given number start---------#
li$t3,0
li$t2,5
#################
delete:
beq$t3,$t2,out2
li$s7,0
li$s6,0
lb$t6,dele($t3)# a = dele[i]
################## if 'a' is matched with some value of array 'a'
dele_loop: # delete the matched number
lb$t9,a($s6)# and do below operation until last address of 'a'
beq$t6,$t9,delete_in# a[address of matched number]
addi$s6,$s6,1# = a[address of matched number+1]
jdele_loop
#################
delete_in:
li$s5,53
addi$t7,$s6,1
lb$t5,a($t7)# a = a[j+1]
sb$t5,a($s6)# a[j] = a
beq$s6,$s5,dele_exit# if j=212, branch 'delete_exit'
addi$s6,$s6,1# j=j+1
jdelete_in
#################
dele_exit:# make trash values '0'
li$t1,0
addi$s5,$s5,1
sb$t1,a($s5)
addi$t3,$t3,1
jdelete
#################
out2:li$v0,4#---------- deleted data printout------#
la$a0,srttxt2
syscall
li$t4,0
li$s0,50# for( i=0 ; i<50 ; i++)
#################
display2:
beq$t4,$s0,end1
li$v0,1
lb$a0,a($t4)
syscall
li$v0,4
la$a0,space
syscall
addi$t4,$t4,1
jdisplay2 #---------------------------------------------#
##################
end1:li$v0,10
syscall
3. Program result
3.1 Bubble sort
3.2 Quick sort
4. Discussion
- 코딩을 하는데 있어 c 코딩에 익숙해 있던 습관대로 짜려니 어셈블리어는 여간 불편한게 아니었다. 하지만 c로 먼저 의사코드를 작성한 다음 어셈블리어 코딩을 하는 것이 조금 더 수월하게 코딩을 하게 해준다는 것을 알 수 있었다.
- 어셈블리어 코딩을 할 때 주의해야 할 점은 라인 수의 축소에 있는 것이 아니라 루프가 얼마나 사용되는지 얼마나 가까운 것들 끼리 프로그램이 동작하는지 그리고 dependency를 얼마나 줄일수 있는지를 생각하며 코딩을 해야 한다는 것을 알 수 있었다.
- 퀵 소트를 구현하는데 있어 처음에는 숫자를 워드단위로 구성했으나 mid(중간 주소)계산을 위해서 (first주소 + last주소)/2 를 하는데 있어 정확하게 mid 계산이 되지 않음에 따라 숫자를 바이트 단위로 받아들여 코딩하였다.