Ассемблер — это язык самого процессора. Это необходимо для того, чтобы программа-ассемблер могла отличить, где шестнадцатеричное чис-ло, а где название переменной или метки.


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте его и откройте на своем компьютере.
Калашников
С—нкт
Петербург
«БХВ
Петербург»
681.3.068+800.92Ассемблер
32.973.26-018.1
К17
Калашников О.
К17 Ассемблер — это просто. Учимся программировать. — 2-е изд., перераб. и доп. —
СПб.
: БХВ-Петербург, 2011. —
с.: ил. +
ISBN 978-5-
-8
Подробно и доходчиво объясняются все основные вопросы программирования на ассем
лере. Рассмотрены команды процессоров Intel, 16- и 32-разрядные регистры, основы работы
с сопроцессором, сегментация памяти в реальном масштабе времени, управление клавиатурой
и последовательным портом, работа с дисками и многое другое. Описано, как разработать бе
обидный нерезидентный вирус и антивирус против этого вируса, как написать файловую об
лочку (типа Norton Commander или FAR Manager) и как писать резидентные программы.
Каждая глава состоит из объяснения новой темы, описания алгоритмов программ, многочи
ленных примеров и ответов на часто задаваемые вопросы. Во второе издание внесены исправл
ния и добавлены новые примеры. Компакт-диск содержит исходные коды всех примеров, пр
веденных в книге, с подробными описаниями
Для программистов
681.3.068+800.92Ассемблер
32.973.26-018.1
Группа подготовки издания:
Главный редактор
Екатерина Кондукова
Зам. главного редактора
Игорь Шишигин
Зав. редакцией
Григорий Добин
Редактор
Анна Кузьмина
Компьютерная верстка
Натальи Карава
вой
Корректор
Виктория Пио
ровская
Дизайн серии
Инны Тачиной
Оформление
обложки
Елены Беляевой
Зав. производством
Николай Тверских
Лицензия ИД № 02429 от 24.07.00. Подписано в печать 31
1.
.
Формат 70
Печать офсетная. Усл. печ. л.
.
Тираж 2000 экз. Заказ №
"БХВ-Петербург", 190005, Санкт-Петербург, Измайловский пр., 29.
Санитарно-эпидемиологическое заключение на продукцию
№ 77.99.60.953.Д.005770.05.09 от 26.05.2009 г. выдано Федеральной службой
по надзору в сфере защиты прав потребителей и благополучия человека.
Отпечатано с готовых диапозитивов
в ГУП "Типография "Наука"
199034, Санкт-Петербург, 9 линия, 12.
ISBN 978
Калашников О.
, 20
© Оформление, издательство "БХВ
Петербург", 20

Оглавление
Предисловие
...................................................................................................................................
1
Несколько советов
..........................................................................................................................
2
Ответы на некоторые вопросы
......................................................................
3
ЧАСТЬ I
ЗНАКОМЬТЕСЬ: АССЕМБЛЕР
.............................................................................
7
Глава 1
Первая программа
........................................................................
9
1.1. Шестнадцатеричная система счисления
................................................................................
9
1.2. Наша первая программа
........................................................................
1.3. Введение в прерывания
.........................................................................
1.4. Резюме
....................................................................................................................................
Глава 2
Регистры процессора
..................................................................
2.1. Введение в регистры микропроцессоров 8086—
2.1.1. Регистры данных
.............................................................................
2.1.2. Регистры-указатели
.........................................................................
2.1.3. Сегментные регистры
.....................................................................
2.2. Команды сложения и вычитания
..........................................................................................
2.2.1. Оператор
...................................................................................................................
2.2.2. Оператор
sub
...................................................................................................................
2.2.3. Оператор
inc
....................................................................................................................
2.2.4. Оператор
dec
...................................................................................................................
2.3. Программа для практики
.......................................................................
Глава 3
Сегментация памяти в реальном режиме
3.1. Двоичная система счисления. Бит и байт
............................................................................
3.1.1. Как перевести двоичное число в десятичное
................................................................
3.1.2. Как перевести десятичное число в двоичное
................................................................
3.1.3. Как перевести шестнадцатеричное число в десятичное
3.2. Сегментация памяти в реальном режиме
.............................................................................
3.2.1. Исследование программы в отладчике
.........................................................................
3.3. Наше первое прерывание
......................................................................
3.3.1. Что такое ASCII?
.............................................................................
3.4. Программа для практики
.......................................................................
3.5. Подведем итоги
......................................................................................................................
ЧАСТЬ I
УСЛОЖНЯЕМ ЗАДАЧИ
Глава 4
Создание циклов
.........................................................................
4.1. Еще немного о сегментации памяти
.....................................................................................
4.1.2. Введение в адресацию
....................................................................
4.2. Создание циклов
....................................................................................................................
4.2.1. Пример высокоуровневой оптимизации
.......................................................................
4.3. Условный и безусловный переходы
.....................................................................................
4.3.1. Пример низкоуровневой оптимизации
..........................................................................
Оглавление
4.4. Программа для практики
.......................................................................
4.4.1. Принцип работы программы
..........................................................................................
Глава 5
Подпрограммы
............................................................................
5.1. Исправляем ошибку
...............................................................................
5.2. Подпрограммы
.......................................................................................................................
5.3. Программа для практики
.......................................................................
5.4. Несколько слов об отладчике AFD
.......................................................................................
Глава 6
Работа со стеком
.........................................................................
6.1. Стек
.........................................................................................................................................
6.2. Программа для практики
.......................................................................
6.2.1. Оператор
...................................................................................................................
6.2.2. Хитрая программа
...........................................................................
Глава 7
Операторы сравнения
................................................................
7.1. Разбор программы из
главы 6
...............................................................
7.2. Оператор сравнения
...............................................................................
7.3. Понятия условного и безусловного переходов
....................................................................
7.4. Расширенные коды ASCII
.....................................................................
7.5. Программа для практики
.......................................................................
Глава 8
Учимся работать с файлами
.....................................................................................
8.1. Программа из прошлой главы
..............................................................................................
8.2. Основы работы с файлами
....................................................................
8.3. Программа для практики
.......................................................................
Глава 9
Работа с файлами
........................................................................
9.1. Программа из прошлой главы
..............................................................................................
9.2. Программа для практики
.......................................................................
ЧАСТЬ I
ФАЙЛОВАЯ ОБОЛОЧКА, ВИРУС, РЕЗИДЕНТ
Гла
ва 10
Введение в вирусологию. Обработчик прерываний
..........................................
10.1. Программа из прошлой главы
............................................................................................
10.2. Вирус
.....................................................................................................................................
10.2.1. Структура и принцип работы вируса
..........................................................................
Что должен делать вирус?
....................................................................
Какой объем памяти занимает вирус?
.................................................................................
Что может вирус?
..................................................................................
Какой вирус мы будем изучать?
..........................................................................................
Что будет делать вирус?
.......................................................................
Как оформляется вирус?
.......................................................................
10.3. Резидент
................................................................................................................................
10.3.1. Подробней о прерываниях
...........................................................................................
10.4. Первый обработчик прерывания
......................................................................................
10.4.1. Новые операторы и функции прерываний
................................................................
10.5. Работа с флагами процессора
...........................................................................................
10.5.1. Как проверить работу программы?
...........................................................................
Глава 11
Управление видеоадаптером
................................................................................
11.1. Оболочка
.............................................................................................................................
11.2. Управление видеокартой
...................................................................
Оглавление
Глава 12
Повторная загрузка резидента
.............................................................................
12.1. Резидент
..............................................................................................................................
12.2. Проверка на повторную загрузку резидента
....................................................................
12.3. Команды работы со строками
...........................................................................................
12.4. Использование
xor
sub
для быстрого обнуления регистров
........................................
12.5. Задание для освоения информации из данной главы
Глава 13
Поиск и считывание файлов: вирус
....................................................................
13.1. Теория
................................................................................................................................
.
13.2. Практика
.............................................................................................................................
13.3. Команда пересылки данных
movs
.....................................................................................
13.4. Передача управления программе, расположенной в другом сегменте
13.5. Поиск файлов
.....................................................................................................................
Глава 14
Вывод окна в центре экрана
.................................................................................
14.1. Модели памяти
...................................................................................................................
14.1.1. Почему мы пишем только файлы типа COM?
14.1.2. Что такое модель памяти и какие модели бывают?
14.2. Оболочка SuperShe
14
.2.1. Управление курсором
................................................................
.
14
.2.2. Операторы работы со стеком процессора 80286+
14
.3. Процедура рисования рамки (окна)
..................................................................................
14
.3.1. Прямое отображение в видеобуфер
...........................................................................
14
.3.2. Процедура
Draw_frame
...............................................................
Что
такое линейный адрес и зачем он нуже
................................................................
.
14.4. Практика
.............................................................................................................................
14.5. Новые операторы
...............................................................................
Глава 15
Обработка аппаратных прерываний
..................................................................
15.1. Теория
................................................................................................................................
.
15.1.1. Сохранение предыдущего вектора прерывания
15.1.2. Способы передачи управления на прежний адрес прерывания
Первый способ
....................................................................................................................
Второй способ
.....................................................................................................................
15.2. Инструкции
ret
retf
..........................................................................
15.2.1. Оператор
ret
.................................................................................................................
15.2.2. Оператор
retf
................................................................................
15.3. Механизм работы аппаратных прерываний. Оператор
iret
15.4. Практика
.............................................................................................................................
15.5. Логические команды процессора
.....................................................................................
15.5.1. Оператор
.................................................................................................................
15.5.2. Оператор
...............................................................................
15.5.3. Оператор
xor
................................................................................
15.6. Аппаратные прерывания нашего резидента
....................................................................
15.6.1. Аппаратное прерывание
......................................................................................
15.6.2. Аппаратное прерывание
......................................................................................
15.6.3. Аппаратное прерывание
1Ch
.....................................................................................
15.7. Резюме
................................................................................................................................
Глава 16
Принципы работы отладчиков
............................................................................
16.1. Как работает отладчик
.......................................................................
16.1.1. Прерывание
Оглавление
16.2. Способы обойти отладку программы
...............................................................................
16.2.1. Таблица векторов прерываний
...................................................................................
16.3. Практика
.............................................................................................................................
Глава 17
Заражение файлов вирусом
...................................................................................
17.1. Определение текущего смещения выполняемого кода
17.2. Вирус
...................................................................................................................................
17.2.1. Первые байты "файла-жертвы"
..................................................................................
17.2.2. Передача управления "файлу-жертве"
......................................................................
Глава 18
Высокоуровневая оптимизация программ
18.1. Пример высокоуровневой оптимизации
..........................................................................
18.2. Ошибка в
главе 17
..............................................................................
18.3. Оболочка Super Shell
.........................................................................
18.3.1. Передача данных процедуре через стек
....................................................................
18.3.2. Передача параметров в стеке
.....................................................................................
18.3.3. Вычисление длины строки на стадии ассемблирования
18.3.4.
Процедуры
Copy_scr
Restore_scr
display.asm
18.3.5. Оператор
scas
..............................................................................
18.3.6. Подсчет длины нефиксированной строки
................................................................
.
18.3.7. Вывод строки на экран путем прямого отображения в видеобуфер
18.4. Резюме
................................................................................................................................
Глава 19
Создание резидентного шпиона
...........................................................................
19.1. Резидент
..............................................................................................................................
19.2. Что нужно вам вынести из этой главы?
...........................................................................
Глава 20. Финальная версия вируса
.....................................................................................
20.1. Вирус
...................................................................................................................................
20.1.1. Альтернативы
ret
call
.......................................................................................
20.1.2. Заражение файла
.........................................................................
20.1.3. Общая схема работы вируса
......................................................................................
20.2. Резюме
................................................................................................................................
Глава 21
Работа с блоками основной памяти
....................................................................
21.1. Оболочка SuperShell
..........................................................................
21.1.1. Теория
..........................................................................................................................
21.1.2. Практика
......................................................................................................................
Новшество первое
...............................................................................
Новшество второе
...............................................................................
21.1.3. Оператор
................................................................................
21.2. Работа с основной памятью DOS
.....................................................................................
21.2.1. Управление памятью
..................................................................
21.2.2. Считываем файлы в отведенную память
..................................................................
Глава 22
Часто задаваемые вопросы
...................................................................................
Глава 23
Область PSP и DTA. Системные переменные (окружение DOS)
23.1. Структура командной строки
............................................................................................
23.2. Системные переменные (окружение MS-DOS)
...............................................................
23.3. Основной резидент
............................................................................
23.3.1. Команды безусловного перехода
...............................................................................
Оглавление
23.3.2. Команды управления флагами
...................................................................................
23.3.3. Изменение параметров резидента "на лету"
.............................................................
23.4. Задание для закрепления сведений из данной главы
Глава 24
Резидентный антивирус
........................................................................................
24.1. Регистры микропроцессоров 80386/80486. Хранение чисел в памяти
24.1.1. 16- и 32-разрядные отладчики
...................................................................................
24.1.2. Директива
use16
use32
................................................................
24.1.3. Сопоставление ассемблера и языков высокого уровня
24.2. Резидентный антивирус. Практика
...................................................................................
24.3. Резюме
................................................................................................................................
Глава 25
Работа с сопроцессором
.........................................................................................
25.1. Ответы на некоторые вопросы
.........................................................................................
25.2. Введение в работу с сопроцессором
................................................................................
25.3. Первая программа с использованием сопроцессора
25.4. Вывод десятичного числа с помощью сопроцессора
25.5. Оболочка
.............................................................................................................................
25.5.1. Получение и вывод длинного имени файла
..............................................................
Глава 26
История развития ПК
............................................................................................
26.1. Краткая история развития IBM-совместимых компьютеров
26.2. С чего все начиналось
.......................................................................
26.3. Оболочка
.............................................................................................................................
26.3.1. Чтение файлов из каталога и размещение их в отведенной памяти
26.3.2. Размещение файлов в памяти нашей оболочки
Глава 27
Удаление резидента из памяти
.............................................................................
27.1. Обзор последнего резидента
.............................................................
27.1.1. Перехват прерывания
..........................................................................................
27.1.2. Как удалять загруженный резидент из памяти?
27.1.3. Случаи, когда резидент удалить невозможно
27.2. Практика
.............................................................................................................................
Глава 28
Алгоритм считывания имен файлов в память
28.1. Новый алгоритм считывания файлов в память
...............................................................
28.2. Процедура вывода имен файлов на экран
........................................................................
28.3. Новые переменные в оболочке
.........................................................................................
28.4. Обработка клавиш и
..................................................................
28.5. Обработка клавиш и
...............................................................................
Глава 29
Загрузка и запуск программ
.................................................................................
29.1. Подготовка к запуску программы и ее загрузка
..............................................................
29.1.1. Выделяем память для загружаемой программы
Зачем необходимо урезать память перед загрузкой?
Зачем во второй строке мы сдвигаем на 4 бита вправо это смещение?
А для чего увеличиваем
на единицу (3)?
......................................................................
29.1.2. Переносим стек в область PSP
...................................................................................
29.1.3. Подготовка EPB
..........................................................................
Еще несколько слов о системных переменных (сегменте окружения DOS)
Для чего нужно создавать свое окружение DOS?
Сегмент и смещение командной строки
...........................................................................
Первый и второй адрес блоков FCB
..................................................................................
Оглавление
VIII
29.1.4. Сохранение регистров
................................................................
29.1.5. Запуск программы
.......................................................................
29.2. "Восстановительные работы"
...........................................................................................
Глава 30
Работа с расширенной памятью
..........................................................................
30.1. Расширенная (XMS) память. Общие принц
..............................................................
30.2. Программа XMSmem.asm. Получение объема XMS-памяти
30.2.1. Подготовка к использованию расширенной памяти
и вывод объема XMS-памяти
.....................................................................................
30.3. Программа XMSblock.asm. Чтение файла в расширенную память
и вывод его на экран
..........................................................................
30.3.1. Работа с расширенной памятью
.................................................................................
30.3.2. Структура массива при работе с XMS-памятью
30.4. Программа XMScopy.asm. Копирование файла с использованием
расширенной памяти
.........................................................................
Глава 31
Обзор дополнительных возможностей оболочки
31.1. Оболочка Super Shell
.........................................................................
31.1.1. Вызов внешних вспомогательных программ
31.1.2. Редактирование файла
................................................................
31.2. Антивирусные возможности оболочки
............................................................................
31.2.1. Как защитить компьютер от заражения его резидентными вирусами
31.2.2. Как защитить компьютер от программ-разрушителей дисковой информации
Глава 32. Все о диске и файловой системе ............................................................. 302
32.1. Что находится на диске?
...................................................................
32.1.1. Таблица разделов жесткого диска
.............................................................................
32.1.2. Загрузочный сектор
....................................................................
32.1.3. Таблица размещения файлов (FAT)
..........................................................................
32.2. Удаление и восстановление файла
...................................................................................
32.3. Ошибки файловой системы
...............................................................
32.3.1. Потерянные кластеры файловой системы FAT, FAT32
П Р И Л О Ж Е Н И Я
...............................................................................
Приложение 1
Ассемблирование программ (получение машинного кода
из ассемблерного листинга)
....................................................................
П1.1. Загрузка MASM 6.10—6.13
..............................................................
П1.2. Ассемблирование
..............................................................................
П1.3. Компоновка
.......................................................................................................................
П1.3.1. Ассемблирование и компоновка программ пакетами Microsoft (MASM)
Приложение 2
Типичные ошибки при ассемблировании программы
Приложение 3
Таблицы и коды симв
..........................................................................
П3.1. Основные символы ASCII
................................................................
П3.2. Расширенные коды ASCII
................................................................
П3.3. Скан-коды клавиатуры
.....................................................................
Приложение 4
Содержимое компакт-диска
........................................................................
Предметный указатель
............................................................................

Предисловие
Итак, вы решили начать изучение языка ассемблера. Возможно, вы уже пробо-
вали его изучать, но так и не смогли освоить до конца, поскольку он показался вам
очень трудным. Обилие новых, неизвестных читателю терминов и сложность яз
ка, которым написаны многие книги, делают их трудными для начинающих про-
граммистов. В этой книге автор старался излагать материал так, чтобы он был по-
нятен любому пользователю: и начинающему программисту, и человеку, который
ни разу не сталкивался ни с каким языком программирования.
Основой для книги послужили материалы разработанной автором рассылки
"Ассемблер? Это просто! Учимся программировать". Используя данную рассылку,
более 18 000
подписчиков научились писать такие программы на ассемблере, кото-
рые казались им раньше чрезвычайно сложными и недоступными для понимания
или написания. Большая часть подписчиков пыталась раньше изучать язык ассем
лера, но так и не смогла пройти полный курс (прочитать ту или иную книгу до
конца). Материал рассылки помог им понять ассемблер и научил писать довольно-
таки сложные программы под операционными системами MS-DOS и Windows.
Во втором издании автор учел и исправил все недоработки и ошибки, допуще
ные в первом. Более того, автор попытался сделать обучение как можно более и
тересным для вас, перейдя с первой же главы к практической части. Это поможет
вам изучить базовые основы ассемблера за короткое время.
Автор не претендует на то, что материал, изложенный в данной книге, поможет
вам освоить ассемблер во всех его проявлениях и покажет все возможности языка.
Ассемблер настолько многогранен, что просто невозможно подробно описать все
его операторы, команды, алгоритмы, области применения в одной книге. Тем не
менее, прочитав уже несколько глав, вы сможете научиться писать собственные
программы, разбирать чужие, а также поймете, как в целом работает компьютер.
Уникальность этой книги заключается в следующем:
части
книги рассматриваются базовые операторы ассемблера, основы пр
раммирования в реальном режиме (консольные приложения), в
ы программирования на ассемблере под
dows
; в
как создать
файловую оболочку и написать/нейтрализовать резидентный вирус;
каждая глава соответствует одному занятию, в конце главы приводится файл
для практического изучения;
Предисловие
материал изложен на простом языке, все новые термины подробно объясняют
;
исследуется работа отладчиков и способы обойти отладку программы;
в процессе изучения ассемблера, начиная с
главы 10
, рассматриваются четыре
программы:
безобидный нерезидентный вирус;
резидентный антивирус против написанного нами вируса;
файловая оболочка (типа Norton Commander®, FAR Manager® и
п.) с по
держкой длинных имен файлов и использованием XMS-памяти;
несколько видов резидентных программ (программ, которые постоянно н
ходятся в памяти).
В ассемблере, как и в любом другом языке программирования, очень важна
практика и опыт. На компакт-диске, прилагаемом к книге, приводятся готовые а
семблерные файлы в текстовом формате с подробными описаниями для практич
ского изучения курса, а также необходимое ПО. На прилагаемом диске автор по-
старался собрать все, что нужно для полноценного изучения материала.
Несколько советов
Обязательно скачайте файлы-приложения для практического изучения курса,
а также необходимое ПО с сайта
http://www.Kalashnikoff.ru
(если таковых
нет). Без практики и вспомогательных программ данная книга вряд ли поможет
вам научиться программировать на ассемблере.
Чаще пользуйтесь отладчиком.
Изменяйте код программ (файлов-приложений), больше экспериментируйте.
Пробуйте написать собственную программу на основе изученного материала.
Так как вначале будет довольно сложно ориентироваться в обилии инструкций,
директив, прерываний, процедур ассемблера, то пробуйте вставлять в ваши собс
венные программы выдержки, процедуры, алгоритмы из файлов-приложений.
Помните, что опыт приходит со временем!
Внимательно следите за ходом мысли автора, за его логикой. Это особенно а
туально при чтении
Не спешите!
Внимательно и досконально изучайте каждую главу, выполняйте
все, что автор просит сделать с прилагаемыми программами (запускать их под о
ладчиком, изменять код, думать над тем, что делает та или иная процедура и пр.).
Все вопросы, которые у вас, несомненно, возникнут в процессе изучения а
семблера, вы можете задавать в любое время экспертам на портале профессио-
налов
http
RFpro
. Этот сайт был специально разработан авторо
книги
с целью оказания посетителям помощи по разным направлениям, в том числе
и по ассемблеру.
Предисловие
Ответы на некоторые вопросы
Почему важно изучить работу процессора в реальном режиме (в MS-DOS)
и только после этого переходить к программированию в защищенном р
жиме (в Windows)?
-первых, для ассемблера не существует различий между операционными си
темами. Ассемблер — это язык самого процессора. Но он может использовать
готовые подпрограммы операционной системы, на которой запущена программа.
-вторых, функции
WinAPI
, о которых пойдет речь в данной книге,
это
прототип прерываний
. Но понять принцип работы
WinAPI
в разы
проще на примерах преры
ваний, которые до сих пор поддерживаются
dows
. Как только вы поймете данный принцип, вы без труда перейдете на и
пользование
Win
В-третьих, учиться основам языка, создавая компактные
файлы, которые и
пользовались в
и до сих пор поддержива
ются
Windows
, гораздо пр
Под управлением каких операционных систем будут работать файлы-
приложения?
Компания
Microsoft
придерживается политики поддержки работоспособности
программ, написанных в более ранних версиях собственных операционных си
тем. Есл
и программа разработана, например, для
3.30, то она будет в
полняться и в более поздних версиях этой системы, если, конечно, в самой пр
грамме не установлены ограничения, или она не привязана в работе именно
к той версии, для которой написана.
Появление на рынке ОС Windows 95/98/2000/XP/Vista продолжило эту традицию,
оставив возможность загружать и выполнять программы, написанные под опер
ционную систему
, и даже запуск
приложений, требующих загр
женной "чистой" дисковой сист
емы, к которым относятся, как правило, сложные
графические игры, работающие с расширителями, например,
Тем не менее, большинство программ прекрасно запускается напрямую из Про-
водника (
Windows
Explorer
), не требуя перезагрузки системы. Напр
Nor
ton
Commander
Manager
, а также необходимые для изучения настоящего курса
средс
ва разработки и отладки, перечислен
В современных операционных системах компании
Microsoft
Windows
) есть
возможность работать в эмуляторе
Пуск
Выполни
| <
Enter
В открывше
мся окне и можно запускать все файлы из данной книги, не обращая
вним
ния на то, что наши
программы используют прерывания
Все примеры протестированы на работоспособность под управлением следующих
операционных систем компании
Microsoft
на
IBM
совместимых компьют
рах:
Windows 2000 Pro
Server;
Windows XP Home Edition
Windows
Vista
Server
Предисловие
НИМАНИЕ
!
На ассемблере мы будем напрямую взаимодействовать с аппаратурой, что не очень
приветствуется Windows. Поэтому некоторые программы из учебного курса могут
работать некорректно. Что делать в таких случаях? Все просто: отладчик вам поможет!
Какое программное обеспечение нужно для того, чтобы создать программу
на ассемблере, и где его можно достать?
Прежде всего, это
текстовый редактор
, как отдельный, например,
Akelpad
, так
и встроенный в какую
нибудь оболочку (например,
Far
Manager
). В принципе,
сгодится даже обычный Блокнот, т.
к. ассемблерный код
это обычные текст
вые файлы. Мы реко
мендуем пользоваться встроенным редакт
ром
Far
Manager
(). Думаем, что не следует заострять внимание на том, как пользоваться
данными программами, тем более, что это выходит за рамки н
стоящей книги.
Потребуется
ассемблер
программа,
которая переводит ассемблерные
инструкции в машинный код. Это может быть MASM.EXE
(ML.EXE)
компании Microsoft, TASM.EXE
компании Borland,
FASM
или другие.
Для программирования на ассемблере под
Windows
потребуется
MASM
Скачать все это можно бесплатно на сайте автор
книги
http
Kalashnikoff
. В принципе, большой разницы для наших прим
ров это пока не имеет, за исключением передачи параметров в командной
строке при ассемблировании. Мы будем использовать MASM 6.1
Macro Assembler
от Microsoft версии
6.11 для программ в
части
книги
MASM
для программ в
части
, что и вам советую
. Если в пр
цессе ассемблирования возникают ошибки, то обращайтесь к
прилож
нию
или к нашим экспертам на
http
RFpro
Настоятельно рекомендую иметь
отладчик
(AFD
, SoftIce
, CodeView
). Он
необходим для отладки программы и в целом для демонстрации ее работы.
Предпочтительно использовать AFD или CodeView для начинающих и SoftIce
для уже имеющих опыт програм
ования.
В будущем вам, безусловно, понадобится
дизассемблер
, который необходим
для перевода машинного кода на язык ассемблера. Автор предпочитает IDA
как один из самых мощных и удобных в пользовании.
Можно также скачать минимальный, но достаточный для изучения настоящего
курса набор программного обеспечения по адресу:
http://www.Kalashnikoff.ru
.
Как построены главы книги?
Ответы на часто задаваемые вопросы.
Заметки, дополнительные примеры и алгоритмы.
Объяснение новой темы (теория).
Примеры программ на ассемблере (практика).
Вы сможете самостоятельно написать простую программу уже после прочтения
главы 1
. Надеюсь, что изучать язык будет интересней, если мы сразу перейдем
к практической части, обсуждая параллельно теорию. Попутно отмечу, что да
ная книга рассчитана, в первую очередь, на людей, которые ни разу не писали пр
Предисловие
граммы ни на ассемблере, ни на каком другом языке программирования. Конечно,
если вы уже знакомы с Basic, Pascal, C или каким-либо иным языком, то это только
на пользу вам. Тем не менее, все новые термины будут подробно объясняться.
Также следует отметить, что для полного изучения курса необходимы мин
мальные пользовательские знания операционной системы
, т.
к. ассем
лирование программ из данной книги сл
едует вы
полнять именно в консоли
Пуск
Выполнить
). Однако вы также можете работать в специальных фа
ловых оболочках типа
Far
Manager
Windows
Commander
Total
Commander
Какие темы будут рассмотрены в книге?
Двоичная и шестнадцатеричная системы счисления.
Основные команды процессоров
Intel
16- и 32-разрядные регистры.
Основы работы с сопроцессором.
Сегментация памяти в реальном режиме.
Расширенная память (
XMS
память).
Прямая работа с видеоадаптером.
Режимы CGA, EGA, VGA (кратко).
Управление клавиатурой на уровне прерываний.
Основные функции BIOS (ПЗУ) и
Работа с дисками, каталогами и файлами.
Управление последовательным портом.
Высокоуровневая оптимизация программ.
Структура и особенности программирования в
Windows
Не обойдем стороной и технический английский язык, т. к. операторы а
семблера образованы от английских слов.
Кому можно задать вопросы, касаемые материала из данной книги?
На все ваши вопросы по ассемблеру, а также по многим другим темам, ответя
наши эксперты на портале профессионалов
http
RFpro
. Стоит отметить,
что на упом
нутом портале вы сможете:
установить контакт с начинающими программистами и профессионалами на
ассемблере;
пообщаться в реальном времени с автором данной книги;
принять участие в реальных встречах, чтобы лично познакомиться с профе
сионалами и экспертами.
Зарегистрируйтесь прямо сейчас на портале
http
RFpro
и вступайте в наш
клуб пр
фессионалов!
главе 1
мы рассмотрим шестнадцатеричную систему счисления и пример про-
стейшей программы на ассемблере, традиционно называемой "Hello, world!".
Приятного вам изучения!
Ч А С Т Ь I
Знакомьтесь: ассемблер
Глава 1
Первая программа
1.1. Шестнадцатеричная система счисления
Для написания программ на ассемблере необходимо разобраться с шестнад-
цатеричной системой счисления. Ничего сложного в ней нет. Мы используем в
десятичную систему. Не сомневаемся, что вы с ней знакомы, поэтому попроб
ем объяснить шестнадцатеричную систему, проводя аналогию с десятичной.
Итак, в десятичной системе, если мы к какому-нибудь числу справа добавим
ноль, то это число увеличится в 10 раз. Например:
10 = 10
10 = 100
10 = 1000
и т.
В этой системе мы используем цифры от 0 до 9, т. е. десять разных цифр (собс
венно, поэтому она и называется десятичной).
В шестнадцатеричной системе мы используем, соответственно, шестнадцать
"цифр". Слово "цифр" специально написано в кавычках, т. к. в этой системе и
пользуются не только цифры. От 0 до 9 мы считаем так же, как и в десятичной,
а вот дальше таким образом: A, B, C, D, E, F. Число F, как не трудно посчитать, б
дет равно 15 в десятичной системе (табл. 1.1).
Таблиц
а 1.1.
Десятичная и шестнадцатеричная системы
Десятичное
Шестнадцатери
ное
число
Десятичное
Шестнадцатери
ное
Часть I. Знакомьтесь: ассемблер
Таблица 1.1
(окончание)
Десятичное
Шестнадцатери
ное
число
Десятичное
Шестнадцатери
ное
Таким образом, если мы к какому-нибудь числу в шестнадцатеричной системе
добавим справа ноль, то это число увеличится в 16 раз (пример 1.1).
Пример 1.1
и т.
Вы смогли отличить в примере 1.1 шестнадцатеричные числа от десятичных?
А из этого ряда: 10, 12, 45, 64, 12, 8, 19? Это могут быть как шестнадцатеричные
числа, так и десятичные. Для того чтобы не было путаницы, а компьютер и про-
граммист смогли бы однозначно отличить одни числа от других, в ассемблере пр
нято после шестнадцатеричного числа ставить символ h или H (от англ.
hexadecimal
— шестнадцатеричное), который для краткости часто называют просто
ex. После д
сятичного числа, как правило, ничего не ставят. Так
как числа от 0
9 в обеих системах имеют одинаковые значения, то числа, записанные как 5 и
одно и то же. Таким
образом, корректная запись чисел из примера 1 будет
следующей (примеры
Пример 1.2. Корректная форма записи чисел
h
Глава 1. Первая программа
Пример 1.3. Другой вариант записи чисел
Для чего нужна шестнадцатеричная система и в каких случаях она применяе
— мы рассмотрим в следующих главах. А в данный момент для нашего примера
программы, который будет рассмотрен далее, нам необходимо знать о существов
нии шестнадцатеричных чисел.
Итак, настала пора подвести промежуточный итог. Шестнадцатеричная система
счисления состоит из 10 цифр (от 0 до 9) и 6 букв латинского алфавита (A, B, C, D,
E, F). Если к какому-нибудь числу в шестнадцатеричной системе добавить справа
ноль, то это число увеличится в 16 раз. Очень важно уяснить принцип шестнадц
теричной системы счисления, т. к. мы будем постоянно использовать ее при нап
сании наших программ на ассемблере.
Теперь немного о том, как будут строиться примеры на ассемблере в данной
книге. Не совсем удобно приводить их сплошным текстом, поэтому сперва будет
идти сам код программы с пронумерованными строками, а сразу же после него —
объяснения и примечания. Примерно так, как показано в листинге 1.1.
Листинг
1.1. Пример записи ассемблерных инструкций, применяемой в книге
Обратите внимание, что номера строк ставятся только в книге, и при наборе
программ в текстовом редакторе эти номера ставить НЕ нужно! Номера строк ст
вятся для того, чтобы удобно было давать объяснения к каждой строке: в строке
(01) мы делаем то-то, а в строке (15) —
-то.
Несмотря на то, что на компакт-диске, прилагаемом к книге, имеются набра
ные и готовые для ассемблирования программы, мы рекомендуем все-таки первое
время набирать их самостоятельно. Это ускорит запоминание операторов, а также
облегчит привыкание к самому языку.
И еще момент. Строчные и ПРОПИСНЫЕ символы программой-ассемблером не
различаются. Записи вида:
Часть I. Знакомьтесь: ассемблер
воспринимаются одинаково. Можно, конечно, заставить ассемблер различать р
гистр, но мы пока этого делать не будем. Для удобства чтения программы лучше
всего операторы вводить строчными буквами, а названия подпрограмм и меток н
чинать с прописной.
1.2. Наша первая программа
Итак, переходим к нашей первой программе (\001\prog01.asm) (листинг 1.2).
Листинг
1.2. Наша первая программа на ассемблере
)
Глава 1. Первая программа
угое. Например,
. В таком случае, нам пришлось бы и завершать программу
оператором
(14).
Строки (06)—(08) выводят на экран сообщение "Hello, world!". Здесь придется
вк
ратце рассказать о регистрах процессора (более подробно эту тему мы рассмо
рим в последующих главах).
Регистр процессора
— это специально отведенная память для хранения какого-
нибудь числа. Например, если мы хотим сложить два числа, то в математике зап
шем так:
= 5
= 8
=
+
и
— это своего рода регистры (если говорить о компьютере), в которых м
гут храниться некоторые данные.
= 5 следует читать как:
"присваиваем А число 5"
.
Для присвоения регистру какого-нибудь значения в ассемблере существует оп
(от англ.
move
— в данном случае "загрузить"). Строку (06) следует ч
тать так:
"загружаем в регистр
число 9"
(проще говоря, присваиваем
9). Далее рассмотрим, зачем это необходимо. В строке (07) загружаем в регистр
адрес сообщения для вывода (в данном примере это будет строка
). Затем, в строке (08) вызываем прерывание MS-DOS, которое и выведет
нашу строку на экран. Прерывания будут подробно рассматриваться в последу
щих главах, мы же пока коснемся только самых элементарных вещей.
1.3. Введение в прерывания
Прерывание MS-
— это своего рода подпрограмма (часть MS-DOS), которая
находится постоянно в памяти и может вызываться в любое время из любой про-
граммы. Рассмотрим вышесказанное на примере (листинг 1.3).
Сразу стоит отметить, что в ассемблере после точки с запятой располагаются
комментарии
. Комментарии будут опускаться MASM/TASM при ассемблиров
нии. Примеры комментариев:
В комментарии программист вставляет замечания по программе, которые помо-
гают сориентироваться в коде.
Листинг
1.3.
Программа (алгоритм) сложения двух чисел
B=8 ;в переменную B значение 8
Часть I. Знакомьтесь: ассемблер
В данном примере мы дважды вызвали подпрограмму (процедуру)
которая произвела сложение двух чисел, переданных ей в переменных
. Р
зультат математического действия сохраняется в переменной
. Когда вызывается
подпрограмма, компьютер запоминает, с какого места она была вызвана, и после
того, как процедура отработала, возвращается в то место, откуда она вызывалась.
Таким образом, можно вызывать подпрограммы неопределенное количество раз
с любого участка основной программы.
При выполнении строки (08) (см. листинг 1.2) мы вызываем подпрограмму
(в данном случае это называется прерыванием), которая выводит на экран строку.
Для этого мы, собственно, и помещаем нужные значения в регистры, т. е. готовим
для прерывания необходимые параметры. Всю работу (вывод строки, перемещение
курсора) берет на себя эта процедура. Строку (08) следует читать так:
"вызываем
двадцать первое прерывание"
(
от англ.
interrupt
— прерывание). Обратите
внимание, что после числа 21 стоит буква h. Это, как мы уже знаем, шестнадцат
ричное число (33 в десятичной системе). Конечно, нам ничего не мешает заменить
строку
int 21h
строкой
int 33
. Программа будет работать корректно. Но в а
семблере принято указывать номера прерываний в шестнадцатеричной системе, да
и все отладчики работают с этой системой.
В строке (10) мы, как вы уже догадались, вызываем прерывание
. Для его
вызова не нужно указывать какие-либо значения в регистрах. Оно выполняет тол
ко одну задачу — выход из программы (выход в DOS). В результате выполнения
прерывания
программа вернется туда, откуда ее запускали (загружали, вызыв
ли). Например
Norton Commander
DOS Navigator
Это что
то вроде оператора
в некот
рых языках высокого уровня.
трока (12) содержит сообщение для вывода. Первое слово (
— соо
щение) — название этого сообщения. Оно может быть любым (например,
или
и пр.). Обратите внимание на строку (07), в которой мы загружаем в регистр
адрес этого сообщения.
Глава 1. Первая программа
Можно создать еще одну строку, которую назовем
. Затем, начиная со
строки (09), вставим в нашу программу следующие команды:
Рис. 1.1.
Ассемблирование и результат выполнения программы
Prog
01.com
Часть I. Знакомьтесь: ассемблер
Рис. 1.2.
Вид программы в отладчике AFD Pro
На рис. 1.2 показано, как эта программа выглядит в отладчике
AFD
. Пока не
обращайте
особого внимания на различие между реальным кодом, набранным р
ками, и тем, как эта программа отображается в отладчике. Подробно работу отла
чика мы рассмотрим в последующих главах.
1.4. Резюме
Целью данной главы не было разобраться подробно с каждым оператором.
Это
невозможно, если вы не обладаете базовыми знаниями. Но, прочитав 3—4 главы,
вы поймете принцип и структуру программы на ассемблере.
Может быть, ассемблер вам показался чрезвычайно сложным, но это, поверьте,
только с первого взгляда. Вы должны научиться строить алгоритм программы на
ассемблере в голове, а для этого нужно будет самостоятельно написать несколько
программ, опираясь на информацию из данной книги. Будем постепенно учить
мыслить структурой ассемблера, составлять алгоритмы, программы, используя
операторы языка. После изучения очередной главы вы будете чувствовать, что по-
степенно начинаете осваивать ассемблер, будет становиться все проще и проще.
Например, если вы знакомы с Бейсиком, то, ставя перед собой задачу написать
программу, выводящую 10 слов "Привет", вы будете использовать операторы
и пр., которые тут же появятся в ваших мыслях. Вы строите опред
ленный алгоритм программы из этих операторов, который в какой-то степени пр
меним только к Бейсику. То же самое и с ассемблером. При постановке задачи н
писать ту или иную программу вы мысленно создаете алгоритм, который
применим к ассемблеру и только, т. к. языков, похожих на ассемблер, просто не
существует. Наша задача — научить вас создавать в уме алгоритмы, применимы
к ассемблеру, т. е. образно говоря, научить "мыслить на ассемблере".
главе 2
мы подробно рассмотрим регистры процессора и напишем еще одну
простую программу.
Глава 2
Регистры процессора
2.1. Введение в регистры
микропроцессоров 8086—
, как мы уже говорили ранее, — это специально отведенная память для
временного хранения каких-то данных. Микропроцессоры 8086—80186 имеют
14 регистров. В
главе 1
мы познакомились с двумя из них:
. В табл. 2.1, 2.3
2.4 приведен перечень всех регистров, кроме
и регистра флагов, которые б
дут рассмотрены отдельно.
2.1.1. Регистры данных
Регистры данных могут использоваться программистом по своему усмотрению
(за исключением некоторых случаев). В них можно хранить любые данные: числа,
адреса и пр. В верхнем ряду табл. 2.1 находятся 32-разрядные регистры, которые
могут хранить числа от 0 до 4 294 967 295 (0
). Их мы будем рассматр
вать позже. Во втором ряду
разрядные, которые могут хранить числа от 0 до
535 или от 0h до FFFFh в шес
надцатеричной системе, что одно и то же.
В следующей строке расположен ряд 8-разрядных регистров:
al
. В эти регистры можно загружать максимальное число 255 (FFh). Это так
называемые половинки (старшая или младшая) 16-разрядных регистров.
Таблица 2.1.
Регистры данных
EAX

EBX

ax

bx

cx

dx

ah

al

bh

bl

ch

cl

dh

dl

Аккумулятор
База
Счетчик
Рег
истр да
ных
Мы уже изучили оператор
, который предназначен для загрузки числа в р
гистр. Чтобы присвоить, к примеру, регистру
число 35h, нам необходимо зап
сать так:
Часть I. Знакомьтесь: ассемблер
а регистру
— число 346Ah, так:
Если мы попытаемся загрузить большее число, чем может содержать регистр, то
при ассемблировании программы произойдет ошибка. Например, следующие зап
си будут ошибочны:
mov

ah
,123
h


FFh
mov

bx
,12345
h


FFFFh
mov

dl
,100
h
Здесь надо отметить, что если шестнадцатеричное число начинается не с цифры
(12h), а с буквы (С5h), то перед таким числом ставится ноль: 0C5h. Это необходимо
для того, чтобы программа-ассемблер могла отличить, где шестнадцатеричное чи
ло, а где название переменной или метки. Далее мы рассмотрим это на примере.
Допустим, процессор выполняет команду
. В этом случае в регистр
загружается число 12h, а в регистр
— 34h. То есть
— это младшие (
ow) или старшие (
igh) половинки 16-разрядных регистров
(табл. 2.2).
Таблица
Результаты выполнения различных команд
Команда
Результат
mov ax,1234h

mov bx,5678h

mov cx,9ABCh

mov dx,0DEF0h

ax = 1234h, ah = 12h, al = 34h

bx = 5
678h, bh = 56h, bl = 78h

cx = 9ABCh, ch = 9Ah, cl = 0BCh

dx = 0DEF0h, dh = 0DEh, dl = 0F0h

2.1.2. Регистры-указатели
Регистры
(индекс источника) и
(индекс приемника) используются в стро-
ковых операциях. Регистры
задействуются при работе со стеком (табл. 2.3).
Мы подробно их рассмотрим на примерах в следующих главах.
Таблица 2.3.
Регистры-указатели
si

Di

bp

sp

Индекс и
точника
Индекс прие
ника
Регистры для работы со стеком
2.1.3. Сегментные регистры
Сегментные регистры (табл. 2.4) необходимы для обращения к тому или иному
сегменту памяти (например, видеобуферу). Сегментация памяти — довольно сло
ная и объемная тема, которую также будем рассматривать в следующих главах.
Таблица 2.4.
Сегментные регистры
CS

DS

ES

SS

Регистр кода
Регистр да
ных
Дополнительный р
гистр
Регистр стека
Глава 2
Регистры процессора
2.2. Команды сложения и вычитания
Для выполнения арифметических операций сложения и вычитания в ассемблере
существуют следующие операторы:
2.2.1. Оператор
add
Формат оператора
показан в табл. 2.5. Впоследствии мы всегда будем офор
лять новые команды в подобные таблицы. В столбце
Команда
будет описана новая
команда и ее применение. В столбце
Назначение
— что выполняет или для чего
служит данная команда, а в столбце
Процессор
— модель (тип) процессора, начиная
с которой команда поддерживается. В столбце
Перевод
будет указано, от какого ан
лийского слова образовано название оператора, и дан перевод этого слова.
Таблица 2.5.
ератор
Команда
Перевод
Назначение
Проце
сор
add
,

Add
ition
слож
ние
Сложение
В данном примере оператор поддерживается процессором 8086, но работать ко-
манда будет, естественно, и на более современных процессорах (80286, 80386,
tium
д.).
Команда
производит сложение двух чисел (листинг 2.1).
Листинг
2.1. Примеры использования оператора
mov ax,25000 ;загружаем в регистр ax число 25000
2.2.2. Оператор
sub
Команда
производит вычитание двух чисел (табл. 2.6, листинг 2.2).
Таблица
Оператор
Команда
Перевод
Назначение
Проце
сор
sub
,

traction
вычит
ние
Вычитание
Часть I. Знакомьтесь: ассемблер
Листинг
2.2. Примеры использования оператора
ТО ИНТЕРЕСНО
Следует отметить, что ассемблер — максимально быстрый язык. Можно посчитать,
сколько раз за одну секунду процессор сможет сложить два любых числа от 0
до 65
Каждая команда процессора выполняется определенное количество тактов. Когда г
ворят, что тактовая частота процессора 100
МГц, то это значит, что за секунду прох
дит 100 миллионов тактов. Чтобы компьютер сложил два числа, ему нужно выпо
нить
следующие команды:
В результате выполнения данных инструкций в регистре
дет число 17
700, а в
регистре
000. Команда
add ax,bx
выполняется за один такт на процессоре
80486. Получается, что компьютер 486 DX2
66 МГц за одну секунду сложит два любых
числа от 0 до 0FFFFh 66 ми
лионов (!) раз!
2.2.3. Оператор
inc
Формат оператора
представлен в табл. 2.7.
Таблиц
Оператор
Команда
Перевод
Назначение
Процессор
inc

rement
инкр
мент
Увеличение на един
Команда
увеличивает на единицу содержимое приемника (регистра или
ячейки памяти). Она эквивалентна команде:
только выполняется быстрее на старых компьютерах (до 80486) и занимает меньше
байтов (листинг 2.3).
Глава 2
Регистры процессора
Листинг
2.3. Примеры использования оператора
inc al ;теперь al = 16 (эквивалентна add al,1)
2.2.4. Оператор
dec
Формат оператора
представлен в табл. 2.8.
Таблиц
Оператор
манда
Перевод
Назначение
Проце
сор
dec

rement
декр
мент
Уменьшение на един
Команда
уменьшает на единицу содержимое приемника (листинг 2.4). Она
эквивалентна команде:
Листинг
2.4. Примеры использования оператора
2.3. Программа для практики
Рассмотрим одну небольшую программу, которая выводит на экран сооб
-
ние и ждет, когда пользователь нажмет любую клавишу. После чего возвращается
в DOS.
Работать с клавиатурой позволяет прерывание BIOS (ПЗУ)
, которое можно
вызывать даже до загрузки операционной системы, в то время как прерывания
и пр. доступны только после загрузки IO.SYS/MSDOS.SYS — определенной
части ОС MS-DOS.
Чтобы заставить программу ждать нажатия пользователем любой клавиши, сл
дует вызвать функцию
прерывания
. Вот как это выглядит на практике:
Часть I. Знакомьтесь: ассемблер
После нажатия любой клавиши компьютер продолжит выполнять программу,
а регистр
будет содержать код клавиши, которую нажал пользователь.
Следующая программа (\002\prog02.asm) выводит на экран сообщение и ждет
нажатия любой клавиши, что равнозначно команде
в BAT-файлах (ли
2.5).
Листинг
2.5. Программа для практики
(01) CSEG segment
(02) org 100h
(03) Start:
(04)

Глава 3
Сегментация памяти
в реальном режиме
В данной главе мы рассмотрим основополагающие принципы программиров
ния на языке ассемблера. Необходимо тщательно разобраться в каждом предлож
нии, уяснить двоичную систему счисления и понять принцип сегментации памяти
в реальном режиме. Мы также рассмотрим операторы ассемблера, которые не з
трагивали в примерах из предыдущих глав. Сразу отмечу, что это одна из самых
сложных глав данной книги. Автор попытался объяснить все как можно проще,
избегая сложных определений и терминов. Если что-то не поняли — не пугайтесь!
Со временем все станет на свои места. Если вы полностью разберетесь с матери
лом данной главы, то считайте, что базу ассемблера вы изучили. Начиная с
главы 4
будем изучать язык намного интенсивней.
Для того чтобы лучше понять сегментацию памяти, нам нужно воспользоваться
отладчиком. Лучше использова
в работе два отладчика: CodeView (CV.EXE) и
AFD Pro (AFD.EXE). Допустим, вы написали программу на ассемблере и назвали
ее prog03.asm. Сассемблировав, вы получили файл prog03.com. Тогда, чтобы запу
тить программу под отладчиком CodeView/AFD, необходимо набрать в командной
строке MS-DOS следующее:
Итак, вдохните глубже и — вперед!
3.1. Двоичная система счисления. Бит и байт
Рассмотрим, как в памяти компьютера хранятся данные. Вообще, как компь
тер может хранить, например, слово "диск"? Главный принцип — намагничивание
и размагничивание одной дорожки (назовем это так). Одна микросхема памяти —
это, грубо говоря, огромное количество дорожек (примерно как на магнитофонной
кас
сете). Сейчас попробуем разобраться.
Предположим, что:
Часть I. Знакомьтесь: ассемблер
Далее так:
и т.
"Нули" и "единицы" — это так называемые биты. Один бит, как вы уже замет
ли, может иметь только два значения — 0 или 1, т. е. размагничена или намагнич
на та
или иная дорожка ("0" и "1" — это условное обозначение). Если внимательно
посмотреть, то можно обнаружить, что каждый следующий установленный бит,
начиная справа, увеличивает число в два раза: 0001 в нашем примере — один;
0010 — два; 0100 — четыре; 1000 — восемь и
д. Это и есть двоичная форма
представления данных. Чтобы обозначить числа от 0 до 9, нам нужно четыре бита
(хоть они и не будут до конца использованы; можно было бы продолжить: д
сять — 1010, одиннадцать — 1011, ..., пятнадцать — 1111).
Компьютер хранит данные в памяти именно так. Для обозначения какого-
нибудь символа (цифры, буквы, запятой, точки и др.) компьютер использует опр
деленное количество бит. Компьютер "распознает" 256 (от 0 до 255) различных
символов по их коду. Этого достаточно, чтобы вместить все цифры (0—9), буквы
латинского алфавита (a—z, A—Z), русского (а—я, А—Я) и др.
(см. приложение 3)
Для представления символа с максимально возможным кодом (255) нужно 8 бит.
Эти 8 бит называются байтом. Таким образом, один любой символ — это всегда
т (табл. 3.1).
Таблица 3.1.
Один байт с кодом символа "Z"
РИМЕЧАНИЕ
Символы "Н" и "Р" в таблице обозначают "намагничено" или "размагничено" соотве
ственно.
Можно элементарно проверить. Создайте в текстовом редакторе файл с любым
именем и напечатайте в нем один символ, например, "М", но не нажимайте клав
шу . Если вы посмотрите его размер, то файл будет равен 1 байту. Если ваш
редактор позволяет смотреть файлы в шестнадцатеричном формате, то вы сможете
узнать и код сохраненного символа. В данном случае — большая буква "М" имеет
код
шестнадцатеричной системе, которую мы уже знаем, или 1001101 в дво-
ичной. Таким образом, слово "диск" будет занимать 4 байта или 4
= 32 бита.
Как вы уже поняли, компьютер хранит в памяти не сами буквы (символы) этого
слова, а последовательность "единичек" и "ноликов".

Приложенные файлы

  • pdf 11147911
    Размер файла: 972 kB Загрузок: 0

Добавить комментарий