Найти в Дзене
Junior Coder

Древний MSDOS и 16-ти битный ассемблер, почему его до сих пор изучают?

Если запустить представленную ниже программу из под DOS установленной скажем на флешке, то она сотрет первый сектор вашего жесткого диска, поэтому никогда не запускайте ее, просто поверте мне на слово.

-2

А эта маленькая программа, "весом" всего в два байта, вызовет зависание компьютера, то есть комп не будет реагировать ни на какие клавиши, ни на мышь, только кнопкой "пуск" можно будет выключить компьютер, а затем заново запустить его.

-3

Этой комбинацией пользуются разработчики OS чтобы вызвать "синий экран" при системном сбое, и хакеры для того чтобы получить контроль над системой на то время, пока устанавливается зловредный код.

Вот еще интересная програмка, она, при запуске заставит немедленно перезагрузиться систему.

-4

Шестнадцатибитный ассемблер работает непосредственно с аппаратурой и процессором в реальном режиме, в отличии от 32-х битной архитектуры, там все инструкции передаются через ОС, даже в тех же 32х или 64-х битных ассемблерах, именно поэтому 16-й ассемблер очень быстр, несмотря на свою ограниченную 16-битную структуру.

Компьютер грузится в реальном режиме, только затем переключается в защищенный, при этом во время работы он постоянно переключается в реальный режим или режим VM86 для прямого доступа к аппаратуре (защищенный режим многопоточен, как мы знаем), именно поэтому 16-й ассемблер еще долго останется востребованным, а работать с ним лучше всего из среды MSDOS или подобной.

С ассемблером нужно быть очень внимательным, потому что он выполняет все допустимые инструкции, например, на картинке внизу я указал номера прерываний не в шестеричном виде, как принято, а в десятичном, FASM спокойно компилирует такую программу и она прекрасно работает.

-5

Если бы я написал 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