Aleksey Senilov (500:8332/1)
Гость
Вызов функций через RST
Привет тебе, _/Alexandr/_!
17 ноября 2005 22:58, Alexandr Sinyakov писал(а) All:
Тогды A приносим в жертву. Hа крайний случай для передачи параметров у
нас есть еще 6 альтернативных регистров, IX и IY. Можно даже R
задействовать, но это уже изврат... Можно еще PUSH-ей и POP-ов
напихать, но выигрыша или не будет, или он будет мизерным.
Если А в жертву, то по-моему гораздо лучше в нем и передавать номер функции! Потеря в размере клиентского кода, но немалый выйгрыш в скорости.
;Вариант с номером после команды вызова и с порчей А
ex (sp), hl ;19
ld a, (hl) ;7
inc hl ;6
ex (sp), hl ;19
push hl ;11
ld h, rsttab/256;7
ld l, a ;4
ld a, (hl) ;7
inc h ;4
ld h, (hl) ;7
ld l, a ;4
ex (sp), hl ;19
ret ;10
итого 124 такта
;Вариант с передачей номера в А
push hl ;11
ld h, rsttab/256;7
ld l, a ;4
ld a, (hl) ;7
inc h ;4
ld h, (hl) ;7
ld l, a ;4
ex (sp), hl ;19
ret ;10
;Итого 73 такта
Более того, можно использовать оба варианта на одном и том же коде! Второй вариант, это ведь просто другая точка входа от первого варианта.
А разбор подфункции логичнее сделать прямо в тех функциях, где это надо. Hо не выносить в общий механизм вызова.
Если сравнивать вызов функции по номеру и по таблице JP, у каждого варианта есть и достоинства и недостатки.
До новых встреч! С уважением, Тхэнн.
... Nereal was created for us