А вот, на самом деле, разгадка. Хоть всё и просто, но достаточно неожиданно.
* инструкция BOUND вызывает прерывание 5;
* его обработчик в IBM PC шлёт на принтер копию экрана;
* управление возвращается к инструкции BOUND, и процесс повторяется.
Другими словами, в IBM PC инструкция BOUND -- это просто необычный способ извести всю бумагу одной командой: до тех пор, пока бумага в принтере есть, компьютер будет вновь и вновь печатать на ней копию экрана. Как только бумага кончится, компьютер ничем не будет отличаться от просто зависшего
Дело здесь, конечно, в том, что Intel и IBM не договорились об использовании прерываний. В 8086/88 прерывание 5 не использовалось (было зарезервировано), и IBM решила задействовать его для принтскрина. А когда Intel разрабатывала 80186 и добавила в него инструкцию BOUND -- она, естественно, не посчиталась с тем, что кто-то использует её зарезервированное прерывание без спросу.
* Интересные способы перевода числа от 0 до F в хекс-цифру приписываются некому Эллисону. В более коротком из них -- всего три команды (5 байт), в более длинном -- четыре (6 байт). Я совершенно без понятия, как они работают, но они работают
* Ещё один рэмблинг на тему моих старых, никому ненужных проектов; этот я, вроде бы, здесь на форумах ещё не выкладывал. Это одна из моих последних (2003 г.) ассемблерных прог под дос; она просто выводит на экран псевдографическую картинку-заставку, наподобие статичной "демки". Прога занимает 348 байт, и использует специально выдуманный, тщательно отшлифованный, и с тех пор прочно забытый алгоритм сжатия. Вроде бы, дальше её ужать уже некуда, хотя не уверен. Можете попробовать сами
Используется набор инструкций 80186. Если добавить появившиеся в 386 режимы адресации, то скорее всего, можно будет выжать ещё с десяток байт. Но так неинтересно.
Для дополнительной интриги, по-обычному я этот файл аттачить не буду )
Вот он в виде base64:
- Код: Выделить всё
aAC4B75dAfysPPBzQmhSATzAciY8yHMQTkEECIrYPMxyBLMCKsOIHFAkB+
gMALiwCatYwOgDJAcMwFGLyIPhP8DoBSUGAJOLh1UB86tZwyw2q+K0wyAE
sATNBLIZau7bAlwFWePMwQJbB1jKCsjJA1vSA0cFS8oDQ8vEW8vIAkYHQg
RDzARBysVZzMkGQdMCQQZB1s3FQQhOzskJyM/dytPLDEzcysPW0MrByMnI
2usDStPRycrIyQNB0svByMrIydDhxkrK08HJyANB08vJ0srA6MgKSsrLwM
jKyAJBy8jMyNLK0cIDQgRLwsrI0wNBysnMyMHIz8RSwtrbzcnL4coDQ9sD
UsLa08jLytENRQhTy8HQ0+HLEEcGVevSywrIBG3M1csHQcRv0tYHRsRK/5
nxSgdCywZHxErwGfBLBUTFSsoDSfAZ8FUGSsVJ8BnwVgRMxEn+mfJHX8Rr
Примечание: прога в WinNT работает только из-под досовских шеллов (nc, vc, на худой конец стандартный debug). В Win9x и голом досе работает отовсюду.