Вот ассемблерный код этого слова:
Code: Select all
PUSH AF ; push psw
MOV C,(HL)
INX HL
MOV B,(HL)
INR L
JM Error_Handler ; вот тут, собственно, загвоздка
POP AF
RET
...
Error_Handler:
LXI HL, 0x107E ; заново инициализируем стек параметров по умолчанию
POP AF
CALL Type_Until_FF ; печатаем СТЕК ПУСТ
DS "\nСТЕК ПУСТ", FFh
...
Code: Select all
JM Error_Handler
Слово DROP в самом форте используется пару десятков раз, но не получается пока что найти, где перед его использованием в PSW устанавливается нужный флаг и вообще, как контролируется значение в регистрах HL, чтобы параметрический стек не наполз на следующие ячейки памяти.
Само по себе использование слова DROP не подразумевает никаких входных параметров, а уж тем более - модификаций аккумулятора и флагов.
Я пробовал создавать слова с несколькими DROP и при их исполнении ошибка пустого стека отлавливается, но в других случаях, похоже, это никак не контролируется.
Сами по себе операции пересылки данных между регистрами HL BC и памятью на флаг S не влияют (по крайней мере, в контексте прописанного кода).
Пока что оставлю на будущее эти поиски, но непонятки остаются.