Ассемблер Это просто! Учимся программировать


Программка для практики


Прежде чем перейти к программе, рассмотрим новый оператор:

Оператор Перевод Применение Процессор
NOP No OPerand - нет операнда Ничего не делает 8086

Этот оператор делает то, что ничего не делает, но занимает один байт. Его обычно используют для резервирования места либо для того, чтобы "забить" ненужный код, когда исходник на Ассемблере отсутствует. Например, программа перед стартом проверяет версию MS-DOS. Версия, которая установлена на вашем компьютере, не соответствует требуемой программой. Для этого данным оператором "забивают" участок кода, который проверяет версию ОС.

Все это позволяет сделать Hacker's View, который можно взять на моем сайте:

Запомните машинный код данной комманды: 90h

Даю голову на отсечение, что ни один язык высокого уровня не позволяет сделать того, что может наша программа: (1) CSEG segment (2) assume cs:CSEG, es:CSEG, ds:CSEG, ss:CSEG (3) org 100h (4) Begin: (5) mov sp,offset Lab_1 (6) mov ax,9090h (7) push ax (8) int 20h (9) Lab_1: (10) mov ah,9 (11) mov dx,offset Mess (12) int 21h (13) int 20h (14) Mess db 'А все-таки она выводится!$' (15) CSEG ends (16) end Begin

То, что вы видите - обман зрения. На первый взгляд, программа что-то делает с регистром SP, а затем выходит. Строки (9) - (12) вообще не будут работать. Но это глубокое заблуждение!

Попробуйте запустить ее под отладчиком. Вы увидите, что CodeView, TurboDebuger, AFD будут сообщать какую-то ерунду (непонятные операторы, сообщения типа "программа завершилась", хотя строка не выведена и пр.). Но, если запустить ее просто из ДОС, то строка появится на экране, т.е. программа будет работать корректно!

Данный пример - типичный случай "заламывания рук" отладчикам (но не SoftIce!). И вы уже можете это делать!

Вывод один: указанные выше отладчики используют стек пользовательской программы (что это значит - думаю, вы разберетесь).

Ваша задача: разобрать "по полочкам" программу. Почему так происходит? Почему строка выводится? Почему отладчик работает неверно? И пр. и пр. Вопросов море. И вам предстоит дать ответ на них.

Разобравшись с программой самостоятельно, вы почувствуете Силу и Неограниченные Возможности Ассемблера. И это правда! Не спешите писать мне письмо с просьбой помочь. Будет не интересно! Пробуйте разобраться сами! Не бойтесь эксперементировать! Компьютер будет часто зависать, но это не главное! Ваши мучения приведут вас к Истине! Я сам проходил когда-то через это...




Начало  Назад  Вперед