Thứ Hai, 5 tháng 3, 2012

Bài tập hợp ngữ MIPS 2


Nội dung: Viết chương trình (dùng hàm/thủ tục để viết):
1. Nhập vào N số nguyên, lưu vào Stack. Xuất ra màn hình theo thứ tự ngược lại lúc nhập vào. Với N <= 20.
Ví dụ:
Nhập vào: 9 7 2 0 4 6 1
Xuất ra: 1 6 4 0 2 7 9
2. Xuất ra màn hình N số nguyên chẵn đầu tiên. Với N <= 20.
Ví dụ:
N = 5
Xuất ra: 0 2 4 6 8
3. Dùng thuật toán Insertion Sort để sắp xếp dãy số tăng dần:
Ví dụ:
Dãy nhập vào là: 7 3 2 0 4 9 4 8
Dãy sắp xếp là: 0 2 3 4 4 7 8 9
Bài 1:
.data
  text_1: .asciiz "n = "
  text_2: .asciiz "Xuat ra: "
.text
main:
  la $a0, text_1 #load text_1 string
  jal print_text

  jal read_int
  move $s0, $v0 # n: $s0

  move $s1, $s0 # $s1 = $s0
  begin_loop_1:
  beq $s1, $zero, end_loop_1 # if (n==0) jump end_loop_1

  jal read_int
  move $a0, $v0
  jal stack_push
  addi $s1, $s1, -1 # n--

  j begin_loop_1
  end_loop_1:

  la $a0, text_2 #load text_2 string
  jal print_text

  move $s1, $s0 # $s1 = $s0
  begin_loop_2:
  beq $s1, $zero, end_loop_2 # if (n==0) jump end_loop_2

  jal stack_pop
  move $a0, $v0
  jal print_int
  jal print_space

  addi $s1, $s1, -1 # n--
  j begin_loop_2
  end_loop_2:

  j end_program

print_text:
  li $v0, 4 #print text
  syscall
  jr $ra

read_int:
  li $v0, 5 #read interger
  syscall
  jr $ra

print_int:
  li $v0, 1 #print interger
  syscall
  jr $ra

print_space:
  addi $a0,$zero, 32 # $a0 = " "
  li $v0, 11 #print character
  syscall
  jr $ra

stack_push:
  addi $sp, $sp, -4 # $sp -=4 (new 4 byte in stack)
  sw $a0, 0($sp) #put a word to stack
  jr $ra

stack_pop:
  lw $v0, 0($sp) #get a word form stack
  addi $sp, $sp, 4 # $sp +=4 (free 4 byte in stack)
  jr $ra

end_program:
Bài 2:
.data
  text_1: .asciiz "n = "
  text_2: .asciiz "Xuat ra: "

.text

main:
  la $a0, text_1 #load text_1 string
  jal print_text

  jal read_int
  move $s0, $v0 # n: $s0

  la $a0, text_2 #load text_2 string
  jal print_text

  li $s1, 0 # $s1=0

  begin_loop:
  beq $s0, $zero, end_loop # if (n==0) jump end_loop

  move $a0, $s1
  jal print_int
  jal print_space

  addi $s1, $s1, 2 # $s1 += 2
  addi $s0, $s0, -1 # n--

  j begin_loop
  end_loop:

  j end_program

print_text:
  li $v0, 4 #print text
  syscall
  jr $ra

read_int:
  li $v0, 5 #read interger
  syscall
  jr $ra

print_int:
  li $v0, 1 #print interger
  syscall
  jr $ra

print_space:
  addi $a0,$zero, 32 # $a0 = " "
  li $v0, 11 #print character
  syscall
  jr $ra

end_program:
Bài 3:
.data
  text_1: .asciiz "n = "
  text_2: .asciiz "Xuat ra: "
.text
main:
  la $a0, text_1 #load text_1 string
  jal print_text

  jal read_int
  move $s0, $v0 # n: $s0

  move $s1, $s0 # $s1 = $s0
  begin_loop_1:
  beq $s1, $zero, end_loop_1 # if (n==0) jump end_loop_1

  jal read_int
  move $a0, $v0
  jal stack_push
  addi $s1, $s1, -1 # n--

  j begin_loop_1
  end_loop_1:

  addi $a0, $zero, 1
  move $a1, $s0
  jal insert_sort

  la $a0, text_2 #load text_2 string
  jal print_text

  move $s1, $s0 # $s1 = $s0
  begin_loop_2:
  beq $s1, $zero, end_loop_2 # if (n==0) jump end_loop_2

  jal stack_pop
  move $a0, $v0
  jal print_int
  jal print_space

  addi $s1, $s1, -1 # n--
  j begin_loop_2
  end_loop_2:

  j end_program

print_text:
  li $v0, 4 #print text
  syscall
  jr $ra

read_int:
  li $v0, 5 #read interger
  syscall
  jr $ra

print_int:
  li $v0, 1 #print interger
  syscall
  jr $ra

print_space:
  addi $a0,$zero, 32 # $a0 = " "
  li $v0, 11 #print character
  syscall
  jr $ra

stack_push:
  addi $sp, $sp, -4 # $sp -=4 (new 4 byte in stack)
  sw $a0, 0($sp) #put a word to stack
  jr $ra
stack_pop:
  lw $v0, 0($sp) #get a word form stack
  addi $sp, $sp, 4 # $sp +=4 (free 4 byte in stack)
  jr $ra

insert_sort: #vitri=$a0

  beq $a0, $a1, end_sort

  move $t0,$sp
  move $t1, $a0
  begin_loop:
  beq $t1, $zero, end_loop
  addi $t0, $t0, 4
  addi $t1, $t1, -1
  j begin_loop
  end_loop:

  lw $t1,0($t0) # $t1=a[i]

  for:
  beq $t0, $sp, next
  lw $t2, -4($t0) # $t2=a[j-1]
  ble $t2, $t1, next
  sw $t2,0($t0)
  addi $t0, $t0, -4
  j for
  next:
  sw $t1,0($t0) #a[j]=$t1

  addi $a0, $a0, 1
  j insert_sort
  end_sort:
  jr $ra

end_program:


Share this post
  • Share to Facebook
  • Share to Twitter
  • Share to Google+
  • Share to Stumble Upon
  • Share to Evernote
  • Share to Blogger
  • Share to Email
  • Share to Yahoo Messenger
  • More...

0 nhận xét

:) :-) :)) =)) :( :-( :(( :d :-d @-) :p :o :>) (o) [-( :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ :-$ (b) (f) x-) (k) (h) (c) cheer

 
© Download do an khoa luan tai lieu
Designed by BlogThietKe Cooperated with Duy Pham
Released under Creative Commons 3.0 CC BY-NC 3.0
Posts RSSComments RSS
Back to top