
Сообщение от
Shadow Maker
Не могу придумать, зачем в Z80 использовать эксепшены таким образом. Всегда проще тупо сделать call exception или jp exception, и там установить или стек или еще чего.
ну, тут может быть из-за макросов запутанно выглядит, на самом деле-то всего ничего: сохранение регистров на альтернативном стеке.
доп-стек даёт возможность вложенных try-catch'ей с проверкой в catch'е а умеем ли мы обрабатывать данный exception или нет. если нет, то raise exception этажом выше.
и даёт возможность сделать кучу raise'ов, в заранее неизвестных местах.
хотя, конечно, если мы знаем где raise exception, и если если он у нас один, то огород городить не нужно - достаточно прописать по нужным адресам значение sp и адрес catch:
Код:
;try
ld (raise_0+1),sp
ld hl,catch_0
ld (raise_0+4),hl
call something
;endtry
ld a,'A' ; plan "a"
ret
;catch
catch_0 ld a,'B' ; plan "b" =)
ret
something
;do something
;{raise exception
raise ld sp,#0000 ; will be modified by "try" - sp
jp #0000 ; will be modified by "try" - catch_0
;}raise exception
Что можно ещё придумать?