易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

自定义指令集,做自己的SEQ处理器虚拟机   [复制链接]

    2023-12-06 08:55:30
    高级教程源码
    易语言资源网
    930 次浏览
    来源链接

看到大家组织民间的开源大赛,我也就花几个小时写点小玩意来给大家参考参考。

做了一个顺序执行(SEQ)处理器的虚拟机,暂且实现了Y86指令集基础命令的执行。

首先是Y86指令集的相关二进制定义:

可以看到,这是一个非常精简的指令集,只有:

halt(结束执行)、nop(空指令)、cmovXX(条件赋值)、irmovl(立即数赋值寄存器)、rmmovl(寄存器数据写道内存)、mrmovl(内存数据读到寄存器)、OPL(基本运算,包括加减、异或、其运算)、jXX(跳转语句)、call(调用指令)、ret(返回指令)、pushl(寄存器压栈)和popl(寄存器出栈)。

不够基本够用了。

寄存器信息如下:

为了防止不够用,我还特意加上了r8~r14共七个通用寄存器。

整个处理器虚拟机的设计严格按照Fetch(取指令)->Decode(解码,看需要使用哪些寄存器)->Execute(ALU单元执行计算阶段)->Memory(写回内存)->Write back(写回寄存器)->Program Counter Update(更新指令当前的PC)。

如果大家看不懂这些阶段是干了些什么,可以看下面两条指令的执行流程:

Call指令:

OPL指令:

这个SEQ处理器的虚拟机就很好实现了(内存部分就随便用数组映射一下吧):

程序中给了一个数组求和的DEMO:

速度大概是系统指令执行速度的1/60,没什么优化。

如果大佬有兴趣可以有将其改进成流水线式的,应该会好很多。



点我下载 (已有 9 次下载)

引用模块


源码文件名 模块文件名
SEQ.e
Y86架构的ISA.ec


引用支持库


源码文件名 支持库文件名 支持库标识
ISA.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
SEQ.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325


[错误报告]   上一篇:昵称转头像     下一篇:易语言DLL代码封装自动生成引用代码开源...