暂定指令表(下表暂时作废,已经制定出新表,与下表出入较大):
由于CU还没做完,指令机器码可能还有较大变动,所以是暂定表,这一部分也不多介绍。其中有一些指令是我特殊设计出来为了节约代码,所以助记符不一定规范(有些缩写就是在瞎编)。
部分指令说明(此处说明与最新设计的版本出入较大):
1. 数据传送指令:MOV,PUSH,POP,RIA
MOV指令支持除了MAR,MDR,PC和栈区之外的寄存器之间的数据传送;
PUSH和POP指令为压栈和弹栈,原地址和目标地址均为寄存器,当栈满时PUSH则无效,原栈区数据不变,以溢出中断处理;
RIA指令可实现单字节的立即数写入寄存器,设计该指令的目的是为了使寄存器赋初值等操作更灵活,节约指令周期。
2. 数据读写指令:LDB,SDB,LDW,SDW,LIB,SIB
LDB,SDB,LDW,SDW均为对数据储存器的读写操作,读操作均由储存器传输至ACC,写操作均由ACC至储存器;
LIB,SIB均为对程序储存器的读写操作,读操作均由储存器传输至ACC,写操作均由ACC至储存器;
这6种操作均支持4种寻址方式。
3.算术运算指令:ADD,SUB,MUL,DIV,INC,DEC
ADD,SUB,MUL,DIV均为取操作数于Y寄存器,然后与ACC进行算术运算,结果存于ACC。当寻址方式为寄存器寻址时,指令格式为
即该格式指令支持目标寄存器,结果由ACC存至目标寄存器;
INC和DEC指令只支持寄存器直接寻址。
4.逻辑运算指令:ASH,LSH,AND,ORL,XRL,NOTASH和LSH指令只支持寄存器内数据移位操作,移位数值为立即数,取值范围-15到+15;
AND,OR,XOR指令和算术运算指令同格式;
NOT,LSH指令为单操作数指令。
控制转移类指令参考流水线架构。
关于寻址位数。因为储存器很小,我在16bit的双字节指令里正好塞下了5位的基本操作码,2位的寻址方式和9位的储存器寻址。9位寻址对应512个程序储存器单元共1kb,也正好对应了512个数据储存器单元512byte,所有可用空间都填满了。所以不能再扩充内存,也用不到像8086一样的造过于复杂的段式内存管理,那样的MMU会给系统造成很大的延迟。
更多相关资讯请关注:我的世界专区