我正在嘗試構建一個基本的 Mips 程式,該程式采用硬編碼字串并將小寫字符轉換為大寫,反之亦然。我已經設法制作了兩個程式,一個用于從上到下,一個用于從下到上,但我不知道如何將兩者結合起來。我相信我的程式中的錯誤來自我檢查空格并試圖跳過它們,但我真的不確定。通過嵌套案例呼叫,我試圖模仿 if-else 邏輯
.data
string: .asciiz "\nThis Is A Test\n"
newline: .asciiz "\n"
.text
main:
la $t0, string # $t0 is pointer to first el of str, loading string
li $v0, 4 # print the original string
la $a0, string
syscall
li $s2, ' '
li $v0, 4
li $t0, 0
loop:
lb $t1, string($t0)
beq $t1, 0, exit
beq $t1, $s2, neither
j caseLower
caseLower:
blt $t1, 'A', caseUpper
bgt $t1, 'Z', caseUpper
addi $t1, $t1, 32
sb $t1, string($t0)
addi $t0, $t0, 1
j loop
caseUpper:
blt $t1, 'a', neither
bgt $t1, 'z', neither
addi $t0, $t0, -32
sb $t1, string($t0)
addi $t0, $t0, 1
j loop
neither:
addi $t0, $t0, 1
j loop
exit:
li $t0, 4
la $a0, string
syscall
li $v0, 10
syscall
這是我得到的輸出:
This Is A Test
this Is A Test
-- program is finished running --
我想要的第二行輸出的輸出是:tHIS iS a tEST
uj5u.com熱心網友回復:
addi $t0, $t0, -32有問題。
它應該是 addi $t1, $t1, -32。
.data
string: .asciiz "\nThis Is A Test\n"
newline: .asciiz "\n"
.text
main:
la $t0, string # $t0 is pointer to first el of str, loading string
li $v0, 4 # print the original string
la $a0, string
syscall
li $s2, ' '
li $v0, 4
li $t0, 0
loop:
lb $t1, string($t0)
beq $t1, 0, exit
beq $t1, $s2, neither
j caseLower
caseLower:
blt $t1, 'A', caseUpper
bgt $t1, 'Z', caseUpper
addi $t1, $t1, 32
sb $t1, string($t0)
addi $t0, $t0, 1
j loop
caseUpper:
blt $t1, 'a', neither
bgt $t1, 'z', neither
addi $t1, $t1, -32
sb $t1, string($t0)
addi $t0, $t0, 1
j loop
neither:
addi $t0, $t0, 1
j loop
exit:
li $t0, 4
la $a0, string
syscall
li $v0, 10
syscall
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424409.html
上一篇:為什么顯示數字總和不正確
