- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[报告]SimpleScalar简介课件
SimpleScalar简介;概要;附加论题;SimpleScalar Tool Set 简介;SimpleScalar Tool Set 简介;SimpleScalar Tool Set 简介;功能级模拟器设计的初步分析;模拟执行流程;模拟器初始化步骤一 —— 分析命令行参数;所谓指令译码器实际上是一个ss_opcode枚举型的全局数组ss_mask2op,每个元素存放的是SimpleScalar体系结构中的指令所对应的一个枚举值(0~255)。SimpleScalar规定最多有255条指令,而数组ss_mask2op有256项,所以可以以指令的操作码(0x01~0xff)为索引,把定义了的指令映射到对应项中,在该项中写入一个枚举值(1~255),而初始值0恰恰代表了未定义的指令;
为什么要做这样一个看似繁琐的操作码到枚举值的附加转换呢?目的除了能方便的进行各种有效性检查(如指令的重复定义、指令数大于255、程序用到未定义的指令等等)之外,更重要的是为了在改变指令集定义文件ss.def的同时不需要对源程序做任何改动,大大方便了用户对指令集的修改(这其实也是前面提到的编程技巧的根本目的所在,我们稍后会详细讨论);SimpleScalar是31位虚拟地址结构:【30:16】为块索引,【15:0】是块内偏移;
相应的,SimpleScalar只有一级页表,是一个存储块首址的数组mem_table,以虚拟地址的【30:16】为索引得到的数组项的值即为SimpleScalar的物理块首址,再以【15:0】为偏移量即可得到真正的地址;
值得注意的是,这些所谓的“物理地址”,其实都是宿主机的虚拟地址,是通过调用宿主机操作系统的内存分配函数得到的;
初始化内存系统就是将mem_table的每一项置为NULL。;程序由命令行指定的文件载入,该文件有一定的格式,其文件头和各个扇区(section)头中记载了诸如大小尾端标志、数据属于哪个段、数据应装入的虚拟地址等等信息;
载入过程:由宿主机操作系统分配存储空间,并建立页表,按照文件指定的地址装入程序的各段数据。
然后……;初始化栈、段信息,包括:
※注:堆栈段是反向增长,即其末址为7FFFC000-10000=7FFEC000
然后……
;初始化堆栈
输入参数(此处的参数是给可执行程序的参数,有别于SimpleScalar的命令行参数)个数写入栈顶
构造argv指针数组和envp指针数组,各指向对应参数所在的栈单元
分别将argv和envp数组中各参数值复制到对应的栈单元
这到底是为了什么?;模拟器核心的寄存器均以全局变量的形式给出;
初始化包括:
单精度浮点寄存器组regs_F(RF0~RF31)置零
整数寄存器组regs_R(R0~R31)置零,但栈顶地址寄存器R29置为ld_eviron_base
存储乘除结果的高、低字寄存器regs_HI、regs_LO置零
浮点条件码寄存器regs_FCC置零
程序寄存器regs_PC置为ld_prog_entry;功能级模拟可统计的信息包括:指令条数、运行时间、运行速度、各段参数
统计信息库中表示各信息的单元与表示该信息的全局变量相关联,模拟执行过程中,全局变量不断改变,但是无需对统计信息库做任何更改
有趣的是:对于数学表达式形式的统计信息,SimpleScalar仍然以字符串的形式记录在库中,当要输出统计信息时,用一个简单的编译器对该表达式进行解析,只要表达式合法,则能计算输出相应的信息;在这里,我们又一次看到了将已有程序指令的二进制操作码转换为枚举值的过程,这同样是为了支持前面所述的目标: 指令集的独立可配置 (稍后将系统的回顾SimpleScalar为支持该目的所使用的技巧);模拟器初始化回顾;模拟执行流程;功能级模拟器核心执行;模拟执行流程;输出统计信息;附加论题一个重要的编程技巧;For Example;初始化指令译码器时: #define DEFINST(OP,MSK,..) \if (ss_mask2op[(MSK)]) fatal(doubly defined mask value);\ if ((MSK) SS_MAX_MASK) fatal(…);\ss_mask2op[(MSK)]=(OP);
于是,整个初始化数组ss_mask2op就仅剩一句话: #include “ss.def”;核心执行时: #define DEFINST(OP,...,EXPR) \ case OP: \ EXPR; \ break;
于是整个核心执行过程就只是: switch (SS_OPCODE(inst)) { \ #inclu
您可能关注的文档
最近下载
- 中国飞机座舱透明件行业市场占有率及投资前景预测分析报告.pdf VIP
- 静脉用药安全输注药护专家指引.pptx VIP
- 十年(2015-2024)高考英语语法填空真题与模考试卷汇编16-定语从句a原卷版(含答案).pdf VIP
- AQ 2061-2018 金属非金属地下矿山防治水安全技术规范.docx VIP
- (新)预防艾梅乙母婴传播试卷.docx VIP
- 香丽高速公路第八标段弃土场.docx VIP
- CT扫描技术模拟试题及答案、南方医科大学2006级医学影像技术学试卷.pdf VIP
- 运动生理学(全集)PPT(精品PPT).pptx VIP
- 人工智能基础与应用课件.pptx VIP
- GB 14976-2002 流体输送用不锈钢无缝钢管.pdf VIP
文档评论(0)