Вы находитесь на странице: 1из 5

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 SMALL
.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