Mips动态内存分配和指针

时间:2017-04-14 14:14:26

标签: assembly mips

我正在使用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。 任何想法为什么?

2 个答案:

答案 0 :(得分:0)

我只是猜测:但是字符通常以字节存储。因此b应该是1($ v0)而不是4($ v0),并且你需要在2中使用null来终止。

答案 1 :(得分:0)

Andrew感谢提示,它有效。 问题是系统调用4是逐字节读取的,我正在加载字,所以在填充为null的每个字符之间填充,所以它只打印第一个字节然后停止。 解决方案是使用sb(存储字节)指令并将偏移量递增1。 谢谢你的帮助。