20 уроков Ассемблера

на главную - закладки

Жанры

Поделиться:

20 уроков Ассемблера

Шрифт:

Глава 1. Вступление

Почему ассемблер? Перечитав энное количество книг, мне стало понятно, что хорошего самоучителя для изучения данного языка мне не найти. У каждого автора имеются свои плюсы и минусы в изложении; ряд авторов начинают с классических вещей – вводной лекции, теории, изучения переменных и операторов. Другие же начинают сразу с заумных вещей, публикуя "тяжеленные" тексты программ. Часть авторов изучают ассемблер в связке с языками высокого уровня. И лишь небольшое их количество идёт "заочным" путём – опуская заметную часть сложных операторов и объясняя простые; впрочем, разъясняя сложные операторы в дальнейшем. Так поступим и мы. Задача блога – быстро научить читателя программированию на ассемблере, и дать ему возможность самостоятельно изучать материал уже имея

за плечами накопленные знания.

Что для этого нужно? Для начала – установите соответствующую операционную систему семейства Windows (мне, например, пришлось ради такого случая установить её в качестве виртуальной машины) – 98, 2000, XP (подойдёт и Vista). Далее – соответствующий набор инструментов, я использую Far manager в связке с плагином Colorer. Также понадобится сам ассемблер masm, отладчик AFDPRO и справочная информация HELPASSM.EXE.

Все исполняемые файлы, за исключением LINK.EXE, я копирую в папку ../Far2 – чтобы из любого места можно было компилировать созданные текстовые файлы. LINK.EXE лучше копировать в папку с будущей программой.

Если всё прошло успешно, вы должны получить такого рода окна:

Просмотр исходного текста на языке Ассемблера

Запуск файла помощи HELP.EXE

Глава 2. Первая программа

Итак, вот как будет выглядеть наша первая программа.

Не обращайте внимания на излишние комментарии справа от каждого оператора. Это справочная подробная информация для желающих детально разобраться, что происходит в программе. Мы же просто хотим вывести на экран MS-DOS строку «Hello, world!» с помощью программы типа .com. Для вывода текста мы будем использовать функцию 9 прерывания 21h.

Сама программа будет выглядеть примерно так:

Суть достаточно проста.

а. Командой mov ah,9 мы загружаем в регистра ah число 9. На языке "Бейсик" это выглядело бы примерно так: LET A=9. Следует отметить в данном случае, что ah предназначен "для служебного пользования" – в частности, использования тех же функций. Также стоит отметить, что на самом деле ah – это старший байт регистра ax, состоящего на самом деле из двух частей – старшего байта (ah) и младшего (al). Аналогично работают и остальные служебные регистры (bx, cx, dx).

b. Командой mov dx,offset helloworld мы загружаем фразу "Hello, world!". Однако вся фраза, конечно, не поместится в регистр, поэтому мы используем приставку "offset" – смещение. Грубо говоря, это адрес, указывающий компилятору, где на самом деле находится эта фраза. Определим это в конце программы.

c. int 21h – данной командой осуществляем прерывание, то есть собственно вывод текста на экран.

Узнаем об этом поподробнее.

1. Открываем файл "HELP.EXE".

2. Нажимаем любую клавишу.

3. Заходим в раздел "Указатель функций DOS/BIOS".

4. Заходим в раздел "Прерывания DOS".

5. Заходим в раздел "INT 21H".

Последовательность 1-5 в дальнейшем будет обозначена нами так: HELP.EXE -> Указатель функций DOS/BIOS ->

Прерывания DOS -> INT 21H

Как стало видно из текста, мы действительно должны загрузить в регистр ah номер желаемой функции (в нашем случае -"9"), и выполнить прерывание (int 21h). Всё просто. Однако, конечно, вышеприведённый текст – не вся программа. Она будет иметь определённые признаки оформления, которые мы будем использовать во всех примерах. Начинаться любая наша программа будет так:

А заканчиваться так:

В середине и будет располагаться наш текст, а чуть ниже него ещё два элемента:

– int 20h – завершающее программу прерывание, выход в DOS. Если его не указать, программа выполнит свою работу и "зависнет".

– helloworld db 'Hello, world!$' – собственно определение переменной helloworld. Директива db (define byte) определяет область памяти, доступную побайтно. Фраза "Hello, world!" указана в одинарных кавычках, а за знаком "!" указан знак "$" – конец строки. Почему так, поясним чуть позже. Что ещё следует знать, что определяем переменные мы в самом конце, чтобы при ассемблировании их не приняли за команды ассемблера.

Итак, полностью оформленный текст программы будет выглядеть чуть более обширно.

Совет: разберитесь со структурой файла помощи HELP.EXE!

Глава 3. Системы счисления

Итак, продолжим изучение языка. Опубликую текст программы ещё раз:

Связка mov ah,9 и int 21h и есть по сути одна команда, если сравнивать с языками высокого уровня, конечно. Однако на языке ассемблера первая указанная команда называется функцией, а последняя – прерыванием. Прерывание выполняет команду с заданной функцией. Есть прерывания и без функций, например, то же int 20h. Возможно, пока это несколько сложно для восприятия, но такую форму составления программы необходимо запомнить. В этом же примере мы столкнулись и с другими ключевыми понятиями ассемблера, такими, как регистры и шестнадцатеричная система счисления. Начнём по порядку.

Десятичная и шестнадцатеричная системы счисления

Так получилось, что в современных компьютерах минимальной единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами. Для обозначения шестнадцатеричного числа мы будем использовать букву "h", которую будем ставить позади такой цифры. Это обозначение общепринятое, хотя некоторые платформы, например мой любимый ZX Spectrum, в своих ассемблерах использовали запись вида #05B3. Ноль впереди обозначается "ведущим", так как число #05B3 = #5B3, и служит для удобочитаемости и называется "выравниванием" (обычно выравнивают до одного или двух байт: #05B3). Нам необходимо научиться переводить числа из одной системы счисления в другую. Для этой цели прекрасно служит стандартный калькулятор "Windows" в инженерном режиме. Однако, если под рукой калькулятора нет, преобразование чисел, представленных в двоичной и шестнадцатеричной системах счисления, в десятичную выполнить довольно легко. Для этого необходимо записать число в развёрнутой форме и вычислить его значение.

123

Книги из серии:

Без серии

[5.0 рейтинг книги]
[5.0 рейтинг книги]
Комментарии:
Популярные книги

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Дурная жена неверного дракона

Ганова Алиса
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дурная жена неверного дракона

Вонгозеро

Вагнер Яна
1. Вонгозеро
Детективы:
триллеры
9.19
рейтинг книги
Вонгозеро

Ведьма Вильхельма

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
8.67
рейтинг книги
Ведьма Вильхельма

Папина дочка

Рам Янка
4. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Папина дочка

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Как я строил магическую империю 7

Зубов Константин
7. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 7

Лучший из худший 3

Дашко Дмитрий
3. Лучший из худших
Фантастика:
городское фэнтези
попаданцы
аниме
6.00
рейтинг книги
Лучший из худший 3

Штурмовик из будущего 3

Политов Дмитрий Валерьевич
3. Небо в огне
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Штурмовик из будущего 3

Последний попаданец 2

Зубов Константин
2. Последний попаданец
Фантастика:
юмористическая фантастика
попаданцы
рпг
7.50
рейтинг книги
Последний попаданец 2

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье