MIPS动态单链表

时间:2014-09-25 16:24:03

标签: c assembly mips

我尝试使用用户输入在MIPS中创建具有动态内存分配的链接列表。

我想知道是否存在通常用于创建节点的通用结构(C中的结构) - 例如,可能使其成为将在条件语句中调用的子进程。

我要翻译的结构是:

struct p {
    char name[256];
    int phone;
    float rating;
    struct p *next;
};

结构的每个部分的输入将由用户输入(这部分我知道如何操作和存储),但我不确定如何在堆上分配寄存器值以动态完成此操作。

最终,我会根据评分对这些值进行排序。

感谢帮助 - 谢谢!

2 个答案:

答案 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)