Цитата Сообщение от Sinus
SAM style: у тебя регистру A сипец наступает (внимательно не смотрел, но по ходу и HL тоже) ^_~
У меня тоже наступает. HL и A. Просто нужно иметь соглашение,
что через эти регистры ничего не передаётся при вызове нелокальных
функций. Через HL может только адрес объекта и/или таблицы
виртуальных функций передаваться. Через A -- номер функции.

Цитата Сообщение от Sinus
axor: если тебе не только теоретически интересно как сделать короче и быстрее, то вариант предложенный fk0 самый найлучший. разделение функции на две (функция / подфункция) это неправильный подход принесённый со времён DOS на PC.
Насколько я знаю, это подход принесённый (и в дос в т.ч.)
ещё из CP/M. (ld c, функция; call #0005). Почему -- понятно.
Загруженный код программы может без всяких хитростей
быть сразу запущен.

В современных операционных системах тоже так. Встроенные функции ОС (например linux или bsd -- как там в windows NT понять сложно, но вроде как тоже примерно так) вызываются аналогичным образом. Например, функции open или read (к языку C прилагаются функии-обёртки распределяющие аргументы по разным регистрам процессора и вызывающие программное прерывание).

Встроенных функций ОС очень мало. У того же линуха порядка
200-300 штук. Другое дело -- библиотечные функции. Их много. Они могут быть загружены или могут не быть загружены. В современных ОС используется подход близкий к указанному мною. Любая функция доступна по её адресу. Но перед тем как какая функция может быть
использована требуется загрузка библиотеки и настройка программы и библиотеки на совместное использование.