我正在使用bison构建编译器并遇到此问题。 我需要动态分配内存并存储字符串然后打印它内容。
我考虑过在数据部分保存一个指针然后分配内存保存指针中的地址,分配字符串val然后打印它。 我的问题是,当我尝试打印字符串时,它只打印第一个字符。 这是一个代码示例。
.data
p: .word 0 # pointer to save the allocated memory first address.
.text
li $v0,9 #allocate instruction
li $a0,64 # allocate 64 byte
syscall
sw $v0,p #save the first memory address to pointer p
li $t0,'a' #write the first byte 'a' cahr
sw $t0,0($v0)
li $t0,'b' #write the first byte 'a' cahr
sw $t0,4($v0)
li $v0,4 #print instruction
lw $a0,p
syscall
这将导致火星控制台上的char。 任何想法为什么?
答案 0 :(得分:0)
我只是猜测:但是字符通常以字节存储。因此b应该是1($ v0)而不是4($ v0),并且你需要在2中使用null来终止。
答案 1 :(得分:0)
Andrew感谢提示,它有效。 问题是系统调用4是逐字节读取的,我正在加载字,所以在填充为null的每个字符之间填充,所以它只打印第一个字节然后停止。 解决方案是使用sb(存储字节)指令并将偏移量递增1。 谢谢你的帮助。