Assembly 如何在.space类型MIPS中存储立即字符
我目前正在尝试将ascii字符转换为二进制的等效字符,作为我运行的更大程序的一部分。我有一个输入缓冲区,我可以通过一个字符一个字符地成功解析,我使用分支语句来运行特定命令,如下所示:Assembly 如何在.space类型MIPS中存储立即字符,assembly,char,mips,Assembly,Char,Mips,我目前正在尝试将ascii字符转换为二进制的等效字符,作为我运行的更大程序的一部分。我有一个输入缓冲区,我可以通过一个字符一个字符地成功解析,我使用分支语句来运行特定命令,如下所示: .data ... binaryBuff: .space 32 ... .text ... la $s1, binaryBuff #Store buffer for binary string in $s1 ... beq $t1, '0', zero #
.data
...
binaryBuff: .space 32
...
.text
...
la $s1, binaryBuff #Store buffer for binary string in $s1
...
beq $t1, '0', zero #If current character is ascii zero
...
zero:
jal loadZero
jal loadZero
jal loadZero
jal loadZero
j afterCBChecks
...
loadZero: #Load zero into current space in binary buffer, then move to next char
addi $t2, $zero, 48
sb $s1, ($t2) #Load 0 into current $s1 byte
addi $s1, $s1, 1 #Move to next char
jr $ra
我的问题是代码的loadZero部分。我需要能够将单个字符(0或1)存储到由$s1引用的缓冲区中的一个字节中,然后移动到空间中的下一个字节进行重复。我必须这样做以进一步分析二进制字符串作为一个整体,因此(据我所知)不存在其他存储信息的选项
当前,sb$s1,($t2)
命令在0x004002d4处返回错误运行时异常:地址超出范围0x00000030
,我知道这是因为我使用的命令试图将地址存储到$s1中,而不是普通字符值。我只是不确定什么命令会真正执行我想要的操作
长话短说,我需要一种方法将立即字符值存储到.space
数据类型中
一种更有效的方法来实际比较ascii值也不会有什么坏处,因为有16个分支条件,并且每个分支都以相同的方式布局,它在我的代码中使用了122行(这让我很烦恼)。我有一个以前的方法,使用了更多的比较,总的线条更少,但即使这样也让我感到困扰。但是,当我要求装配时,可能对装配要求太多。请密切注意错误消息。它告诉您地址0x30 aka 48是一个用于存储的坏内存地址。交换寄存器操作数。@ErikEidt我应该知道的。事情总是非常简单。。。谢谢你的回答。如果你想把它作为一个实际的答案而不是一个评论,我可以为你标记它是正确的。