- •В.Ф. Гузик, с.М. Гушанский, в.А. Каляев, а.О. Пьявченко, а.И. Костюк основы программирования на языке «ассемблер»
- •1. Введение для кого написано это учебное пособие.
- •2. Предварительные сведения или азы, которые необходимо знать!
- •2.1. Ассемблер, что это такое?
- •2.2. Как писать ассемблерную программу, и какие программы нужны для ее последующей трансляции.
- •2.3. Системы счисления
- •2.4. Оперативная память.
- •2.5. Стек
- •Сегментация памяти.
- •Программная модель процессора.
- •Система команд.
- •Inc word ptr [bx]
- •2.9 Выделение памяти под переменные и массивы
- •2.10 Exe и com программы
- •2.11 Трансляция ассемблерной программы
- •Passes: 1
- •Примеры программирования на ассемблере.
- •3.1. Наша первая программа.
- •3.2. Работа с клавиатурой и экраном.
- •Прерывания dos для работы с клавиатурой.
- •Функция 7 прерывания int 21h
- •Функция 6 прерывания int 21h.
- •Функция 0ah прерывания int 21h.
- •Прерывания bios для работы с клавиатурой
- •1. Функция 0 прерывания int 16h
- •Входные параметры: нет
- •2. Функция 1 прерывание int 16h
- •Входные параметры: нет
- •Прерывания dos для работы с экраном
- •1. Функция 2 прерывания int 21h
- •2. Функция 9 прерывание int 21h
- •Прерывания bios для работы с экраном
- •Функция 1 прерывание int 10h
- •Функция 2 прерывание int 10h
- •Функция 3 прерывание int 10h
- •Функция 6 прерывание int 10h
- •Функция 9 прерывание int 10h
- •Функция 0eh прерывания int 10h
- •Задания к лабораторной работе «Клавиатура и экран»
- •Работа с гибкими дисками.
- •Inc nomber
- •3.4. Перехват прерываний и создание резидентных программ
- •Inst: mov ah, 9
- •Inst: mov ah,9
- •3.5. Работа со звуком.
- •Отладка программ.
- •Приложение
- •Сервисные прерывания dos.
- •Сервисные прерывания bios.
- •Int 10h, функция 07h. Инициализация или прокрутка окна вниз.
- •Int 10h, функция 08h. Чтение символа и атрибута в позиции курсора.
- •Int 10h, функция 09h. Запись символа и атрибута в позицию курсора.
- •Int 10h, функция 0ah. Запись символа в позицию курсора.
- •Int 10h, функция 0eh. Запись символа в режиме телетайпа.
- •Int 10h, функция 10h, подфункция 03h. Переключение бита «мерцание/яркость».
- •Int 10h, функция 13h. Запись строки в режиме телетайпа.
- •Int 15h, функция 86h. Программная задержка на заданное число микросекунд.
- •Int 16h, функция 00h (10h). Чтение символа с клавиатуры.
- •Int 16h, функция 01h (11h). Чтение символа с клавиатуры.
- •Int 16h, функция 02h (12h). Получение статуса клавиатуры.
- •Int 1ah, функция 0h. Число тиков таймера.
- •Коэффициенты пересчета для нот
- •Значение цветов в байте атрибута
- •Буфер клавиатуры.
- •Литература
- •7. Содержание
2. Предварительные сведения или азы, которые необходимо знать!
2.1. Ассемблер, что это такое?
Процессор всегда выполняет последовательность машинных команд (кодов). Любая машинная команда внешне представляет собой обычное двоичное число (например, 10001000). Очевидно, что написать в машинных кодах, какую-либо программу практически невозможно, хотя бы потому, что вероятность ошибки при написании такой программы приближается к 100%, а вероятность выявления ошибок и их исправления – к 0%. Что, например можно понять из такого фрагмента кода:
-
11111100
10001010
11000011
10010000
Поэтому, в начале 50-х годов было предложено ввести для каждой машинной команды ее, понятный человеку, символический эквивалент. Так и появился язык Ассемблер. То есть каждой ассемблерной команде соответствует конкретная машинная команда и наоборот. Приведенный выше фрагмент кода в записи на Ассемблере выглядит так:
-
cli ; (11111100)
mov al, bl ; (11000011 10001010)
nop ; (10010000)
и это уже вполне читабельно. Запретить внешние прерывания, очистив флаг if (команда cli), передать байт из регистра bl в регистр al (команда mov al, bl) и выполнить пустую операцию (команда nop). С программой, заданной в таком виде вполне можно работать.
Конечно, программу на ассемблере писать труднее, чем программу на языке высокого уровня. Однако Ассемблер имеет и очевидные преимущества. Во-первых, программа, написанная на языке высокого уровня, все равно транслируется в ассемблерную программу, причем весьма неоптимальным образом. То есть программа на Ассемблере практически всегда будет работать быстрее и занимать значительно меньше памяти. Во-вторых, доступ ко многим аппаратным ресурсам можно получить только с помощью Ассемблера. При желании можно найти и, в-третьих, и, в-четвертых …
2.2. Как писать ассемблерную программу, и какие программы нужны для ее последующей трансляции.
Ассемблерную программу можно писать в любом редакторе. Однако, поскольку мы собираемся работать «под DOS», то есть, скорее всего, находимся в одной из таких сред как DOS NAVIGATOR или FAR (или нечто подобное), логично использовать встроенный редактор среды, в которой мы работаем. Смело жмем Shift-F4 и в ответ на запрос называем наш файл, например, оригинальным названием Lab1.asm. Самое главное не забыть поставить расширение ASM. Если мы назовем наш файл, допустим, Lab1, при трансляции нашей программы транслятор выдаст сообщение: Can’t locate file Lab1.asm. Это означает, что транслятор не нашел файл Lab1.asm. Иначе говоря, транслятор работает только с файлами, имеющими расширение ASM. Конечно, мы в любой момент можем присвоить нашему файлу нужное расширение, попросту переименовав наш файл. Но зачем создавать себе лишние трудности, лучше сразу действовать правильно.
После того как наша программа написана, ее надо оттранслировать и получить из нее исполняемый файл (с расширением COM или EXE). Пока мы не будем рассказывать, как это делается, а остановимся на том, какие программы нужны для трансляции, и где их можно найти. Собственно для нашей цели нужны две программы: TASM.EXE (собственно транслятор) и TLINK.EXE (редактор связей). Зачастую TLINK требует для своей работы наличия еще нескольких (чаще всего трех) сопровождающих файлов: DPMILOAD.EXE, DPMIMEM.DLL, DPMI16BI.OVL (или нечто подобное). Помните, если программе TLINK недостает какого-либо файла, TLINK сам при запуске об этом подробно напишет.
Кроме того, для отладки программ нам понадобится еще один файл: отладчик TD.EXE (Turbo Debugger). Этот отладчик позволяет выполнять программу в пошаговом режиме и одновременно следить за изменением информации в регистрах, памяти, стеке и на экране.
Все эти файлы уже давно стоят на Вашем компьютере, если на нем установлен хотя бы один язык высокого уровня (Паскаль, Си, Си++, Delphi и. т. д). В любом из этих языков в поддиректории BIN Вы найдете все вышеуказанные файлы.
Существуют и другие трансляторы, редакторы связей и отладчики, например MASM, LINK, AFD. Ими тоже можно успешно пользоваться.