Io 从控制台运行文本读取程序的程序集mips

Io 从控制台运行文本读取程序的程序集mips,io,mips,Io,Mips,我必须用mips汇编语言编写一个程序来读取txt文件并处理其中的信息,问题是它必须在unix控制台上使用类似于cat fileName.txt | java-jar Mars4_3.jar programName.asm的命令工作。 cat不是打开和读取文件的命令吗?要在程序集中打开一个文件,我需要它的名称包含一个带有空终止字符的字符串,这是一个输入错误还是我遗漏了什么?使用管道(|)告诉您将stdout从左命令映射到第二个命令的stdin。 因此,您必须使用syscall8来读取stdin。请

我必须用mips汇编语言编写一个程序来读取txt文件并处理其中的信息,问题是它必须在unix控制台上使用类似于cat fileName.txt | java-jar Mars4_3.jar programName.asm的命令工作。 cat不是打开和读取文件的命令吗?要在程序集中打开一个文件,我需要它的名称包含一个带有空终止字符的字符串,这是一个输入错误还是我遗漏了什么?

使用管道(
|
)告诉您将stdout从左命令映射到第二个命令的stdin。 因此,您必须使用
syscall
8来读取stdin。请注意,每次发出syscall 8时,都会读取一整行(直到换行),因此,如果您的输入有多行,则必须一次读取一行

本例将输入中的一行读取到缓冲区,然后再次打印:

.data
msg: .asciiz "Text: "
buffer: .space 16384  # Buffer size
.text
  li $v0, 8
  la $a0, buffer
  li $a1, 16384
  syscall  # Read text from stdin

  li $v0, 4
  la $a0, msg
  syscall

  la $a0, buffer  # Print read texto from stdin
  syscall

  li $v0, 10  # exit
  syscall 
然后像这样测试它(假设fileName.txt包含文本“this is a test!”):


听起来,无论是谁给你赋值,都希望程序从命令行而不是从文件中处理数据(如果你这样做,
cat filename | xargs some_program
,你会将
filename
指定的文件内容作为
some_program
的参数)。也许你应该请你的教授/导师澄清一下。这是否意味着你将以字符串的形式给出整个文件作为输入?如果像我的示例中那样使用
xargs
,你会得到文件内容作为一个或多个参数。例如,如果文件包含行
foo-bar
,您将得到
foo
bar
作为两个参数。该命令与我发布的命令完全相同,xargs it's not used,考虑到文件包含32行,拥有所有这些参数将是疯狂的。因此,它只是一个由文件所有内容组成的大字符串,它也保留新行字符吗?不,每个系统调用8一次读取一行,包括新行字符。因此,如果你有50行,你将不得不发出50个系统调用来获取所有这些行。如果其中一行必须被视为int,我可以使用系统调用来读取int,或者我必须解析它吗?如果你的输入文件有一个表示为ASCII字符串的整数,你必须解析它;通过阅读这行代码,你会得到代表数字的字符串。谢谢你,我现在正在编写一些代码,我永远也不会明白这一点。
cat fileName.txt | java -jar Mars4_3.jar programName.asm
Text: This is a test!