【问题标题】:Mips dynamic memory allocation and pointersMips 动态内存分配和指针
【发布时间】:2017-04-14 14:14:26
【问题描述】:

我正在使用 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

这将导致火星控制台上的字符 a。 任何想法为什么?

【问题讨论】:

  • 尝试使用.align,因为您使用的wordchar不一致

标签: assembly mips


【解决方案1】:

我只是猜测:但字符通常以字节存储。因此 b 应该进入 1($v0) 而不是 4($v0) 并且你需要一个 null in 2 来终止。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-07-12
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2015-06-19
      • 2019-06-24
      • 2013-10-04
      • 1970-01-01
      相关资源
      最近更新 更多