МІНІСТЕРСТВО ОСВІТИ І НАУКИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра інформаційних
систем та мереж
Лабораторна робота №1
на тему:
Створення виконуваного коду асемблерної програми
Тема роботи: створення виконуваного коду асемблерної програми
Мета роботи: вивчити послідовність перетворення асемблерної програми для створення виконуваного коду.
Хід роботи :
Контрольні запитання:
Послідовність перетворення асемблерної програми для утворення виконуваного коду.
Призначення кроку компіляції асемблерної програми. Режими роботи компілятора.
Призначення кроку редагування зв’язків програми. Режими роботи редактора зв’язків.
Режими роботи програми відлагодження.
Відповіді на контрольні запитання:
Текст асемблерної програми створюється у вигляді одного або декількох файлів з розширенням *.asm. Після створення програми здійснюється її перетворення у машинний код. Для цього використовується один із компіляторів, наприклад tasm.exe або masm.exe. Задачею компілятора є виявлення синтаксичних помилок та створення машинного коду – файлу із розширенням *.obj (об’єктного файлу). Для перетворення об’єктного файлу у виконуваний файл *.exe використовується редактор зв’язків: TLINK.
TASM [опції] *.asm [,*.obj] [,*.lst] [,*.crf] -- Замість символа ‘*’ вказується ім’я файлу. Квадратні дужки позначають необов’язкові параметри команди. Для запуску компілятора використовується ряд опцій, значення яких можна вивчити, запустивши команду tasm.exe з командного рядка. Наприклад, для включення в об’єктний файл інформації для програми відлагодження необхідно використати опцію /zi : “TASM /zi *.asm”. Для отримання файлу лістингу додатково можна використати опцію /la: “TASM /zi /la *.asm”
“TLINK *.obj, *.exe, *.map, *.lib, *.def “ де *.obj – один або декілька об’єктних файлів; *.exe – виконуваний файл; *.map – карта розподілу пам’яті; *.lib – бібліотечні файли; *.def – файл визначення модуля програми. Обов’язковим є тільки перший параметр команди, що визначає ім’я об’єктного файлу. Якщо ім’я exe-файлу не вказано, то воно буде таким як ім’я obj-файлу. Команда може містити ряд опцій, значення яких можна вивчити, запустивши команду tlink.exe з командного рядка. Наприклад: “TLINK /v *.obj” - включити відлагоджувальну інформацію в exe-файл; “TLINK /t *.obj” - створити com-файл.
При необхідності для перегляду результатів або для вивчення помилок у роботі програми можна використати програму відлагодження, наприклад td.exe . Для цього у командному рядку необхідно набрати TD.EXE *.EXE Замість символа ‘*’ необхідно вказати ім’я файлу.
Порядок виконання роботи
1. Створити файл tasm.bat для компіляції програми:
del %1.exe
tasm /zi %1.asm
tlink /v %1.obj
del %1.obj
del %1.map
2. Набрати подані нижче програми, зберегти їх у файлах з розширенням “.ASM ”.
3. Відкомпілювати набрані програми за допомогою командного рядка:
tasm.bat назва файлу програми без розширення
4. Вивчити режими запуску компілятора та редактора зв’язків.
5. Отримати файли лістингу *.lst, розглянути та вивчити загальну структуру програм.
6. Запустити одержані exe-файли на виконання.
7. Запустити програму для відлагодження td.exe та вивчити режими її роботи.
8. Оформити звіт по роботі.
Текст програми1:
; HELLO.ASM – Виведення повідомлення "Hello World"
.MODEL small
.STACK 100h
.DATA
HelloMessage DB 'Hello, world',13,10,'$'
.CODE
mov ax,@data
mov ds,ax ;занести у DS сегментну частину адреси сегменту даних
mov ah,9 ;функція DOS виведення рядка символів
mov dx,OFFSET HelloMessage ; вказівник на рядок
int 21h ; виведення рядка
mov ah,4ch ;DOS terminate program function
int 21h ;terminate the program
END ; кінець програми
Текст програми2:
; REVERSE.ASM – Виведення рядка у зворотньому порядку
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
MAX_STR_LEN EQU 1000
String DB MAX_STR_LEN DUP(?)
ReverseString DB MAX_STR_LEN DUP(?)
.CODE
mov ax,@data
mov ds,ax ;set DS to point to the data segment
mov ah,3fh ; номер функції DOS введення даних
mov bx,0 ; дескриптор клавіатури
mov cx,MAX_STR_LEN ; максимальна кількість символів
mov dx,OFFSET String ; адреса рядка для введення
int 21h ; ввести рядок
and ax,ax ; чи введено будь-які символи?
jz Done ; ні, перехід на кінець програми
mov cx,ax ; записати кількість введених символів в регістр CX
push cx ; запам’ятати регістр CX у стеку
mov bx,OFFSET String ; занести у BX адресу введеного рядка
mov si,OFFSET ReverseString; занести у SI адресу рядка результату
add si,cx
dec si ; адреса кінця рядка результату
m1:
mov al,[bx] ; отримати наступний символ введеного рядка
mov [si],al ; записати цей символ у рядок результату
inc bx ; вказівник на наступний символ введеного рядка
dec si ; вказівник на наступний символ рядка результату
loop m1 ; виконати цикл
pop cx ; отримати зі стеку довжину рядка
mov ah,40h ; номер функції DOS для виведення даних
mov bx,1 ; дескриптор дисплея
mov dx,OFFSET ReverseString ; адреса рядка для виведення
int 21h ; надрукувати рядок
Done:
mov ah,4ch ; номер функції DOS для завершення програми
int 21h ; завершити програму та вийти у DOS
END ; кінець програми
Результати комп’ютерної реалізації програми:
Програма №1 виводить на консоль наступний рядок: 'Hello, world' та переводить позицію курсора на наступний рядок.
Програма №2 зчитує з клавіатури рядок символів та виводить його на консоль в зворотньому порядку.
Висновок: Я вивчив послідовність перетворення асемблерної програми для створення виконуваного коду.