结合两个 MIPS 程序将小写字母转换为大写字母,反之亦然
Combining two MIPS programs to convert lowercase to uppercase and vice versa
我正在尝试构建一个基本的 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
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
我正在尝试构建一个基本的 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
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