Да, в своих программах я применяю единый стиль вызовов процедур и именование меток. Но входов в процедуру может быть много и выходов тоже. При этом стек строго остается в том же состоянии, как до вызова процедуры.
Но вот в игре Эйфории появилась задача - вызов нужной процедуры обработки в зависимости от текущего юнита и имеющейся в списке для этого юнита. Вызов может производиться из нескольких мест. В базе данных это задается так (упрощенный пример):
Код:
; 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