网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月25日漏签0天
c语言吧 关注:799,034贴子:4,359,387
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 3回复贴,共1页
<<返回c语言吧
>0< 加载中...

Y86-64模拟器实现

  • 只看楼主
  • 收藏

  • 回复
  • UZOM
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最近在看CSAPP的第四章,里面用Y86-64的指令集体系结构实现了其顺序实现,与流水线实现。本来打算快点过掉的,结果越看越看不懂。所以打算自己实现一个简单的Y86的模拟器,帮助自己理解,这里记录一下。




  • UZOM
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可能比较慢,最近期末周


2025-08-25 20:16:33
广告
不感兴趣
开通SVIP免广告
  • UZOM
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
找到一个指令的文档还可以,就对着这个写了https://classpages.cselabs.umn.edu/Fall-2018/csci2021-010/slides/15-sequential-6up.pdf


  • UZOM
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#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
先把寄存器文件写了,寄存器文件主要是用来处理读写,只要做好映射关系,比较简单


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示