14年3个月前IP:未同步
454494
6楼
这个是很简单的串行CPU,估计200来片74系列IC,只要看几节计算机原理的教程不难YY出它的工作原理;之前是想搞16位的,16位的指令空间很大,一个字的指令就可以源/目的寄存器同时寻址,后来发现Multisim 11.0电路大一些就慢了 可能我的电脑太垃圾, 这个8位的CPU画到最后连一根线都要十来秒,本来两天就能连接完成的,硬是弄了一个星期,工作效率啊啊~~~[s:275][s:275]

寻址方式:
为了简化控制器~ 这个8位机只做了3种寻址:立即数寻址、寄存器寻址、寄存器间接寻址。
除了立即数传送为双字节指令,其他都是单字节指令,内存传送指令、转移指令、调用指令的16位地址是用R3和R4寄存器分别作为高地址和低地址,也就是R3和R4默认组成的16位寄存器间接寻址,所以先要用立即数传送指令把地址送上去。

源运算指令操作过程:
累加器(被加数) + 源寄存器(加数)    结果送回累加器
累加器(被减数)  -  源寄存器(减数)    结果送回累加器
算术、逻辑的源运算指令操作和上面是一样的就不一一列出了。

目的运算指令操作过程:
目的寄存器加1     结果送回目的寄存器
目的寄存器减1     结果送回目的寄存器
目的寄存器取反     结果送回目的寄存器
移位指令的操作过程和上面一样,一条指令移一位,为了简化电路~~~ 当然用立即数或寄存器指出移位次数一样可以实现,但是电路会复杂很多。

关于运算指令、移位指令、出入栈、对标志位的影响:
运算和移位参考8086。。~[s:229]
出入栈操作的是标志寄存器和低7位。

还有中断的入口地址~ 懒的搞什么屎量号查表,直接从外部读16位程序地址[s:269]

对。。忘了说了:
出入栈地址为  堆栈页(高8位) 和堆栈指针(低8位)组成的。
程序地址为  代码页(高8位) 和程序指针(低8位)组成的。  
还有那个堆栈深度是0~255个字节,先入栈再加1,先减1再出栈;
程序指针也是0~255,所以在255的位置放一条代码页加1指令就OK了;
为什么不用计数器~~~太难用[s:213]

CPU很好玩的  开关开关开关。。。。。。。。。。。就执行指令,外国佬真是牛X , 发明了这么吊的东西[s:219]
评论
文号 / 454494

千古风流
名片发私信
学术分 4
总主题 71 帖总回复 1168 楼拥有证书:学者 机友 笔友
注册于 2011/08/12 17:13:20最后登录 2022/12/22 11:43:34
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的