Tasm /z /zi /n hello_1 hello_1 hello_1 ЛАБОРАТОРНАЯ РАБОТА N1 Изучение основ программирования на языке Ассемблера Цель работы Практическое овладение навыками составления простейших программ на языке Ассемблера и работы с программами TASM и TLINK. 2. Рекомендуемая литература Assembler. Учебник для вузов. 2-е изд. /В. И. Юров – СПб.: Питер, 2004. с.121…141. К. Г. Финогенов. Основы языка Ассемблера. – М.: Радио и связь, 2000. с. 22…31. Абель П. Язык Ассемблера для IBM PC и программирования /Пер. c англ.- М.:Высш.шк., 1992.с 51…75. Уокерли Дж. Архитектура и программирование микро-ЭВМ: В 2-х книгах. Пер. с англ.-М.: Мир, 1984.-Кн. 2. с 215…284. Белецкий Я. Энциклопедия языка Си: Пер. c польск.-М.:Мир,1992.с 218…229, 233, 665, 669. Подготовка к работе 3.1. Изучить методические указания и рекомендованную литературу. 3.2. Подготовить ответы на контрольные вопросы. 4. Контрольные вопросы 4.1. Команды и директивы ассемблера. Формат и отличия. 4.2. Какова цель сегментации памяти? 4.3. Что такое базовый адрес сегмента? 4.4. Какие значения может принимать базовый адрес сегмента? Каков максимальный размер сегмента и почему? 4.5. Какие типы сегментов использует ассемблерная программа? 4.6. Какими директивами описывается сегмент? 4.7. Как описываются различные типы данных, используемые программой? 4.8. Каково назначение директивы ASSUME? 4.9. В чем заключается инициализация сегментных регистров? 4.10. Что такое ассемблирование и компоновка программы? 4.11. Стандартное начало и окончание сегмента кодов. 4.12. Каково содержание файлов с расширениями *.ASM, *.LST, *.OBJ, *.MAP, *.EXE? 4.13. Метка и имя директивы. Назначение и отличия. 4.14. Для чего требуется помечать начальную команду программы меткой? 4.15. Как завершается исходный модуль программы? Задание на выполнение работы 5.1. На диске С создать папку (каталог) с именем «Ваша фамилия»[1]: С: \USER \Ваша фамилия. Скопировать в созданную папку файлы Турбо Ассемблера tasm.exe, tlink.exe и td.exe из папки TASM. 5.2. Используя текстовый редактор, создать и отредактировать исходный модуль программы hello_1.asm, текст которого приведен ниже. ;Program Hello_1- Ваша первая программа | Data SEGMENT | ; Открыть сегмент данных | Greet DB 'Hello, My friends!', 13, 10, '$' | ;Определить строку симво- ;лов с именем Greet | Data ENDS | ;Закрыть сегмент данных | Ourstack SEGMENT Stack | ;Открыть сегмент стека | DB 100h DUP (?) | ;Отвести под стек 256 байт | Ourstack ENDS | ;Закрыть сегмент стека | ASSUME CS:Code, DS:Data, SS:Ourstack | ;Назначить сегментные ;регистры | Code SEGMENT | ;Открыть сегмент кодов | Start: mov AX, Data | ;Инициализировать | mov DS, AX | ;сегментный регистр DS | mov AH, 09h | ;Вывести строку Greet | mov DX, OFFSET Greet | ;на экран с помощью | int 21h | ;DOS | mov AL, 0 | ;Завершить программу | mov AH, 4Ch | ;с помощью | int 21h | ;DOS | Code ENDS | ;Закрыть сегмент кодов | END Start | ;Конец исходного модуля. | 5.3. Используя компилятор Турбо Ассемблера tasm.exe создать файлы hello_1.obj и hello_1.lst. Просмотреть на экране тексты созданных файлов hello_1.obj и hello_1.lst. и проанализировать их. 5.4. Используя компоновщик tlink.exe создать файлы hello_1.exe и hello_1.map. Вывести на экран файлы hello_1.exe и hello_1.map и проанализировать их. 5.5. Убедиться в работоспособности программы hello_1. 5.5. Создайте для ускорения процесса ассемблирования и компоновки командный файл с любым именем с расширением bat (*.bat). Для этого в текстовом редакторе NC наберите текст, состоящий из последовательности выполняемых команд DOS: Tasm /z /zi /n hello_1 hello_1 hello_1 Tlink /v hello_1 Удалите из текущего каталога все файлы hello_1 кроме исходного и проверьте работоспособность созданного командного файла. 5.6. Создайте универсальный командный файл *.bat, который можно использовать для ассемблирования и компоновки любой создаваемой Вами программы. Для этого в созданном командном файле вместо имени файла следует набрать символы %1: tasm /z /zi /n %1 %1 %1 tlink /v %1 Для его запуска нужно в командной строке после имени командного файла (без расширения) указать имя Вашего исходного модуля без расширения. Проверьте его работоспособность. 5.7. Внести изменения в программу hello_1, которые заставят ее выводить на экран еще одну строку текста «My name Ваша фамилия». Для этого создайте новый исходный модуль hello_2.asm, выполните ассемблирование и компоновку, после чего убедитесь в работоспособности программы. 5.8. Отчитаться о проделанной работе. 5.9. Составьте отчет, который должен содержать: - распечатку текста исходного модуля и всех файлов, созданных в процессе ассемблирования и компоновки для программ hello_1 и hello_2 с комментариями: *.asm, *.obj, *.lst, *.map, *.exe; - список команд, использующихся для ассемблирования и компоновки; - тексты созданных командных файлов *.bat с комментариями; ОБЩИЕ СВЕДЕНИЯ 6.1. Несмотря на то, что современные языки программирования высокого уровня обеспечивают не только удобное, но и эффективное системное программирование, в тех случаях, когда особенно важно получить оптимальный объектный код, целесообразно использовать Ассемблер. Ассемблер представляет собой машинный язык в символической форме, которая достаточно понятна и удобна программисту. Полный цикл создания программы на Ассемблере можно представить в виде последовательности четырех этапов, показанных на рисунке 1.1. Рисунок 1.1 – Этапы создания Ассемблерной программы. Исходный модуль программы создается в любом текстовом редакторе, например в «Блокноте» или «NCEDIT» и сохраняется в виде файла с именем, присвоенным по правилам MS DOS, с обязательным расширением asm. Для нашей первой программы это будет hello_1.asm. Для получения исполняемого модуля, который можно запустить на выполнение, требуется последовательно выполнить этапы ТРАНСЛЯЦИИ и КОМПОНОВКИ. Для этого используются программы, входящие в состав пакета ассемблера Turbo Assembler (TASM) фирмы Borland. Трансляция производится с помощью компилятора[2] Турбо Ассемблера, который является исполняемой программой tasm.exe, работающей в режиме командной строки. Он вызывается командой DOS: tasm / z/ zi/ n имя файла имя файла имя файла, где /z – ключ, разрешающий вывод на экран строк исходного текста программы, в которых ассемблер обнаружил ошибки; /zi – ключ, управляющий включением в результирующий файл полных сведений о номерах строк и именах исходного модуля; /n – ключ, который исключает из листинга информацию о символических обозначениях в программе. Следующие далее параметры определяют имена файлов исходного (*.asm), объектного (*.obj) и листинга (*.lst). Причем в командной строке достаточно указать только имена файлов, без расширений, например Tasm /z /zi /n hello_1 hello_1 hello_1 Если исходный модуль не содержит ошибок, то на экран выводится сообщение об успешной трансляции, а в текущем каталоге появится новые файлы – объектный (hello_1.obj) и листинга (hello_1.lst). Компоновка объектных модулей с библиотечными модулями производится вызовом компоновщика tlink.exe из командной строки: Tlink /v имя файла Ключ /v передает в загрузочный файл информацию, используемую при отладке программ. Следующее далее имя файла обозначает имя объектного модуля. Расширение в этом имени можно не указывать. Для нашего примера компоновка будет осуществляться следующей командой: Tlink /v hello_1 В случае успешного окончания компоновки в текущем каталоге появляется исполняемый файл – загрузочный модуль hello_1.exe, и файл карты сборки hello_1.map. Загрузочный модуль может быть запущен на выполнение командой DOS hello_1.exe. Результат работы Вашей первой программы можно увидеть, если убрать с экрана панели Norton Commander клавишами ctrl+O. Для отладки создаваемых программ используется программа-отладчик Turbo Debugger (td.exe) фирмы Borland. 6.2. Исходный модуль программы на Ассемблере - последовательность строк, содержащих командные операторы и директивы, представляемая как функциональная единица для дальнейшей обработки. Исходный модуль создается текстовым редактором и хранится в виде файла с расширением *.asm. Командные операторы или просто команды имеют следующий формат: [метка:] мнемоника [операнд(ы)] [;комментарий] - метка – определяемое пользователем имя команды, заканчивающееся двоеточием. Значением метки является адрес отмеченной команды. Используются для организации команд передачи управления. Метка состоит из последовательности символов или цифр, однако всегда начинается с символов английского алфавита или с символов @, _,?. - мнемоника –мнемоническое обозначение команды, которое представляет собой ключевые слова Ассемблера и идентифицирует выполняемую командой операцию. Обычно используются сокращенные английские слова, передающие смысл команды. - операнд(ы) – объекты, которые участвуют в указанной операции. Это могут быть адреса данных или непосредственно сами данные, необходимые для выполнения команды. Команды могут быть двух, одно и безоперандными. Если операндов два, то они разделяются запятой. - комментарий – начинается с точки с запятой и предназначен для пояснения к программе. Может выполняться на русском языке, так как не влияет на выполнение программы. Метка, мнемоника и операнд(ы) разделяются по крайней мере одним пробелом друг от друга. |