#6 函数(Part.4)除法,函数
-郭两岁
编辑于 2023年08月06日 08:22
收录于文集
共30篇


1.除法

除法

直接贴代码

代码块
JavaScript
自动换行
复制代码
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之后被压栈

②允许弹栈输出的数值进入结果总线

不算很复杂,只是有些地方的通路需要稍微增加,然后用开关控制一下就行

随便写的一小段代码测试递归

代码块
Python
自动换行
复制代码
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)