【开坑】在mc里搞个操作系统!!!!!

那么在总结一下,isa设计的思路便差不多浮出水面了

楼主 savenseg  发布于 2019-05-04 10:20:00 +0800 CST  
首先得确定一下cpu的硬件配置:
需要两个stack,一个寄存器组,
功能寄存器至少包括psw和ip
alu不必支持乘除。
然后又综合的考虑了下,最终还是落定了处理器位宽为16bits。
虽然这样导致了控制线信号传输需要延续一次,但是在更多设计方面轻松很多

楼主 savenseg  发布于 2019-05-04 12:10:00 +0800 CST  
寄存器组的设计

楼主 savenseg  发布于 2019-05-04 12:29:00 +0800 CST  
好麻烦啊

楼主 savenseg  发布于 2019-05-04 12:41:00 +0800 CST  
大概是这个cpu的行为级架构了

楼主 savenseg  发布于 2019-05-04 14:16:00 +0800 CST  
虽然简单但是并不打算弄一些用于提速的架构技术,比如流水线或者乱序执行。但是作为对性能的增强可能会提供一些复合的复杂指令,以压缩指令数

楼主 savenseg  发布于 2019-05-04 14:33:00 +0800 CST  
是时候开始设计指令集架构isa了


楼主 savenseg  发布于 2019-05-04 15:54:00 +0800 CST  
isa-16bits
提供16个寄存器R15到R0:
R15:$opcode //来自InRegA的操作码
R14:$data //来自InRegA的数据
R13:$input //来自InRegB的数据
R12:$psw //状态位寄存器
R11:$ip //程序计数器

R10:$sa //堆栈A入口元素值
R9:$sb //堆栈B入口元素值
R8~R1:$r8~$r1 //普通的寄存器
R0:$zero //永远为0
PSW的标志位含义:
CMF=11:A=B,CMF='='
CMF=10:A>B,CMF='>'
CMF=01:A<B,CMF='<'
CMF=00: - ,CMF='-' //未设置状态
暂时只提供标志位CMF,以后可能添加。


算术指令:
add A,B
sub A,B //这个是A=A-B
and A,B
or A,B
nor A,B
xor A,B
cmp A,B //设置状态位
mov A,B //也就是A=B
inc A
dec A
sl A,imm
sr A,imm //通过4bit的imm直接指定偏移量,可能会限制可使用的偏移值.
功能:{A<-F(A,B)},F∈{add,sub.....},inc和dec没有参数B


内存交互指令:
load A,B // $A<-[$B]
store A,B // [$B]<-$A


堆栈指令:
pop A //pop($A)
push A //push($A)
popm A //pop([$A])
pushm A //push([$A])


控制转移
jmp A //无条件
jmp= A //CMP='='
jmp> A //CMP='<'
jmp< A //CMP='>'


立即数载入:
immh imm //R1H<-imm
imml imm //R1L<-imm
//可能会加更多


楼主 savenseg  发布于 2019-05-04 16:21:00 +0800 CST  
这还只是初步的,因为很显然某些指令如果绑到一起的话可以明显减少指令使用数,
比如inc或者dec和条件跳转可以绑定push,pop也可以和inc绑定,


楼主 savenseg  发布于 2019-05-04 16:25:00 +0800 CST  
所以这个cpu的结构可以这样表示:
device-cpu-ram-device
可以进一步划分为
device-gpr-alu-gpr-ram-device


楼主 savenseg  发布于 2019-05-04 20:14:00 +0800 CST  
又一天结束了,快乐的时光总是短暂,明天就要上学了(T ^ T)

楼主 savenseg  发布于 2019-05-04 23:23:00 +0800 CST  
假期结束了555


楼主 savenseg  发布于 2019-05-05 19:46:00 +0800 CST  
外设与硬件的关系

楼主 savenseg  发布于 2019-05-05 21:36:00 +0800 CST  
今天一点也不快乐


楼主 savenseg  发布于 2019-05-05 22:59:00 +0800 CST  
进一步详细的架构

楼主 savenseg  发布于 2019-05-06 19:49:00 +0800 CST  
楼主思考后,认为完全可以用add和addc(add= add> add<)来代替原本的jmp指令。

楼主 savenseg  发布于 2019-05-06 19:52:00 +0800 CST  
好吧我傻了,这个isa里的结构只支持2个操作数,还是代替不了的。依旧用jmp和jmpc


楼主 savenseg  发布于 2019-05-06 19:58:00 +0800 CST  
有人ma

楼主 savenseg  发布于 2019-05-06 20:29:00 +0800 CST  
又傻了,其实是可以代替jmp和jmpc的。只不过要用mov和movc

楼主 savenseg  发布于 2019-05-06 20:34:00 +0800 CST  
内存划分与流

楼主 savenseg  发布于 2019-05-06 23:16:00 +0800 CST  

楼主:savenseg

字数:26214

发表时间:2019-05-03 05:22:00 +0800 CST

更新时间:2020-06-01 12:02:37 +0800 CST

评论数:575条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看