Если запустить представленную ниже программу из под DOS установленной скажем на флешке, то она сотрет первый сектор вашего жесткого диска, поэтому никогда не запускайте ее, просто поверте мне на слово.
А эта маленькая программа, "весом" всего в два байта, вызовет зависание компьютера, то есть комп не будет реагировать ни на какие клавиши, ни на мышь, только кнопкой "пуск" можно будет выключить компьютер, а затем заново запустить его.
Этой комбинацией пользуются разработчики OS чтобы вызвать "синий экран" при системном сбое, и хакеры для того чтобы получить контроль над системой на то время, пока устанавливается зловредный код.
Вот еще интересная програмка, она, при запуске заставит немедленно перезагрузиться систему.
Шестнадцатибитный ассемблер работает непосредственно с аппаратурой и процессором в реальном режиме, в отличии от 32-х битной архитектуры, там все инструкции передаются через ОС, даже в тех же 32х или 64-х битных ассемблерах, именно поэтому 16-й ассемблер очень быстр, несмотря на свою ограниченную 16-битную структуру.
Компьютер грузится в реальном режиме, только затем переключается в защищенный, при этом во время работы он постоянно переключается в реальный режим или режим VM86 для прямого доступа к аппаратуре (защищенный режим многопоточен, как мы знаем), именно поэтому 16-й ассемблер еще долго останется востребованным, а работать с ним лучше всего из среды MSDOS или подобной.
С ассемблером нужно быть очень внимательным, потому что он выполняет все допустимые инструкции, например, на картинке внизу я указал номера прерываний не в шестеричном виде, как принято, а в десятичном, FASM спокойно компилирует такую программу и она прекрасно работает.
Если бы я написал int 10 (без "h"), то программа попыталась бы выполнить какие-то действия с клавиатурой, а не с видеоадаптером. Указание int 21 (int 33h) привело бы к тому, что программа обратилась бы к мыши, а не к прерыванию dos. Защищенный режим для того и был разработан, что бы защитить систему от неграмотного пользователя, ну и понятно дело, для того чтобы лучше защитить коммерческие программы от пиратов.
Компилятор реагирует только в тех случаях, например, если указать переход на метку, и не указать саму метку:
jmp main
....
или неправильно указать метку:
jmp main
mian:
Метка без JMP - это нормально, потому, что метки нужны во многих случаях.
Раньше программисты, для организации задержки при записи в порты, часто использовали такую инструкцию:
jmp $+2
то есть регистр-указатель IP возвращается на текущий адрес в памяти, затем на два байта вперед чтобы избежать зависания, сейчас эта инструкция устарела, т.к., современные процессоры оснащаются предсказателями переходов (Rudolf Marek), поэтому чтобы организовать задержку лучше записать какие-нибудь данные в неиспользуемый порт:
out 80h,al
порт 80h используется только во время загрузки компьютера, в него пишутся результаты опросов POST (можно включить в биосе отображение этой информации на экране). Инструкция jmp $ вызовет бесконечный цикл.
16-битный ассемблер позволяет хорошо понять архитектуру компьютера и принципы его работы, как никакой другой язык программирования. Если вы будете обучаться программированию в высшем учебном заведении, то вам придется изучать 16-битную архитектуру, на курсах, понятное дело этому не учат - время ограничено, им нужно зарабатывать деньги. Поэтому если вы посвятите какое-то время изучению ассемблера, то точно не потеряете время зря!
#ассемблер #msdos