代表mips32中的结构

问题描述 投票:0回答:1

我正在学习Mips32进行考试,最近我在流浪如何在mips中转换结构。一般而言,我对mips和汇编代码还是比较陌生的,但是我尝试收集所有知识来制定解决方案。

假设我有一个简单的C结构:

struct Student
{
    int id;
};

int main()
{
    struct Student student;
    student={111111};
    return 0;
}

我要记住的是将所有数据存储在堆栈中,就像这样:

sub $sp,$sp,4
li  $t1,111111
sw  $t1,($sp)

并且如果我有多个学生,我只需创建一个例程即可将参数存储在堆栈中。但是,我有一个问题,我该如何跟踪所有学生?也许带有框架指针?

我不知道这是否是在mips中表示结构的合适方法,请告诉我是否有更好的解决方案。

c assembly struct mips32
1个回答
0
投票

您的数据可以是本地的,静态的或动态分配的。没有一个规则。请参阅:https://godbolt.org/z/gfDVD8

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

typedef struct
{
    int x;
    int y[4];
    char name[23];
}MYSTRUCT_t;



MYSTRUCT_t my_global_struct[10];

void my_global_struct_foo(void)
{
    for(size_t pos = 0; pos < 10; pos++)
    {
        my_global_struct[pos].x = rand();
        my_global_struct[pos].y[0] = my_global_struct[pos].x / 2;
        my_global_struct[pos].name[4] = my_global_struct[pos].y[0];
    }
}

void my_static_struct_foo(void)
{
    static MYSTRUCT_t my_static_struct[10];

    for(size_t pos = 0; pos < 10; pos++)
    {
        my_static_struct[pos].x = rand();
        my_static_struct[pos].y[0] = my_static_struct[pos].x / 2;
        my_static_struct[pos].name[4] = my_static_struct[pos].y[0];
    }
}

void my_local_struct_foo(void)
{
    volatile MYSTRUCT_t my_local_struct[10];

    for(size_t pos = 0; pos < 10; pos++)
    {
        my_local_struct[pos].x = rand();
        my_local_struct[pos].y[0] = rand();
        my_local_struct[pos].name[4] = rand();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.