Ассемблер. Прикол с bugoga
Дальнейшее исследование показало, что можно написать просто "bug".
Дизассемблер говорит: команда bound si, [dx+67h] (точно не помню, могу ошибаться).
Но всё-таки интересно, почему (1) прога не завершается, (2) курсор прыгает. Особенности обработчика int 5 в виртуальной дос-машине? Если да, то какие?
Также интересно, работает ли это в реальном ДОСе
"если индекс меньше нижней границы или больше верхней , вызывается прерывание , причём адрес возврата указывает не на следующую команду , а на Bound , так что обработчик должен исправить значение индекса или границ , прежде чем выполнить Iret ." - так что всё правильно работает . )) неявный цыкл из-за неверных аргументов команды . сейчас эта команда употребляется редко .
http://www.codenet.ru/progr/dos/int_0005.php
Дело в путанице: разработчики проца из Intel честно считали, что int 05h должен обработывать выход за пределы массива, а разработчики BIOS сделали его PrintScreen-ом, в итоге bound вызывает 5-е исключение и печатает экран, а поскольку int 05h относится к типу "отказ", то возврат происходит опять к команде bound.
Всё-таки не совсем понятно, курсор-то почему бегает, это видимо особенность процедуры печати экрана... Я так понял, если запустить прогу в реальном ДОСе, то при наличии принтера он действительно будет печатать :) Вот вам и bugoga
принтскрин в биосе - это тоже уже артефакт . )