MIPS汇编 - 字符串到二进制表示

时间:2011-10-22 21:20:18

标签: c string assembly ascii mips

我想将字符串转换为C中的二进制表示以适合MIPS汇编(我在C中编写MIPS汇编程序)。

对于字符串“The sum”,MIPS按以下方式执行(我提取了MIPS的.data部分):

00100000011001010110100001010100
00100000011011010111010101110011
01101110001000000110011001101111
01100101011000100110110101110101
01101001001000000111001101110010
01110010011000010010000001101110
00100000011110010110000101110010

字母T是二进制的1010100。我可以在第一行的末尾看到1010100,但其余部分不应该为零(因此,由于MIPS处理的是32位,因此符号扩展为32位)?

h是1101000,第二行甚至没有1101000.为什么会这样?

有人可以向我解释一下吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

$ echo "00100000011001010110100001010100
00100000011011010111010101110011
01101110001000000110011001101111
01100101011000100110110101110101
01101001001000000111001101110010
01110010011000010010000001101110
00100000011110010110000101110010
"| perl -pe '$_=pack"B*",$_'
 ehT musn foebmui srra n yar

不知何故,该字符串的字符是奇怪的顺序。您是否在int中对4个字符进行分组?

答案 1 :(得分:0)

ASCII数据不是“符号扩展”。使用MIPS Mars模拟器,我输入:

.data 
.asciiz "The sum"

.text
main:

这会生成数据段:

Address:   Value:
0x10010000 0x20656854
0x10010004 0x006d7573

BUT WAIT,不仅仅是54:68:65:20:73:75:6d的“和”的十六进制值?是的,注意它们实际存储的顺序。或者更确切地说,看看Endianness。最低值具有最高地址(或者,最高有效字节是第一个地址)。 ASCII字符串使用Big Endian格式存储。

因此,当您存储字符串时,计算十六进制值,将字符串拆分为单词,然后以相反的顺序存储每个字符。然后转换为二进制。

相关问题