Программирование на Ассемблере

advertisement
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
Download