Да, в своих программах я применяю единый стиль вызовов процедур и именование меток. Но входов в процедуру может быть много и выходов тоже. При этом стек строго остается в том же состоянии, как до вызова процедуры.
Но вот в игре Эйфории появилась задача - вызов нужной процедуры обработки в зависимости от текущего юнита и имеющейся в списке для этого юнита. Вызов может производиться из нескольких мест. В базе данных это задается так (упрощенный пример):
И как вы собираетесь вызывать эти процедуры, чтобы был понятный код?Код:; id=0, крестьянин unit_peasant defb unit_peasant_end-unit_peasant ; длина данных юнита defb s32_peasant ; код символа defb 24 ; количество и список возможных процедур defw c_op_pass defw c_op_destroy defw c_op_move_west_earth defw c_op_move_east_earth defw c_op_move_nord_earth defw c_op_move_sud_earth defw c_op_move_nord_west_earth defw c_op_move_nord_east_earth defw c_op_move_sud_west_earth defw c_op_move_sud_east_earth defw c_op_build_road defw c_op_build_irrigation defw c_op_build_wall defw c_op_build_tower defw c_op_build_house defw c_op_build_barracks defw c_op_build_barn defw c_op_build_stock defw c_op_build_shipyard defw c_op_build_church defw c_op_train_soldier defw c_op_train_galley defw c_op_take_source defw c_op_give_source unit_peasant_end ; id=1, солдат unit_soldier defb unit_soldier_end-unit_soldier ; длина данных юнита defb s32_soldier ; код символа defb 12 ; количество и список возможных процедур defw c_op_pass defw c_op_destroy defw c_op_move_west_earth defw c_op_move_east_earth defw c_op_move_nord_earth defw c_op_move_sud_earth defw c_op_move_nord_west_earth defw c_op_move_nord_east_earth defw c_op_move_sud_west_earth defw c_op_move_sud_east_earth defw c_op_take_source defw c_op_give_source unit_soldier_end ; id=2, галера unit_galley defb unit_galley_end-unit_galley ; длина данных юнита defb s32_galley ; код символа defb 9 ; количество и список возможных процедур defw c_op_pass defw c_op_move_west_earth defw c_op_move_east_earth defw c_op_move_nord_earth defw c_op_move_sud_earth defw c_op_move_nord_west_earth defw c_op_move_nord_east_earth defw c_op_move_sud_west_earth defw c_op_move_sud_east_earth unit_galley_end
Я делаю так:
Код:hl = считанный из базы адрес процедуры, например c_op_destroy ld bc,label_01_continue push bc jp (hl) label_01_continue ... ld bc,label_02_continue push bc jp (hl) label_02_continue ... ret c_op_destroy ... ret




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
