Вновь любителям досовского ассемблера

Персональный блог одноименного форумчанина. Человека и парохода, не побоюсь этого сравнения :)

Модератор: tyomitch

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Вновь любителям досовского ассемблера

Сообщение tyomitch » 06.04.2006 (Чт) 8:58

* Почему-то не нашлось ни одного желающего поломать свою голову над моей загадкой: оба отвечавших пытались выгуглить готовый ответ :-|

А вот, на самом деле, разгадка. Хоть всё и просто, но достаточно неожиданно.
* инструкция 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 и голом досе работает отовсюду.
Изображение

Вернуться в Tyomitch

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList