【第一阶段 指令集】仿真器上的第一个程序汉诺塔 汇编代码调试通过

为了描述方便,在没有正式名称之前,本山寨机以后就简称XPC。

 

      第1阶段工作是要确定指令集,指令集是软硬件的分水岭,一般情况下这是计算机系统第一步要确定的事项。XPC采用MIPS指令集子集变形是确定了的,这种情况初期调试省去了写编译器的时间,仅对MIPS汇编代码做解释再汇编为机器码即可。基于减少硬件设计的原理,最终指令个数少于100是肯定的。

      昨天下班后启动了仿真器和汇编链接器的编写, 仿真机以解释执行的方式执行,目前支持算术,分支,转移,load,store,IO(这个是为了初期调试方便特有执行,不会在硬件实现,目前只有O,没有I),空指令,比较指令等几类共15条。 指令格式和MIPS一致,采用R(655556),I(65516),J(626)三种个数。

 

      经过昨天辛苦工作,汉诺塔问题的到解决,可以输出汉诺塔结果,程序大概五十多条指令,200多字节,比较短小的主要原因是提供了强大的IO指令~~。

 

      输出: 

      1  汇编连接器 其实主要是汇编器,我自定义的镜像太简单,没什么链接任务。

      2  仿真器        实现链接出镜像的加载和解释执行过程,有一个。

 

      仿真器稍微稳定后会在仿真器上启动调试器的开发,毕竟没有调试器,很多时候不太好测试。

   

      本项目所有源码及硬件原理图我都会在适当时候公开,如果有抄袭或者借鉴我会说明并给出引用地址。

 

仿真器上汉诺塔测试代码: 与MIPS不完全一致,暂时也没遵从MIPS ABI。手头没有编译器,汇编码和机器码都是手工计算。

 

地址指令MachineCode
0loadi    a0,3470024195
4loadi    a1,1470089729
8loadi    a2,3470155267
12jmpf     281073741852
16halt939524096
20nop0
24nop0
28nop0
32nop0
36nop0
40subi   sp,16800915472
44store  ra,0(sp)738000896
48store  s0,4(sp)710737924
52store  s1,8(sp)712835080
56store  s2,12(sp)714932236
60move   s0,a0546439168
64move   s1,a1548601856
68move   s2,a2550764544
72testi  a0,1880803841
76bnei    16201326608
80addi   fp,1131989505
84out603979776
88bf      72134217800
92subi   a0,s1,1776208385
96loadi  a2,6470155270
100sub    a2,s1818321408
104sub    a2,s2818323456
108jmpb   68268435524
112move   a0,s0574881792
116move   a1,s1577044480
120move   a2,s2579207168
124addi   fp,1131989505
128out603979776
132nop0
136subi   a0,s0,1776208385
140loadi  a1,6470089734
144sub    a1,s1816158720
148subi   a1,s2816160768
152move   a2,s2579207168
156jmpb   116268435572
160load   ra,0(sp)465502208
164load   s0,4(sp)464650244
168load   s1,8(sp)464715784
172load   s2,12(sp)464781324
176addi   sp,16129826832
180jr     ra335544320

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值