【问题标题】:Assembly: How to store string inside .asciiz?程序集:如何在 .asciiz 中存储字符串?
【发布时间】:2013-11-02 12:14:20
【问题描述】:

在汇编中,有没有办法将用户的输入作为字符串存储到 .asciiz 而不是 .word 中?

我知道 sw 和 lw,但是如何使用 .asciiz 呢?

谢谢

更新:

我不得不删除我的代码 sn-p,因为它是一个完整的作业程序。

如您所见,这是我正在尝试制作的应用程序,当程序从用户那里读取存储在userInput 中的文件名时,我无法执行选项processImage,但我使用了myInput2,它已经有我要读取的图像文件的名称,processImage 可以正常工作。

【问题讨论】:

  • 请发布您已经尝试过的解决方案。
  • 你能再检查一次吗,我已经更新了我的答案。
  • 您需要为输入分配一些空间。请参阅我的答案中的示例。
  • 我想我发现了问题,当我让用户指定图像名称时,我的代码不起作用,但如果我已经在 asciiz 中定义了图像名称,它将起作用。你能想到导致这种情况的任何问题吗?是的,我已阅读您的更新答案,我为输入名称分配了 20 的长度

标签: assembly mips


【解决方案1】:

swlw 是运行时指令,而 .asciiz 是编译时汇编程序指令。 如果需要,您可以使用.asciiz 为用户输入分配空间,但您仍然需要在运行时填充它,例如通过在循环中读取字符并使用sb 或使用read string 或类似系统存储它们有的话就打电话。

.asciiz 只是语法糖,可以更轻松地存储字符串,它相当于指定一堆字节,只是您不必手动找出值。 .asciiz "a".byte 97, 0 相同。

更新

    li $a1, 6     # length
    la $a0, str1  # buffer
    li $v0, 8     # read string call number
    syscall 

.data
str1: .byte 0, 0, 0, 0, 0, 0
str2: .word 0, 0, 0
str3: .space 6
.comm str4, 6
str5: .asciiz "12345"

上面的str1str5 都是等价的,只是str5 没有初始化为全零。您可以使用la $a0 行中的任何一个。

【讨论】:

  • 我回家后会试试这个,所以你的意思是我不能把从用户那里收到的字符串放到 .asciiz 中?相反,我必须把它放在 .Byte 中?我的问题是我想稍后加载文件名。我知道使用的唯一方法是 la $a0, 文件名。但这不适用于 .word
  • 你也可以把它放在.asciiz 中,la 与标签一起工作,它不关心用于指定数据的指令(如果有的话)。
  • 您能否再次检查我的问题,我已经更新了。它有我正在尝试做的程序代码,阅读下面的行,你就会明白我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多