- •В.Ф. Гузик, с.М. Гушанский, в.А. Каляев, а.О. Пьявченко, а.И. Костюк основы программирования на языке «ассемблер»
- •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 Входные параметры: нет
- •1. Функция 2 прерывания int 21h
- •2. Функция 9 прерывание int 21h
- •Функция 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.11 Трансляция ассемблерной программы
Мы написали ассемблерную программу, которую назвали, например, temp.asm. Теперь эту программу нужно оттранслировать с помощью tasm.exe и получить из нее файл temp.obj. Затем, с помощью программы tlink.exe, файл temp.obj преобразуется в исполняемый файл temp.exe (или temp.com).
Для того, чтобы получить файл temp.obj надо набрать в командной строке:
tasm.exe temp. asm (можно и проще: tasm temp)
и нажать ENTER. Конечно при этом tasm.exe и temp.asm должны быть, допустим, в той директории, где мы сейчас работаем (доступны компьютеру). Транслятор может и не создать файл temp.obj, если он найдет в программе ошибки.
Далее надо получить исполняемый файл. Для создания EXE программы надо набрать в командной строке:
tlink.exe temp.obj (или tlink temp)
а для COM программы:
tlink.exe temp.obj /t (или tlink temp /t).
Вообще, очень удобно создать bat – файл, поскольку при отладке программу постоянно приходится транслировать заново. Работа tlink.exe также не всегда завершается созданием исполняемого файла. Это бывает, если tlink.exe нашел в программе ошибки.
Приведем пример трансляции.
code segment ; (строка 1)
assume cs:code, ds:code ; (строка 2)
; пропущена директива org 100h
start: ; (строка 4)
jmp begin ; (строка 5)
mad db 100, 99, 98, ; (строка 7) лишняя запятая после 98
db 97, 96 ; (строка 8)
nic dw 380 ; (строка 10)
begin ; (строка 12) пропущено двоеточие после begin
mov ah. 7 ; (строка 14) вместо точки нужна запятая
mov al, nic ; (строка 15) не согласована разрядность регистра и операнда
int21h ; (строка 16) пропущен пробел
mov si, offset madd ; (строка 17) неправильно написано имя массива
mov [si+3], 5 ; (строка 18) не определен формат записываемой информации
mov ah, 4ch
int 21h
code ends
end start
Мы написали эту программу (для COM формата) и назвали ее temp.asm. Эта программа не имеет никакого смысла, так как не выполняет никакой полезной и даже здравой работы. Зато в программе намеренно сделаны ошибки, каждая из которых описана в той же строке, где она находится.
Теперь мы создали файл temp.bat:
tasm temp
tlink temp /t
и запустили его. Вот что мы получим:
Assembling file: temp.ASM
**Error** temp.ASM(5) Undefined symbol: BEGIN
*Warning* temp.ASM(7) Missing operand - trailing ? assumed
**Error** temp.ASM(12) Illegal instruction
**Error** temp.ASM(14) Too few operands to instruction
**Error** temp.ASM(15) Operand types do not match
**Error** temp.ASM(16) Illegal instruction
**Error** temp.ASM(17) Undefined symbol: MADD
*Warning* temp.ASM(18) Argument needs type override
Error messages: 6
Warning messages: 2