#ifndef CSTUDY_REGISTER_H
#define CSTUDY_REGISTER_H
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
enum Registers {
RAX = 0, RCX = 1, RDX = 2, RBX = 3,
RSP = 4, RBP = 5, RSI = 6, RDI = 7,
R8 = 8, R9 = 9, R10 = 10, R11 = 11,
R12 = 12, R13 = 13, R14 = 14, R = 15
};
std::unordered_map<std::string ,int> reg_map{
{"%rax",RAX},{"%rcx",RCX},{"%rdx",RDX},{"%rbx",RBX},
{"%rsp",RSP},{"%rbp",RBP},{"%rsi",RSI},{"%rdi",RDI},
{"%r8",R8},{"%r9",R9},{"%r10",R10},{"%r11",R11},
{"%r12",R12},{"%r13",R13},{"%r14",R14}
};
class RegisterFiles{
private:
int64_t registers[16]{};
public:
RegisterFiles(){
std::fill_n(registers,15,0);
}
int64_t read(int reg_id){
if (reg_id == R) {
std::cout << "没有此寄存器 无法读取" << std::endl;
return -1;
}
return registers[reg_id];
}
void write(int reg_id,int64_t val){
if (reg_id == R){
std::cout << "没有此寄存器 无法写入" << std::endl;
return;
}
registers[reg_id] = val;
}
};
#endif //CSTUDY_REGISTER_H
先把寄存器文件写了,寄存器文件主要是用来处理读写,只要做好映射关系,比较简单
