arrays - 如何将用户输入的字符串放入 MIPS 中的数组中
问题描述
我正在开发一个程序,该程序将从用户那里读取字符串,直到其中一个字符串显示“END”。我需要读取每个字符串并将其存储在一个数组中,以便我可以访问程序另一部分中的值。我知道读入的字符串不会超过 20 个,并且每个字符串不会超过 15 个字符。
到目前为止,这是我尝试过的:
#Arrays
animals: .word 80
la $s0, animals #Load the address of animals array into #$s0
add $t6, $0, $s0 #Copy address of animlas into $t6
获取用户输入:
addi $v0, $0, 8 #syscall code for read user input
la $a0, animal #Where to store read string (animal)
addi $a1, $0, 15 #Max character allowance
syscall #Execute
将值放入数组中:
sw $a0, 0($t6) #Load the address of animal into animals array
addi $t6, $t6, 4 #Increment index of array for next element
然后将读取的字符串发送到我已经彻底测试过的字符串比较函数;它工作正常!比较函数测试读取的字符串是否等于“END”。从函数返回后,代码继续循环,直到它读取“END”
要点是,在 MIPS 中将字符串读入数组的最佳方法是什么? 我对 MIPS 相当陌生,因此将不胜感激任何帮助!
解决方案
我将有 1 个大20 * (15+1)
字节缓冲区,以及指向每个字符串开头的单独指针数组。将字符串读入大缓冲区中的某个位置后,将指针存储到指针数组中,并将 char 缓冲区中的当前位置增加长度(作为系统调用返回值获得)。
为 0 终止符留出空间,或者也存储长度。
或者,不要使用指向压缩字符串开头的指针,而是使用struct { char str[16]; } string_array[20];
. 这会在数组内部留下未使用的空间,而不是在打包缓冲区末尾的大块中。
将每个字符串填充到固定宽度的一个好处(在这种情况下,它是 2 的幂)是您可以lw
从读取字符串的位置执行单词加载 ( )。然后您可以bne $t0, $t8, top_of_loop
一次检查所有 4 个字节是否存在"END\0"
,如果不存在则继续循环。$t8
(使用 lui/ori 或负载获取该 4 字节值。)
推荐阅读
- database - 将 AWS DynamoDB 与 Android 集成
- html - 在 R Shiny 中将变量解析为 HTML 文件
- algorithm - 需要帮助找到线性排序算法
- google-apps-script - 如何在谷歌脚本库中输入提示谷歌类型?
- html - 如何拥有相同大小的 3 张图像,当我切换到移动模式时,3 张图像重叠?
- sql - 在 bigquery 中查询配置单元
- graphql - 嵌套数据的平均聚合
- r - 如何在 R 中获得一个表格,其中包含时间序列中变量的 t、t-1、t-2、t-3 等的平均值?
- asp.net-core - Azure AD 身份验证后首次登录网站
- python - 遍历 Panda 数据框中的多个列并找到计数唯一值