对不起,有人可以帮我吗?我需要转换所有小写字母,例如“你好,你好吗?” “你好,你好吗?”,
这是我到目前为止所做的:
.data
firsttyped: .asciiz ""
newline: .asciiz "\n"
.text
main:
li $v0, 8
li $a1, 20
la $a0, firsttyped
syscall
li $v0, 4
li $t0, 0
loop:
lb $t1, firsttyped($t0)
beq $t1, 0, exit
sub $t1, $t1, 32
sb $t1, firsttyped($t0)
addi $t0, $t0, 1
j loop
exit:
li $v0, 4
la $a0, firsttyped
syscall
li $v0, 10
syscall
有人可以帮我解决这个问题吗? 我需要防止出现下划线的错误。
顺便说一句,我不懂psuedo代码。
答案 0 :(得分:3)
你应该:
为此,你会:
从firsttyped替换.asciiz ""
:
firsttyped: .space 20
在beq $t1, 0, exit
blt $t1, 'a', not_lower
bgt $t1, 'z', not_lower
并在not_lower
之前添加标签addi $t0, $t0, 1
:
not_lower:
答案 1 :(得分:3)
您是否尝试从每个字母中减去12月12日?在Ascii表中,char' A'的dec值。数字是65,而char' a'是97年12月,所以' a' - 32 =' A'。
如果你需要代码,我会写给你。
亲切的问候
答案 2 :(得分:1)
作为替代方案,您可以使用由输入字符值索引的256个字符的预定义转换表,其中包含已转换的字符值,其中大部分与输入字符索引相同,但小写到大写除外皈依。
例如,xlat_table ['A'] ='A'(无变化),而你也有xlat_tbl ['a'] ='A'(转换为大写)。
您可以使用其他程序为表创建源代码或手动创建它。
对实际表的部分使用C示例:
unsigned char xlat_table[256] = {
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, // index 0x00
0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, // index 0x08
...
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47 // index 0x40
...
0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47 // index 0x60
...
0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff}; // index 0xf8
所以xlat_table ['A'] == xlat_table [0x41] =='A',xlat_table ['a'] == xlat_table [0x61] =='A'。所有值==索引,除了[0x61]到[0x7A] == 0x41到0x5A,将小写转换为大写,不影响其他值。
我对mips的猜测
xlattbl .byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07
.byte 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f
...
la %t3,xlatbl
; $t0 has next byte to translate
add $t0,$t0,$t3
lb $t0,($t0)