Об ошибке можно сообщить одним из двух способов:
- либо выполнить возврат из подпрограммы и вернуть возвращаемое значение (например в регистре rax)
- либо не возвращаться вовсе, а перейти на специальную подпрограмму обработки ошибок

Автоматизированная обработка ошибок бывает двух видов:
- неструктурированная (On Error Resume <some location>)
- структурированная (try {} catch {} finally {} )

Мне кажется, что вторую можно сделать на основе первой, ведь функция "размотки" стека (раскручивания, раскрутки) должна иметь адрес и его надо как-то указывать.

Дальше возникает вопрос, раскрутка стека это функция прикладной программы (её рантайма) или ядра? Что если в программе несколько разных рантаймов с несколькими разными функциями раскрутки стека, как осуществить переход от одной функции к другой в процессе раскручивания стека?

Чтобы это объяснить, нужно написать больше деталей о том, как вообще реализуется разгребание стека.

Отредактировано Лис (2019-03-19 14:25:19)