1 Программирование на Ассемблере Цель работы: - ознакомление с общими принципами построения программ на языке ассемблера; - работа с программами TASM.EXE, TLINK.EXE; - создание командных и исполняемых файлов (*.EXE,*.COM) 1.Полный цикл создания программы на языке Ассемблера состоит из следующих этапов: Создание новой программы ----------------| | | | Редактирование | | текстовый редактор | -------------------------------------| | Исходный файл Ассемблера (*.asm) | -------------------------------------| | | Ассемблирование (трансляция TASM.EXE) | | | -------------------------------------| | Объектный файл *.obj | -------------------------------------| | | Компоновка ( TLINK.EXE ) | | | -------------------------------------| | исполняемый файл *.exe | -------------------------------------| | | Выполнение | | | ----------------------------------------Если нужны изменения --------------------------------| Конец 1.2 В языке Ассемблера имеются операторы 2-х видов: директивы и командные операторы. 1.2.1 Директивы служат указаниями Ассемблеру во время ассемблирования, но не транслируются в машинные команды. Любая программа содержит упрощенные директивы определения сегментов DOSSEG, MODEL, .STACK, .DATA, .CODE и END. Директивы определения данных позволяют определить переменные в памяти различного размера: 2 DB - 1 байт DW - 2 байта = 1 слово DD - 4 байта = 1 двойное слово DQ - 8 байт = 1 четвертное слово DT - 10 байт 1.3 Команды (мнемоники инструкций), транслируются (преобразуются) в машинные коды, например, MOV - переслать , INC - увеличить содержимое на 1. В Ассемблере нет команды непосредственной загрузки сегментного регистра, поэтому формирование адреса сегмента данных производится следующим образом: mov ax,@data ;переслать в ax адрес сегмента данных mov ds,ax ;переслать в ds содержимое ax 1.4 Изучить файлы Tasmrus.txt и Tlinkrus.txt (помощь к программам TASM,TLINK и ключи управления), необходимые ключи законспектировать. 1.5 Работаем в NORTON COMMANDER 2. ЗАДАНИЕ 1 (Упрощенное оформление программ) 2.1 Войдите в директорию L1,в ней создайте файл с именем HELLO1.ASM. (SHIFT+F4). Введите текст следующей программы (без комментариев). F2-сохранить файл. Программа 1: ; Programm Hello1 ( Упрощенное оформление программ ) model small ;Модель памяти ближнего типа .stack 100h ;Определяет стек раазмером 100h .data ;Начало сегмента данных Hello DB 'Hello!$' ;Зарезервировали память для ;переменной HELLO .code ;Начало сегмента кода start: mov ax,@DATA ;Формирование адреса сегмента mov ds,ax ;данных LEA DX,Hello ;Установить в DX адрес переменной HELLO MOV ah,09h ;Функция DOS вывода строки INT 21h ;Вывод строки на экран MOV ax,4C00h ;Функция DOS завершения INT 21h ;программы END start ;конец программы 2.2 Создайте исполняемый файл HELLO1.EXE, выполнив ассемблирование и компоновку файла HELLO1.ASM. (Ввод команды завершить клавишей Enter). 2.2.1 Для ассемблирования наберите TASM HELLO1.ASM HELLO1.ASM будет ассемблироваться в HELLO1.OBJ 2.2.2 Для компоновки наберите TLINK HELLO1.OBJ В результате работы получаем файл HELLO1.EXE 2.2.3 Для выполнения программы встаньте курсором на файл HELLO1.EXE и нажмите Enter или наберите HELLO1 3 Погасите левую панель клавишами Ctrl+F1, чтобы было видно как работает программа HELLO1.EXE. 2.2.4 Внесите изменения в вашу программу,для чего создайте файл HELLO11.ASM, в него скопируйте файл HELLO1.ASM , вместо слова 'HELLO!$' наберите любое другое слово в кавычках '....' Создайте файл HELLO11.EXE, используя командный файл. 2.2.5 Создание командного файла. Для ускорения процесса создания исполняемого файла ( п.п.2-2.2.) создайте командный файл с любым именем (в текстовом редакторе), расширением .BAT, например, HEL.BAT TASM /L HELLO11 TLINK HELLO11 HELLO11.EXE 2.2.6 Для запуска командного файла встаньте курсором на файл HEL.BAT и нажмите клавишу Enter. 2.2.7 Создайте командный файл HEL1.BAT для любой программы, в этом случае в командном файле вместо имени файла (вашей программы) набирают символы %1 TASM /L %1 TLINK %1 %1.EXE 2.2.8 Для запуска данного командного файла нужно после имени командного файла (без расширения) указать имя вашей программы без расширения (.ASM), например, HEL1 HELLO11 3. ЗАДАНИЕ 2 (Стандартное оформление программ) 3.1 Войдите в директорию L1,в ней создайте файл с именем HELLO2.ASM. Введите текст следующей программы (без комментариев). F2-сохранить файл. Программа 2: ; Program Hello2 ( Стандартное оформление программ) OurStack SEGMENT PARA STACK 'STACK' DB 64 DUP (?) OurStack ENDS OurData SEGMENT PARA PUBLIC 'DATA' Hello DB 'Hello!$' OurData ENDS OurCode SEGMENT PARA PUBLIC 'CODE' ASSUME CS:OurCode, DS:OurData, SS:OurStack Start: MOV AX,OurData MOV DS,AX LEA DX,Hello MOV AH,09h INT 21h MOV AH,4Ch MOV AL,00h INT 21h OurCode ENDS END Start 4 3.2 Создайте исполняемый файл HELLO2.EXE , выполнив ассемблирование и компоновку файла HELLO2.ASM,используя раннее созданный пакетный файл HEL1.BAT (п.2.2.7) клавишей Enter). 3.2.1 Для выполнения программы наведите курсор на файл HELLO2.EXE и нажмите Enter или наберите HELLO2 Погасите левую панель клавишами Ctrl+F1, чтобы было видно как работает программа HELLO2.EXE. 4. ЗАДАНИЕ 3 (Пример оформления программы в виде *.COM файла) 4.1 Войдите в директорию L1,в ней создайте файл с именем HELLO3.ASM. Введите текст следующей программы (без комментариев). F2-сохранить файл. Программа 3: ; Programm Hello3 ( Пример оформления программы в виде com-файла) MODEL TINY .CODE org 100h begin: jmp start Hello DB 'Hello!$' start: LEA DX,Hello MOV AH,09h INT 21h MOV AH,4Ch MOV AL,00h INT 21h END begin 4.2 Создайте исполняемый *.com файл HELLO3.COM, выполнив ассемблирование и компоновку файла HELLO3.ASM. (Ввод команды завершить клавишей Enter). 4.2.1 Для ассемблирования наберите TASM HELLO3.ASM HELLO1.ASM будет ассемблироваться в HELLO1.OBJ 4.2.2 Для компоновки наберите TLINK/t HELLO3.OBJ В результате работы получаем файл HELLO3.COM 4.2.3 Для выполнения программы встаньте курсором на файл HELLO3.COM и нажмите Enter или наберите HELLO3 Погасите левую панель клавишами Ctrl+F1, чтобы было видно как работает программа HELLO3.COM. 5. Задние 4 Получение файлов-листинга (отладочные файлы). 5.1 Снова создайте файл HELLO1.OBJ, используя исходную программу, раннее набранную HELLO1.ASM, получите файл листинга HELLO1.LST (см.TASMRUS.HLP). 5.3.4 Просмотрите файл HELLO1.LST - листинг программы HELLO1.OBJ , который содержит адреса, машинные коды команд и операторы Ассемблера. 6. К отчету по лабораторной работе №1 представить: - продемонстрируйте работающие программы HELLO1,HELLO11,HELLO2, HELLO3; - полный цикл создания программы на языке Ассемблера; - программы HELLO1.ASM, HELLO2.ASM,HELLO3.ASM с комментариями; - блок-схемы программ HELLO1,HELLO2,HELLO3; 5 - выберите из файла HELLO1.LST по одной команде с различными режимами адресации: регистровой, регистровой косвенной, базовой, непосредственной. Запишите команды Ассемблера, машшинный код команд в 16-м и двоичном коде, режимы адресации команд. - заполненную таблицу Имя :Количество: Размер :Размер: Размер программы :команд :*.OBJ (в kбт.):*.EXE :*.COM HELLO1 HELLO11 HELLO2 HELLO3 Примечание 1: В данной лабораторной работе используются следующие функции DOS для выполнения некоторых операций: 1) Функция 1 "Ввод с клавиатуры" вызывается путем помещения номера функции в регистр АН и выполнения команды INT 21H - прерывание программы. Набранный символ помещается в регистр AL. MOV AH,1 INT 21H 2) Функция 9 - "Печать строки" вызывается путем помещения номера функции в регистр АН, адреса (смещения) строки в регистр DX и выполнения команды INT 21H. MOV AH,9 MOV DX,offset HELLO INT 21H 3) Функция 4CH - "Завершение программы и выход в DOS " вызывается аналогично функции 1. MOV AH,4CH INT 21H