MIPS提示输入字符串并交换每个字符的大小写
我正在编写一个MIPS程序,提示用户输入一个字符串,然后解析该字符串,并交换每个字符的大小写。 例如->MIPS提示输入字符串并交换每个字符的大小写,mips,Mips,我正在编写一个MIPS程序,提示用户输入一个字符串,然后解析该字符串,并交换每个字符的大小写。 例如-> 嘿,你变成了嘿,你。 我的问题是,如果它遇到一个空间,我如何让它什么也不做?任何帮助都会很好 .data string4:.space 82 # space for input string strPrompt:.asciiz "Please enter a string: " .text .globl m
嘿,你变成了嘿,你。 我的问题是,如果它遇到一个空间,我如何让它什么也不做?任何帮助都会很好
.data
string4:.space 82 # space for input string
strPrompt:.asciiz "Please enter a string: "
.text
.globl main
main:
la $a0, strPrompt # print prompt
li $v0, 4
syscall
la $a0, string4 # read string
li $a1, 80
li $v0, 8
syscall
la $a0, string4 # print string
li $v0, 4
syscall
la $t0, string4 # $t0 = &string4[0]
li $t1, 0
loop4:
lb $t1, 0($t0)
nop
nop
beqz $t1, done4 # if $t1 == NUL, we are done
bgt $t1, 90, else # if char > 90 its a lower case
nop
addi $t1, $t1, 0x20 # if < 90 its upper case add 32
sb $t1, 0($t0)
addi $t0, $t0, 1 # add 1 to pointer
j loop4 # jump back to loop
nop
else:
addi $t1, $t1, -0x20
sb $t1, 0($t0)
addi $t0, $t0, 1
j loop4
nop
done4:
.data
string4:.空格82#输入字符串的空格
strcompt:.asciiz“请输入字符串:”
.文本
格洛博梅因酒店
主要内容:
la$a0,打印提示
李$v0,4
系统调用
la$a0,字符串4#读取字符串
李:1美元,80美元
李$v0,8
系统调用
la$a0,字符串4#打印字符串
李$v0,4
系统调用
la$t0,string4#$t0=&string4[0]
李$t1,0
第四条:
磅$t1,0($t0)
不
不
如果$t1==NUL,我们就完成了
bgt$t1,90,否则#如果char>90,则为小写
不
addi$t1,$t1,0x20#如果小于90,则其大写字母加32
sb$t1,0($t0)
addi$t0,$t0,1#将1添加到指针
j循环4#跳回循环
不
其他:
addi$t1,$t1,-0x20
sb$t1,0($t0)
addi$t0,$t0,1
j循环4
不
done4:
如果$t1
中的字符在a..Z
或a..Z
范围内,这里有一种无分支的方法来更改其大小写,如果它在该范围外,则不执行任何操作:
# if (upper($t1) >= 'A' && upper($t1) <= 'Z') $t2 = 1; else $t2 = 0;
andi $t3,$t1,0xDF # clear bit 5, if $t1 was an alphabetic character $t3 will now be uppercase
li $t2,'A'-1
sltu $t2,$t2,$t3
sltiu $t3,$t3,'Z'+1
and $t2,$t2,$t3
sll $t2,$t2,5 # $t2 = 0x20, or 0
xor $t1,$t1,$t2 # either swap case or do nothing
#if(upper($t1)>='A'&&upper($t1)这里有一种无分支的方法,可以更改$t1
中字符的大小写,如果它在A..Z
或A..Z
范围内,则不做任何操作:
# if (upper($t1) >= 'A' && upper($t1) <= 'Z') $t2 = 1; else $t2 = 0;
andi $t3,$t1,0xDF # clear bit 5, if $t1 was an alphabetic character $t3 will now be uppercase
li $t2,'A'-1
sltu $t2,$t2,$t3
sltiu $t3,$t3,'Z'+1
and $t2,$t2,$t3
sll $t2,$t2,5 # $t2 = 0x20, or 0
xor $t1,$t1,$t2 # either swap case or do nothing
#如果(upper($t1)>='A'&&upper($t1)确保您的代码缩进4个字符,以便正确格式化。{}代码按钮就是这样做的。@JonathonReinhart谢谢提示!确保您的代码缩进4个字符,以便正确格式化。{}代码按钮就是这样做的。@JonathonReinhart谢谢提示!