我尝试使用用户输入在MIPS中创建具有动态内存分配的链接列表。
我想知道是否存在通常用于创建节点的通用结构(C中的结构) - 例如,可能使其成为将在条件语句中调用的子进程。
我要翻译的结构是:
struct p {
char name[256];
int phone;
float rating;
struct p *next;
};
结构的每个部分的输入将由用户输入(这部分我知道如何操作和存储),但我不确定如何在堆上分配寄存器值以动态完成此操作。
最终,我会根据评分对这些值进行排序。
感谢帮助 - 谢谢!
答案 0 :(得分:2)
在链表中,每个节点由两个项组成:
1. 数据
2. 下一个节点的地址
为了分配足够的内存,你必须找到你需要的字节数。在你的情况下,你需要256字节的数组字段,4字节的int字段,8字节的浮点字段和4字节的下一个节点的地址..
如果你想创建你的第一个结构,你可以这样做:
addi $v0,$0,9
addi $a0,$0,272
syscall
现在你可以为结构赋值......
例如,如果您想将数字7存储在电话字段中,您可以执行以下操作:
addi $t0,$0,7
sw $t0,256($v0)
答案 1 :(得分:1)
如果注册$t9
包含struct p
实例的地址,则可以使用$t9
的偏移来访问结构的字段。
加载name
的第一个字符lw $t0, 0($t9)
。
加载phone
执行`lw $ t0,256($ t9)。
要加载rating
执行lwc1 $f0, 260($t9) # 256 + sizeof(int)
要加载next
执行lw $t0, 264($t9) # 256 + sizeof(int) + sizeof(float)