Литература
1. Юров В., Хорошенко С. Assembler: учебный курс – СПб: Питер Ком, 1999. – 672 с.:ил.
2. Абель П. Язык Ассемблера для IBM PC и программирования / Пер. с англ. Ю.В.Сальникова.- М.: Высш. шк., 1992.- 447 с.:ил.
3. Майко Г.В. Ассемблер для IBM PC: - М.: «Бизнес-Информ», «Сирин», 1997. – 212 с.
4. Финогенов К.Г. Самоучитель по системным функциям MS-DOS. – Изд.2, перераб. и дополн.- М.: Радио и связь, Энтроп, 1995. – 382 с., ил.
5. Данкан Р. Профессиональная работа в MS-DOS: Пер. с англ. – М.: Мир, 1993. – 509 с., ил.
6. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с англ. / Предисл. Н.В.Гайского. – М.: Финансы и статистика, 1992.- 544 с.: ил.
…
1. Создайте на Вашем рабочем диске папку для хранения программ на ассемблере. В неё скопируйте транслятор (tasm.exe), компоновщик (tlink.exe), отладчики (td.exe, afdpro.exe), а также файлы rtm.exe, dpmi16bi.ovl.
Возможно, в зависимости от конфигурации системы компьютера и его программного обеспечения, понадобятся еще какие-то дополнительные файлы. Если такая необходимость возникнет, система сообщит об этом.
Если в компьютере нет файлового менеджера для работы в DOS, можно установить эмулятор DOS, например, DOSBox.
Русификация DOSBox:
1) Файл russian.txt -> C:\Users\%username%\AppData\Local\DosBox. Если папка AppData не видна, то изменить настройки Windows на «показывать скрытые папки и диски».
2) Изменить конфигурационный файл (file.conf) dosbox: раздел [dosbox] - language = russian.txt, раздел [dos] - keyboardlayout = ru.
Перед началом работы командой mount <диск в эмуляторе> <реальный путь> необходимо «смонтировать» каталог с транслятором в эмулятор DOSBox (например, mount c c:\progs_asm) и перейти в него – команда «с:» Чтобы каждый раз при запуске DOSBox не писать эти команды, можно их записать в конфигурационном файле dosbox в разделе [autoexec].
Наша первая программа (1.1) – традиционный для всех языков программирования «Hello, world!»:
asm segment
org 100h
Begin:
mov ah, 9
mov dx, offset Mes
int 21h
int 20h
Mes db ‘Hello, world!$’
asm ends
end Begin
Для написания программы используется простейший текстовый редактор, например, Блокнот. Файл с написанным листингом необходимо сохранить с расширением.asm, для запуска в DOSBox написать команды:
tasm.exe <название программы>.asm
tlink.exe <название программы>.obj /t /x – для получения com-файла
<название программы>.com
Программа на языке ассемблера состоит из сегментов - любая программа имеет хотя бы один сегмент (в программах типа COM код, данные и стек расположены в одном сегменте, объем занимаемой памяти – 64 Кбайт).
Сегмент образуется директивой segment, которая имеет следующий формат:
имя сегмента segment
…
…
имя сегмента ends
Имя может быть произвольным, но соответствовать соглашениям для имен. Директивой ends заканчивается сегмент.
С помощью директивы org 100h выделяется память для программного префикса – области памяти объемом в 100h байт, которая используется для хранения служебной информации о программе.
Begin – метка, указывающая ассемблеру на начало кода (имя метки может быть другим, например, Start).
Регистр процессора – это специально отведенная область памяти для хранения какого-нибудь числа.
Команда mov загружает в регистр число: загружаем в регистр ah число 9, загружаем в регистр dx адрес сообщения для вывода («offset» — это смещение внутри заданного сегмента).
Когда мы загружаем программу в память, она автоматически располагается в первом свободном сегменте. Сегментные регистры – cs, ds, ss, es. Как они называются? Регистры данных – ax, bx, cx, dx (16-разрядные, состоят из 2-х 8-разрядных регистров, например, регистр ax состоит из ah и al). Как они называются?
Прерывание (interrupt) – это своего рода подпрограмма, которая находится постоянно в памяти и может вызываться в любое время из любой программы. Таким образом, мы вызываем подпрограмму (прерывание 21h), которая выводит на экран строку. Для этого мы, собственно, и помещаем необходимые значения в регистры, т. е. готовим для прерывания необходимые параметры. Всю работу (вывод строки, перемещение курсора) берет на себя эта процедура.
Прерывание int 20h выполняет только одну задачу: выход из программы (аналог оператора exit () в языках высокого уровня).
$ указывает на конец выводимой строки. Что будет, если мы уберём этот символ и запустим программу?
Пара регистров cs:ip задаёт текущий адрес кода.
Исследуйте программу в отладчике. Чтобы запустить программу под отладчиком, необходимо написать «afdpro.exe (или td.exe) <название программы>.com». Для перехода к следующей команде в отладчике необходимо нажать клавишу <F1> в AFD, <F7> в TD. Чтобы выйти из отладчика, необходимо выполнить команду «Quit».
а) Как изменяется регистр IP?
б) Что загружается в регистр dx? Перейдите в дампе памяти к смещению, указанному в dx.
в) Сколько байт занимает каждая из команд в программе №1.1?
Задание 1. Усовершенствуйте программу №1.1, чтобы выводилось сообщение на РУССКОМ ЯЗЫКЕ.
/*Изучите таблицу ASCII-кодов*/