这个是很简单的串行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]
寻址方式:
为了简化控制器~ 这个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]
200字以内,仅用于支线交流,主线讨论请采用回复功能。