Файл: О.А.Калашников. Ассемблер Это Просто. Учимся программировать.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Программирование

Добавлен: 16.02.2019

Просмотров: 27807

Скачиваний: 1634

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Предисловие 

Ответы на некоторые вопросы 

1.  Почему  важно  изучить  работу  процессора  в  реальном  режиме  (в  MS-DOS)  

и  только  после  этого  переходить  к  программированию  в  защищенном  ре-
жиме (в Windows)? 

 

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

 

Во-вторых, функции WinAPI, о которых пойдет речь в данной книге, — это 
прототип  прерываний  MS-DOS.  Но  понять  принцип  работы  WinAPI  в  разы 
проще  на  примерах  прерываний,  которые  до  сих  пор поддерживаются  Win-
dows. Как только вы поймете данный принцип, вы без труда перейдете на ис-
пользование WinAPI. 

 

В-третьих, учиться основам языка, создавая компактные COM-файлы, которые ис-
пользовались в MS-DOS и до сих пор поддерживаются Windows, гораздо проще. 

 
2.  Под  управлением  каких  операционных  систем  будут  работать  файлы-

приложения? 
Компания  Microsoft  придерживается  политики  поддержки  работоспособности 
программ, написанных в более ранних версиях собственных операционных сис-
тем. Если программа разработана, например, для MS-DOS 3.30, то она будет вы-
полняться и в более поздних версиях этой системы, если, конечно, в самой про-
грамме  не  установлены  ограничения,  или  она  не  привязана  в  работе  именно  
к той версии, для которой написана. 
Появление на рынке ОС Windows 95/98/2000/XP/Vista продолжило эту традицию, 
оставив возможность загружать и выполнять программы, написанные под опера-
ционную  систему  MS-DOS,  и  даже  запуск  DOS-приложений,  требующих  загру-
женной "чистой" дисковой системы, к которым относятся, как правило, сложные 
графические игры, работающие с расширителями, например, DOS4GW. 
Тем не менее, большинство программ прекрасно запускается напрямую из Про-
водника (Windows Explorer), не требуя перезагрузки системы. Например, Norton 
Commander, Far Manager, а также необходимые для изучения настоящего курса 
средства разработки и отладки, перечисленные далее. 
В  современных  операционных  системах  компании  Microsoft  (Windows)  есть 
возможность работать в эмуляторе MS-DOS: Пуск | Выполнить | 

cmd

 | <Enter>. 

В открывшемся окне и можно запускать все файлы из данной книги, не обращая 
внимания на то, что наши COM-программы используют прерывания MS-DOS. 
Все примеры протестированы на работоспособность под управлением следующих 
операционных систем компании Microsoft на IBM-совместимых компьютерах: 

  Windows 2000 Pro и Server; 
  Windows XP Home Edition и Pro; 
  Windows Vista/Server 2008/7. 


background image

Предисловие 

В

Н И МА Н И Е

!  

На  ассемблере  мы  будем  напрямую  взаимодействовать  с  аппаратурой,  что  не  очень 

приветствуется  Windows.  Поэтому  некоторые  программы  из  учебного  курса  могут 

работать некорректно. Что делать в таких случаях? Все просто: отладчик вам поможет! 

 

3.  Какое программное обеспечение нужно для того, чтобы создать программу 

на ассемблере, и где его можно достать? 

 

Прежде всего, это текстовый редактор, как отдельный, например, Akelpad, так 
и  встроенный  в  какую-нибудь  оболочку  (например,  Far  Manager).  В  принципе, 
сгодится даже обычный Блокнот, т. к. ассемблерный код — это обычные тексто-
вые файлы. Мы рекомендуем пользоваться встроенным редактором Far Manager 
(<F4>).  Думаем,  что  не  следует  заострять  внимание  на  том,  как  пользоваться 
данными программами, тем более, что это выходит за рамки настоящей книги. 

 

Потребуется  ассемблер —  программа,  которая  переводит  ассемблерные 
инструкции  в  машинный  код.  Это  может  быть  MASM.EXE

®

  (ML.EXE) 

компании  Microsoft,  TASM.EXE

®

  компании  Borland,  FASM

®

  или  другие. 

Для  программирования  на  ассемблере  под  Windows  потребуется  MASM32

®

Скачать  все  это  можно  бесплатно  на  сайте  автора  книги — 
http://Kalashnikoff.ru.  В  принципе,  большой  разницы  для  наших  приме-
ров это пока не имеет, за исключением передачи параметров в командной 
строке  при  ассемблировании.  Мы  будем  использовать  MASM  6.11 — 
Macro Assembler

®

 от Microsoft версии 6.11 для программ в  части I книги 

и  MASM32 —  для  программ  в  части II,  что  и  вам  советую.  Если  в  про-
цессе  ассемблирования  возникают  ошибки,  то  обращайтесь  к  приложе-
нию 2
 или к нашим экспертам на http://RFpro.ru

 

Настоятельно  рекомендую  иметь  отладчик  (AFD

®

,  SoftIce

®

,  CodeView

®

).  Он 

необходим  для  отладки  программы  и  в  целом  для  демонстрации  ее  работы. 
Предпочтительно использовать AFD или CodeView для начинающих и SoftIce 
для уже имеющих опыт программирования. 

 

В будущем вам, безусловно, понадобится дизассемблер, который необходим 
для перевода машинного кода на язык ассемблера. Автор предпочитает IDA

®

как один из самых мощных и удобных в пользовании. 

Можно  также  скачать  минимальный,  но  достаточный  для  изучения  настоящего 
курса набор программного обеспечения по адресу: http://www.Kalashnikoff.ru

 

4.  Как построены главы книги? 

 

Ответы на часто задаваемые вопросы. 

 

Заметки, дополнительные примеры и алгоритмы. 

 

Объяснение новой темы (теория). 

 

Примеры программ на ассемблере (практика). 

Вы сможете самостоятельно написать простую программу уже после прочтения 
главы 1. Надеюсь, что изучать язык будет интересней, если мы сразу перейдем  
к практической части, обсуждая параллельно теорию. Попутно отмечу, что дан-
ная книга рассчитана, в первую очередь, на людей, которые ни разу не писали про-


background image

Предисловие 

граммы ни на ассемблере, ни на каком другом языке программирования. Конечно, 
если вы уже знакомы с Basic, Pascal, C или каким-либо иным языком, то это только 
на пользу вам. Тем не менее, все новые термины будут подробно объясняться. 
Также  следует  отметить,  что  для  полного  изучения  курса  необходимы  мини-
мальные пользовательские знания операционной системы MS-DOS, т. к. ассемб-
лирование  программ  из  данной  книги  следует  выполнять  именно  в  консоли 
(Пуск | Выполнить | 

cmd

). Однако вы также можете работать в специальных фай-

ловых оболочках типа Far Manager, Windows Commander, Total Commander и т. п. 
 

5.  Какие темы будут рассмотрены в книге? 

 

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

 

Основные команды процессоров Intel 8086, 80286, 80386, 80486. 

  16- и 32-разрядные регистры. 
 

Основы работы с сопроцессором. 

 

Сегментация памяти в реальном режиме. 

 

Расширенная память (XMS-память). 

 

Прямая работа с видеоадаптером. 

 

Режимы CGA, EGA, VGA (кратко). 

 

Управление клавиатурой на уровне прерываний. 

 

Основные функции BIOS (ПЗУ) и MS-DOS. 

 

Работа с дисками, каталогами и файлами. 

 

Управление последовательным портом. 

 

Высокоуровневая оптимизация программ. 

 

Структура и особенности программирования в MS-DOS и Windows. 

 

Не  обойдем  стороной  и  технический  английский  язык,  т. к.  операторы  ас-
семблера образованы от английских слов. 

 
6.  Кому можно задать вопросы, касаемые материала из данной книги? 

На все ваши вопросы по ассемблеру, а также по многим другим темам, ответят 
наши  эксперты  на  портале  профессионалов  http://RFpro.ru.  Стоит  отметить, 
что на упомянутом портале вы сможете: 

 

установить контакт с начинающими программистами и профессионалами на 
ассемблере; 

 

пообщаться в реальном времени с автором данной книги; 

 

принять участие в реальных встречах, чтобы лично познакомиться с профес-
сионалами и экспертами. 

Зарегистрируйтесь прямо сейчас на портале  http://RFpro.ru и вступайте в наш 
клуб профессионалов! 
 
В главе 1 мы рассмотрим шестнадцатеричную систему счисления и пример про-

стейшей программы на ассемблере, традиционно называемой "Hello, world!". 

 
Приятного вам изучения! 


background image

 

 

 

 

 

 

Ч А С Т Ь  I 

Знакомьтесь: ассемблер 

 


background image

 

 

 

Глава 1 

 

Первая программа 

 

1.1. Шестнадцатеричная система счисления 

Для  написания  программ  на  ассемблере  необходимо  разобраться  с  шестнад-

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

Итак,  в  десятичной  системе,  если  мы  к  какому-нибудь  числу  справа  добавим 

ноль, то это число увеличится в 10 раз. Например: 

1   10 = 10 
10   10 = 100 
100   10 = 1000 

и т. д. 

В этой системе мы используем цифры от 0 до 9, т. е. десять разных цифр (собст-

венно, поэтому она и называется десятичной). 

В  шестнадцатеричной  системе  мы  используем,  соответственно,  шестнадцать 

"цифр".  Слово  "цифр"  специально  написано  в  кавычках,  т. к.  в  этой  системе  ис-
пользуются  не  только  цифры.  От  0  до  9  мы  считаем  так  же,  как  и  в  десятичной,  
а вот дальше таким образом: A, B, C, D, E, F. Число F, как не трудно посчитать, бу-
дет равно 15 в десятичной системе (табл. 1.1). 

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

Десятичное  
число 

Шестнадцатеричное 
 

число 

Десятичное  
число 

Шестнадцатеричное  
число 

26 

1A 

27 

1B 

28 

1C 

29 

1D 

30 

1E 

... 

... 

... 

... 

158 

9E