
1.除法

除法
直接贴代码
add|i 0 input reg0 #reg0=input被除数
add|i 0 input reg1 #reg1=input除数
equal|i 1 reg1 dev1 #除数是1直接输出
label start
less_than reg0 reg1 finish#jumpif reg0<reg1
sub reg0 reg1 reg0 #reg0=reg0-reg1
add|i 1 reg2 reg2 #reg2=reg2+1
equal|i|j 0 0 start
label finish
add|i 0 reg2 output #output
add|i 0 reg0 output #output
label dev1
add|i 0 reg0 output
add|i|j 0 0 output 把被除数和除数输入,放在寄存器
因为当除数是1的话,商就等于被除数,做一个特判
可以节省很多时间
然后就让被除数不断被除数减,直到被除数小于除数就输出结果、
总延迟86 时钟刻246 总用时21156
2.函数
先更新一下指令集

LEG指令集
然后修改一下硬件线路

LEG
①允许计数器的值+4之后被压栈
②允许弹栈输出的数值进入结果总线
不算很复杂,只是有些地方的通路需要稍微增加,然后用开关控制一下就行
随便写的一小段代码测试递归
add|i|j 1 0 reg1
add|i|j 16 0 reg2
call null null test1
add|i 2 reg1 reg1
call null null outputing
label test1
add|i 2 reg1 reg1
less_than reg1 reg2 continue
return null null null
label continue
call null null test1
return null null null
label outputing
add|i 0 reg1 output
自定义汇编别名:
null:000000(0) add:00000000(0) sub:00000001(1) input:00000111(7) output:00000111(7) ram_r:00010000(16) ram_w:00010001(17) equal:00100000(32) less_than:00100010(34) pop:00110000(48) push:00110001(49) return:00111000(56) call:00111001(57) j:01000000(64) i:10000000(128) reg0-reg5:00000000-00000101(0-5)