[問題] 有關MIPS的問題
不知道這邊有沒有人對這組合語言比較熟悉的
我是初學者,在寫程式時遇見一些問題,希望有高手可以替我回答唷 謝謝^^
以下附題目跟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
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章