#esame 07-07-2017 esercizio 1 MIPS .data count: .word 0 hdr: .asciiz "\nNo. " sep: .asciiz "\n-----\n" nl1: .asciiz "\n" .text .globl main solve: addi $sp,$sp,-32 # allocate frame+loc.var sw $a0,0($sp) # save n sw $a1,4($sp) # save col sw $a2,8($sp) # save *hist sw $fp,12($sp) # save old fp sw $ra,16($sp) # save old ra # 20($sp) is for 's' sw $s0,24($sp) # saved i sw $s1,28($sp) # saved j add $fp,$sp,$0 sb $0, 21($fp) # s[1]=`\0` # i:s0, j:s1 bne $a1,$a0,endif#if (col==n) la $a0,hdr # print the header addi $v0,$0,4 # print_str syscall la $t0,count # &count lw $a0,0($t0) # read count addi $a0,$a0,1 #++count sw $a0,0($t0) # store count addi $v0,$0,1 # print_str syscall la $a0,sep # print the separator addi $v0,$0,4 # print_str syscall lw $a0,0($sp) #restore a0 addi $s0,$0,0 # i=0 fori1: slt $t9,$s0,$a0 beq $t9,$0,endfori1 #----- fori1 body start addi $s1,$0,0 # j=0 forj1: slt $t9,$s1,$a0 beq $t9,$0,endforj1 #----- forj1 body start sll $t2,$s0,2 # i*4 add $t2,$a2,$t2 # &hist+i*4 lw $t3,0($t2) # t3:hist[i] bne $t3,$s1,ter2 # i!=j -> ter2 addi $t4,$0,'Q' sb $t4,20($fp) #s[0]='Q' j nextforj1 ter2: add $t2,$s0,$s1 # i+j andi $t3,$t2,1 # (i+j)&1 bne $t3,$0,ter3 addi $t4,$0,' ' sb $t4,20($fp) #s[0]=' ' j nextforj1 ter3: addi $t4,$0,'.' sb $t4,20($fp) #s[0]='.' #----- forj1 body end nextforj1: addi $s1,$s1,1 # ++j addi $a0,$fp,20 # &s addi $v0,$0,4 # print_str syscall lw $a0,0($sp) #restore a0 j forj1 endforj1: #----- fori1 body end addi $s0, $s0, 1 # i++ la $a0,nl1 # print just 1 newline addi $v0,$0,4 # print_str syscall lw $a0,0($sp) #restore a0 j fori1 endfori1: j goreturn endif: addi $s0,$0,0 # i=0 fori2: slt $t9,$s0,$a0 # iendfori2 #----- fori1 body start addi $s1,$0,0 # j=0 forj2: slt $t9,$s1,$a1 # j