МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
/
Кафедра ЕОМ
Лабораторна робота №2
з курсу
”Засоби системного програмування”
Програмування вводу та виводу на асемблері. Створення *.COM – файлів.
Мета: оволодіння навичками створення *.COM – файлів та навчитися реалізовувати ввід з клавіатури та вивід на екран символьних даних
Теоретична частина
Програма типу .COM вміщує лише один сегмент, де розташовані усі компоненти програми:
- префікс програмного сегмента;
- програмний код;
- дані;
- стек.
Структура типової програми має вигляд:
tіtle Програма типу .COM
text segment 'code'
assume CS:text, DS:text, ES:text, SS:text
org 100h
myproc proc
... ; текст прграми
myproc endp
... ; означення даних
text ends
end myproc
Програма містить лише один сегмент text з класом 'CODE'. Оператор ASSUME затверджує, що усі чотири сегментні регістри вказують на цей єдиний сегмент. Оператор ORG 100h резервує 256 байтів для PSP (префікса програмного сегмента). Наповнювати PSP буде система. У програмі нема потреби ініціалізувати регістр DS, бо його, як всі інші сегментні регістри, ініціалізує система. Система у випадку .COM - файлу завжди задає ІP=100h. Через це негайно за оператором ORG 100h повинен знаходитись перший виконуваний рядок програми. Якщо власні дані бажано розмістити на початку програми, тоді першою командою програми має бути jmp через ці дані.
Образ пам'яті програми типу .COM наведено нижче
Текст програми
************************* kuts.COM**************************
Turbo Assembler Version 4.1 01/02/12 16:22:18 Page 1
kuts.asm
1 0000 .model tiny
2 0000 .code
3 org 100h
4 0100 B4 00 start: mov ah,0
5 0102 BA 0108r mov dx,offset message
6 0105 CD 21 int 21h
7 0107 C3 ret
8 0108 3C*(20) 0A 0D message db 60 dup (32),10,13
9
10 0146 14*(20) 02*(DB) 03* + db 20 dup (32),2 dup(219),3 dup(219),13,10
11 (DB) 0D 0A
12 0161 13*(20) 02*(DB) 05* + db 19 dup (32),2 dup(219),5 dup (32),2 dup(219),13,10
13 (20) 02*(DB) 0D 0A
14 017F 13*(20) 02*(DB) 0D + db 19 dup (32),2 dup(219),13,10
15 0A
16 0196 15*(20) 02*(DB) 0D + db 21 dup (32),2 dup(219),13,10
17 0A
18 01AF 17*(20) 04*(DB) 0D + db 23 dup (32),4 dup(219),13,10
19 0A
20 01CC 15*(20) 02*(DB) 04* + db 21 dup (32),2 dup(219),4 dup (177),2 dup(219),13,10
21 (B1) 02*(DB) 0D 0A
22 01EB 13*(20) 02*(DB) 08* + db 19 dup (32),2 dup(219),8 dup (177),2 dup(219),13,10
23 (B1) 02*(DB) 0D 0A
24 020C 13*(20) 02*(DB) 08* + db 19 dup (32),2 dup(219),8 dup (177),2 dup(219),13,10
25 (B1) 02*(DB) 0D 0A
26 022D 13*(20) 02*(DB) 08* + db 19 dup (32),2 dup(219),8 dup (177),2 dup(219),13,10
27 (B1) 02*(DB) 0D 0A
28 024E 13*(20) 02*(DB) 08* + db 19 dup (32),2 dup(219),8 dup (177),2 dup(219),13,10
29 (B1) 02*(DB) 0D 0A
30 026F 15*(20) 02*(DB) 04* + db 21 dup (32),2 dup(219),4 dup (177),2 dup(219),13,10
31 (B1) 02*(DB) 0D 0A
32 028E 17*(20) 04*(DB) 0D + db 23 dup (32),4 dup(219),13,10
33 0A
34 02AB 3C*(20) 0A 0D 24 db 60 dup (32),10,13,'$'
35
36 end start
Turbo Assembler Version 4.1 01/02/12 16:22:18 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "01/02/12"
??FILENAME Text "kuts "
??TIME Text "16:22:18"
??VERSION Number 040A
@32BIT Text 0
@CODE Text DGROUP
@CODESIZE Text 0
@CPU Text 0101H
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text KUTS
@INTERFACE Text 000H
@MODEL Text 1
@STACK Text DGROUP
@WORDSIZE Text 2
MESSAGE Byte DGROUP:0108
START Near DGROUP:0100
Groups & Segments Bit Size Align Combine Class
DGROUP Group
_DATA 16 0000 Word Public DATA
_TEXT 16 02EA Word Public CODE
Результат виконання COM-файлу згідно завдання.
/
Висновок: на даній лабораторній роботі я оволодів навичками створення *.COM – файлів та навчився реалізовувати ввід з клавіатури та вивід на екран символьних даних