我正在学习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中表示结构的合适方法,请告诉我是否有更好的解决方案。
您的数据可以是本地的,静态的或动态分配的。没有一个规则。请参阅: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();
}
}