MIPS提示输入字符串并交换每个字符的大小写

MIPS提示输入字符串并交换每个字符的大小写,mips,Mips,我正在编写一个MIPS程序,提示用户输入一个字符串,然后解析该字符串,并交换每个字符的大小写。 例如-> 嘿,你变成了嘿,你。 我的问题是,如果它遇到一个空间,我如何让它什么也不做?任何帮助都会很好 .data string4:.space 82 # space for input string strPrompt:.asciiz "Please enter a string: " .text .globl m

我正在编写一个MIPS程序,提示用户输入一个字符串,然后解析该字符串,并交换每个字符的大小写。 例如->
嘿,你变成了嘿,你。 我的问题是,如果它遇到一个空间,我如何让它什么也不做?任何帮助都会很好

      .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谢谢提示!