MIPS动态内存分配和指针



我正在建造一个带有野牛的编译器,并遇到了这个问题。我需要动态分配内存和存储字符串,然后打印它。

我考虑在数据部分中保存指针,然后分配内存保存在指针中,分配字符串阀,然后打印。我的问题是,当我尝试打印字符串时,它仅打印出第一个字符。这是一个代码示例。

.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 a。有什么想法?

我只是在猜:但是字符通常存储在字节中。因此,b应该以1($ v0(而不是4($ v0(进行,您需要在2中终止。

安德鲁(Andrew(感谢您的提示。问题在于,Syscall 4是通过字节读取的字节,我正在加载单词,因此每个单词填充有空的词,因此仅打印出第一个字节然后停止。解决方案是使用SB(存储字节(指令并将偏移递增1。感谢您的帮助。

最新更新