[問題] 有關MIPS的問題

看板Programming作者 (小浩浩)時間18年前 (2006/10/07 21:33), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
不知道這邊有沒有人對這組合語言比較熟悉的 我是初學者,在寫程式時遇見一些問題,希望有高手可以替我回答唷 謝謝^^ 以下附題目跟code 下半部有一行指令一直會出錯 希望有人可以幫我看看唷 謝謝大家這麼有耐心^^ Q:Using SPIM, write and test a program that reads in a positive integer using the SPIM system calls. If the integer is not positive, the program should terminate with the message “Invalid Entry”; otherwise the program should print out the names of the digits of the integers, delimited by exactly one space. For example, if the user entered “728,” the output would be “Seven Two Eight.” #程式開始 .data msg: .asciiz "Invalid Entry\n" prompt: .asciiz "Enter a positive integer..." # Fix the length of the elements of the "name" array names: .asciiz "Zero " .space 1 .asciiz "One " .space 2 .asciiz "Two " .space 2 .asciiz "Three " .asciiz "Four " .space 1 .asciiz "Five " .space 1 .asciiz "Six " .space 2 .asciiz "Seven " .asciiz "Eight " .asciiz "Nine " .space 1 # .globl main # .data .align 2 digits: .space 10 .globl main .text # push return address main: sw $ra,0($sp) addi $sp,$sp,-4 # DIY1: print a prompt la $a0, prompt # load string address into $a0 and I/O code into $v0 li $v0, 4 syscall # execute the syscall to perform input/output # DIY2: Read an integer li $v0, 5 # an I/O sequence to read an integer from # the console window syscall move $t1, $v0 # place the value read into register $t0 # DIY3: Reject if non-positive slt $s0,$t1,$zero beq $s0,$zero,cont la $a0, msg # load string address into $a0 and I/O code into $v0 li $v0, 4 syscall # execute the syscall to perform input/output j main # Extract digits (right to left, store in digits[0]..) cont: addi $a0,$zero, 10 addi $t0,$zero, 0 again: div $v0,$a0 mflo $v0 # v0 = v0 div 10 mfhi $t1 # t1 = v0 mod 10 sb $t1,digits($t0) beq $v0, $zero, abort # leave if v0 became 0 beq $t0, $a0, abort # or if 10 digits were extracted addi $t0, $t0,1 j again abort: # print the digits addi $t7, $zero, 7 #t7=7, why? In order to access the data in names. lb $t5, digits($t0) beq $t5, $zero, skip #skip leading zero next: mult $t5,$t7 mflo $t5 # offset addi $a0, $t5, names # a0 = the Name's address #就是上面這一行,我code丟進去SPIM編輯時,就會出錯,執行結果當然也不對 #不知道是不是我觀念不清楚 少寫什麼? addi $v0, $zero, 4 syscall skip: sub $t0, $t0,1 bltz $t0, fini lb $t5, digits($t0) j next # Pop the stack, return to SPIM fini: addi $sp, $sp, 4 lw $ra, 0($sp) jr $ra -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.161.9.166
文章代碼(AID): #159woXBk (Programming)
文章代碼(AID): #159woXBk (Programming)