没有合适的资源?快使用搜索试试~ 我知道了~
微处理器实验报告-吕志恒-2016080107191
需积分: 0 0 下载量 11 浏览量
2022-08-04
12:38:42
上传
评论
收藏 1.99MB PDF 举报
温馨提示
试读
31页
1. 设计思路: 2. 汇编器架构: 3. 关键代码说明: 4. 运行结果:运行环境:Windows7+CODEBLOCK 5. 遇到的问题: 6. 实验心得:
资源详情
资源评论
资源推荐
HUNAN UNIVERSITY
微处理器设计
实验报告
姓 名 :
吕志恒
班 级 :
智能
1602
学 号 :
201608010719
时 间 :
2019-12-10
一、RV32I 的汇编器
1.
设计思路:
首先将指令用
vector
这个数据结构映射成(指令名称,指令类型,
16
进制表示)的形式,具体的实现方式是先将映射关系通过
map
实
现,然后将
map
存入
vector
。最后用指令去查该表得到对应的
16
进
制表达,使用
vector
的原因是因为其查询复杂度较低同时可以有效
节省空间的使用。接着转换成机器能识别的二进制表示。用到的主要
数据结构有:
std
::
map
,
std
::
vector
。
2.
汇编器架构:
汇编器由以下部分组成:
main
:读取测试的指令;
helper
:分离指令成若干部分;
assembler
:负责将指令转换成二进制形式;
instruction_set
:负责维护一个映射表,同时返回查询结果。(指令
名称,指令类型,
16
进制表示)
3.
关键代码说明:
(
1
)建立映射表:(只贴部分代码)
这里返回的类型是一个
map
,可以理解为
vector
存储的对象是
map
。
查询代码如下:
(
2
)分离指令:
函数的返回值是
vector
类型,函数有两个参数,一个是输入的指令,
一个分割标志符,比如指令的逗号或者指令尾部的结束符,用于分离
判断。函数执行逻辑如下:在没有判断到指令结束前,不断从指令截
取字符
push
到一个
vector
,然后判断
vector
顶部是不是一个分隔符,
如果是则说明截取成功能,这个时候
current
的值为
nop
退出分离同
时返回分离结果。比如指令
add
,
x1
,
x2
分离后就是
add
(只执行
一次该函数)
(
3
)汇编转换
这里我用了一个
switch-case
,目的是根据指令的类型调用不同类型
的函数,如
R
类型函数,则用
R
类型的处理函数。如图:
函数的具体实现:
其它具体实现详见代码。实现的思路都是先根据指令的类型,然后再
去获取对应的位置的内容写入到寄存器里面去。
parse_register
是一
个解析函数,作用是提取指定位置的内容。其实现如下:
有个立即数解析的函数也是类似的原理,如下:
汇编处理函数:
剩余30页未读,继续阅读
yxldr
- 粉丝: 20
- 资源: 327
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0