
作为游戏的最后一关
确实有点难度
把所有的海拔都导入RAM
找到最高的海拔
然后从最上层开始到最下层
一层一层分析能装多少水
找到左边界(从左边开始遇到第一个海拔大于等于该层数的)和右边界(同理)
然后在之间循环,海拔低于这一层的,水量+1
代码有点小乱
因为最后一关了快结束了有点激动
所以写的有一点着急

水世界
#reg0计数器reg5总水
label loading
ram_w input reg4 null #ram:reg0=input
add|i 1 reg4 reg4 #reg0=reg0+1
less_than|j reg4 16 loading
add|i|j 0 0 reg4
#---------------↑load-----------------
label main
call null null find_highest
#reg1为最高值
label call_loop
equal|i 0 reg1 end
call null null calculate_one_layer
sub|j reg1 1 reg1
equal|i|j 0 0 call_loop
label end
add|i 0 reg5 output
#------------------------------------
label calculate_one_layer
#reg2:left_edge,reg3:right_edge
add|i|j 0 0 reg0
label find_left_loop
ram_r reg0 null reg4
big_or_equal reg4 reg1 find_left
add|i 1 reg0 reg0
equal|i|j 0 0 find_left_loop
label find_left
add|i 0 reg0 reg2
add|i|j 15 0 reg0
label find_right_loop
ram_r reg0 null reg4
big_or_equal reg4 reg1 find_right
sub|j reg0 1 reg0
equal|i|j 0 0 find_right_loop
label find_right
add|i 0 reg0 reg3
add|i 0 reg2 reg0#计数器为左边界
label find_water_loop
ram_r reg0 null reg4
less_than reg4 reg1 has_water
equal|i|j 0 0 no_water
label has_water
add|i 1 reg5 reg5
label no_water
add|i 1 reg0 reg0#计数器步增
less_than reg3 reg0 enough
equal|i|j 0 0 find_water_loop
label enough
return null null null
#-----------------------------------
label find_highest
ram_r reg0 null reg1
label back
add|i 1 reg0 reg0#reg0++
equal|i 16 reg0 enough#读完结束循环
ram_r reg0 null reg2
less_than reg1 reg2 find_bigger
equal|i|j 0 0 back
label find_bigger
add|i 0 reg2 reg1
equal|i|j 0 0 back #always
label enough
return null null null
#-----------------------------------

LEG
自定义汇编别名: null:000000(0) add:00000000(0) sub:00000001(1) and:00000010(2) xor:00000101(5) shl:000110(6) shr:000111(7) input:00000111(7) output:00000111(7) ram_r:00010000(16) ram_w:00010001(17) equal:00100000(32) not_equal:00100001(33) less_than:00100010(34) les_or_equal:00100011(35) big_or_equal:00100101(37) pop:00110000(48) push:00110001(49) return:00111000(56) call:00111001(57) j:01000000(64) i:10000000(128) reg0-reg5:00000000-00000101(0-5)
芜湖
完结大撒花
(撒花)