c - C 中的寄存器数组

标签 c

我需要一个数组来存储寄存器($t0,$t1,...)以及它们是否正在使用。

到目前为止,我得到了这个,其中第一个字段是寄存器名称,如果寄存器正在使用或未使用,第二个字段必须为 0 或 1。

char* registers[2][10] = {
                      {"$t0", "0"},
                      {"$t1", "0"},
                      {"$t2", "0"},
                      {"$t3", "0"},
                      {"$t4", "0"},
                      {"$t5", "0"},
                      {"$t6", "0"},
                      {"$t7", "0"},
                      {"$t8", "0"},
                      {"$t9", "0"}
                      };

但是我现在很迷茫,因为我不知道如何访问寄存器并检查它是否正在使用,或者如何将寄存器设置为已使用,等等。

最佳答案

假设您不是指的是硬件的寄存器:(如果您指的是它们,请参见下文)

我宁愿像这样构建一个寄存器结构:

struct register {
   int is_used;
   char* name;
}

要存储和访问它们,数组就足够了:

struct register* registers;

然后您可以访问您的“寄存器”,例如如下所示:

registers[n].is_used //where n is the position of your register you want to refer
<小时/>

要访问硬件寄存器(我假设您的意思是程序集寄存器 rax、rbx 等),您可以使用内联汇编(请参阅此处的 linux 和此处的 windows )Windows 链接上没有保证,我不为windows系统编程

然后就可以使用与上面相同的策略来存储和访问寄存器

关于c - C 中的寄存器数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264748/

相关文章:

条件表达式作为 printf 的参数

c - 合并函数(合并排序)中的错误

c - libcurl 什么时候关闭由 OPEN_SOCKETFUNCTION open_callback 打开的套接字?

C - 左移或添加到自身(速度)

c - mvprintw() 只打印部分

c - git diff 仅一个文件

c - 为什么用来保存getchar返回值的变量必须声明为int?

c - 没有sigqueue如何发送数据?

c++ - 什么时候在网络编程中使用ntohs函数?

c - 在c中使用scanf()获取多行输入