Вказівки. програмування вводу та виводу на асемблері. Створення *.COM – файлів.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Комп’ютерні науки
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Засоби системного програмування

Частина тексту файла (без зображень, графіків і формул):

Засоби системного програмування ЛАБОРАТОРНА РОБОТА № 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 наведено нижче  До покажчика стека автоматично записується число FFFEh. Незалежно від реального розміру програми їй надається 64 K адресного простору, тобто один і тільки один сегмент. Стек зростає в напрямку зменшення адрес та за умови поганого планування програмістом може "наїхати (тобто затерти)" на власні дані та програму. Розрізняють два стилі оформлення ( запису ) асемблерних програм - із стандартними та спрощеними сегментними директивами. Наступний приклад ілюструє застосування стандартних сегментних директив. CODE SEGMENT WORD 'CODE' ORG 100h ASSUME cs:CODE, ds:CODE, ss:CODE, es:CODE ProgramStart: Jmp cont HelloMessage db 'Hello, world', 13, 10, '$' cont: mov dx,OFFSET HelloMessage ;DS:DX poіnts to the HelloMessage mov ah,09 ;DOS strіng prіnt functіon іnt 21h ;prіnt the HelloMessage mov ah,4Ch ;DOS termіnate program functіon іnt 21h ;end of the program CODE ENDS END ProgramStart ;Нижче наведено приклад із спрощеними сегментними директивами. .MODEL TІNY .CODE org 100h start: jmp prog ;власні дані, що потребують перестрибування HelloMessage DB 'Hello, world', 13, 10, '$' prog: mov ah,09 mov dx,OFFSET HelloMessage іnt 21h mov ah,4ch іnt 21h END start Система Turbo-Assembler виробляє .COM-файл в наступний спосіб: C:\> tasm fіlename.asm <Enter> Результат - файл fіlename.obj. Необов'язкові параметри /l або /la призводять до додаткової генерації файлу fіlename.lst, що міститть лістинг асемблювання програми. C:\> tlіnk/t fіlename.obj <Enter> Результат - файл fіlename.com, що вже можна запускати. ЗАВДАННЯ: Створити програму типу .COM, яка в текстовому режимі виводить за допомогою псевдографіки зображення заданого варіантом символу. Перевірити роботу створеної програми і продемонструвати її виконання. Скласти звіт про виконану роботу (з приведенням тексту програми). ВАРІАНТИ ЗАВДАННЯ: варіант символ варіант символ  1 A 16 λ  2 F 17 X  3 H 18 Z  4 N 19 Д  5 M 20 Ш  6 K 21 Е  7 L 22 У  8 V 23 Ц  9 Y 24 И  10 α 25 ω  11 β 26 τ  12 δ 27 ρ  13 Я 28 Ж  14 Ї 29 G  15 Ю 30 W   Література: 1.Р.Джордейн.Справочник програмиста персональных компъютеров типа ІBM PC XT и AT. - M."Финансы и статистика",1992,стор.13-31. 2.Л.О.Березко,В.В.Троценко. Особливості програмування в турбо-асемблері. -Киів,НМК ВО,1992. 3.Л.Дао. Программирование микропроцессора 8088.Пер.с англ.-М."Мир",1988. 4.П.Абель.Язык ассемблера для ІBM PC и программирования. Пер. з англ.-М.,"Высшая школа",1992. Повна таблиця ASCII символів С–символ;10–десяткове значення;16–шістнадцяткове значення С 10 16 С 10 16 С 10 16 С 10 16 С 10 16 С 10 16 С 10 16 С 10 16   0 00 пробіл 32 20 @ 64 40 ` 96 60 А 128 80 а 160 A0 └ 192 C0 р 224 E0   1 01 ! 33 21 A 65 41 a 97 61 Б 129 81 б 161 A1 ┴ 193 C1 с 225 E1   2 02 " 34 22 B 66 42 b 98 62 В 130 82 в 162 A2 ┬ 194 C2 т 226 E2   3 03 # 35 23 C 67 43 c 99 63 Г 131 83 г 163 A3 ├ 195 C3 у 227 E3   4 04 $ 36 24 D 68 44 d 100 64 Д 132 84 д 164 A4 ─ 196 C4 ф 228 E4   5 05 % 37 25 E 69 45 e 101 65 Е 133 85 е 165 A5 ┼ 197 C5 х 229 E5   6 06 & 38 26 F 70 46 f 102 66 Ж 134 86 ж 166 A6 ╞ 198 C6 ц 230 E6   7 07 ' 39 27 G 71 47 g 103 67 З 135 87 з 167 A7 ╟ 199 C7 ч 231 E7   8 08 ( 40 28 H 72 48 h 104 68 И 136 88 и 168 A8 ╚ 200 C8 ш 232 E8   9 09 ) 41 29 I 73 49 i 105 69 Й 137 89 й 169 A9 ╔ 201 C9 щ 233 E9   10 0A * 42 2A J 74 4A j 106 6A K 138 8A к 170 AA ╩ 202 CA ъ 234 EA   11 0B + 43 2B K 75 4B k 107 6B Л 139 8B л 171 AB ╦ 203 CB ы 235 EB   12 0C , 44 2C L 76 4C l 108 6C М 140 8C м 172 AC ╠ 204 CC ь 236 EC   13 0D - 45 2D M 77 4D m 109 6D H 141 8D н 173 AD ═ 205 CD э 237 ED   14 0E . 46 2E N 78 4E n 110 6E О 142 8E о 174 AE ╬ 206 CE ю 238 EE   15 0F / 47 2F O 79 4F o 111 6F П 143 8F п 175 AF ╧ 207 CF я 239 EF   16 10 0 48 30 P 80 50 p 112 70 Р 144 90 ░ 176 B0 ╨ 208 D0 Ё 240 F0   17 11 1 49 31 Q 81 51 q 113 71 С 145 91 ▒ 177 B1 ╤ 209 D1 ё 241 F1   18 12 2 50 32 R 82 52 r 114 72 Т 146 92 ▓ 178 B2 ╥ 210 D2 Ґ 242 F2   19 13 3 51 33 S 83 53 s 115 73 У 147 93 │ 179 B3 ╙ 211 D3 ґ 243 F3   20 14 4 52 34 T 84 54 t 116 74 Ф 148 94 ┤ 180 B4 ╘ 212 D4 Є 244 F4   21 15 5 53 35 U 85 55 u 117 75 Х 149 95 ╡ 181 B5 ╒ 213 D5 є 245 F5   22 16 6 54 36 V 86 56 v 118 76 Ц 150 96 ╢ 182 B6 ╓ 214 D6 І 246 F6   23 17 7 55 37 W 87 57 w 119 77 Ч 151 97 ╖ 183 B7 ╫ 215 D7 і 247 F7   24 18 8 56 38 X 88 58 x 120 78 Ш 152 98 ╕ 184 B8 ╪ 216 D8 Ї 248 F8   25 19 9 57 39 Y 89 59 y 121 79 Щ 153 99 ╣ 185 B9 ┘ 217 D9 ї 249 F9   26 1A : 58 3A Z 90 5A z 122 7A Ъ 154 9A ║ 186 BA ┌ 218 DA · 250 FA   27 1B ; 59 3B [ 91 5B { 123 7B Ы 155 9B ╗ 187 BB █ 219 DB √ 251 FB   28 1C < 60 3C \ 92 5C | 124 7C Ь 156 9C ╝ 188 BC ▄ 220 DC № 252 FC   29 1D = 61 3D ] 93 5D } 125 7D Э 157 9D ╜ 189 BD ▌ 221 DD ¤ 253 FD   30 1E > 62 3E ^ 94 5E ~ 126 7E Ю 158 9E ╛ 190 BE ▐ 222 DE ■ 254 FE   31 1F ? 63 3F _ 95 5F  127 7F Я 159 9F ┐ 191 BF ▀ 223 DF  255 FF   Приклад виконання. Завдання: за допомогою псевдографіки вивести зображення символу «О». Для вирішення поставленої задачі, слід визначити коди ASCII псевдографічних символів. Для цього необхідно скористатися повною таблицею ASCII символів, приведеною вище. З таблиці видно, що псевдографічні символи розташовані між 176 і 223 кодом. Оберемо для створення границь зображення заданого символу заповнений прямокутник (код 219), а для наповнення – розріджений прямокутник (код 176). Для наочності, утворимо зображення заданого символу «О» безпосередньо при описі даних. Для цього можна скористатися або ASCII кодами, або комбінацією клавіш Alt+ASCII код, яка дозволяє в текстовому редакторі відобразити сам символ. Таким чином, наведемо програму, що рисує зображення символу «О» за допомогою псевдографіки. Текст програми міститься : Examples\laba2.asm ; Вивід за допомогою псевдографіки. dosseg .model small .code org 100h start: jmp prog Simbol db ' ',10,13 db ' ████████████████████████ ',10,13 db ' ██░░░░░██ ██░░░░░░░██ ',10,13 db ' ██░░░░░░██ ██░░░░░░░██ ',10,13 db ' ██░░░░░░██ ██░░░░░░░██ ',10,13 db ' ██░░░░░░██ ██░░░░░░░██ ',10,13 db ' █░░░░░░░██ ██░░░░░░░██ ',10,13 db ' █░░░░░░░██ ██░░░░░░░██ ',10,13 db ' █░░░░░░░██ ██░░░░░░░██ ',10,13 db ' █░░░░░░░██ ██░░░░░░░██ ',10,13 db ' █░░░░░░░██ ██░░░░░░░██ ',10,13 db ' █░░░░░░░██ ██░░░░░░░██ ',10,13 db ' █░░░░░░░██ ██░░░░░░░██ ',10,13 db ' █░░░░░░░██ ██░░░░░░░██ ',10,13 db ' ██░░░░░░░██ ██░░░░░░░██ ',10,13 db ' ██░░░░░░░██ ██░░░░░░░██ ',10,13 db ' ██░░░░░░░██ ██░░░░░░░██ ',10,13 db ' ██░░░░░░░██ ██░░░░░░░██ ',10,13 db ' ██████████████████████████ ',10,13 db ' ',10,13,'$' prog: mov ax,0600h Очистка екрану шляхом його прокрутки вниз  mov cx,0000   mov bh,07   mov dx,184fh   int 10h   mov al,00   mov ah, 09 Вивід на екран зображення символу  mov dx, offset Simbol   int 21h   mov ah, 7 Очікування нажаття довільної клавіші  int 21h   mov ax,0600h Очистка екрану шляхом його прокрутки вниз  mov cx,0000   mov bh,07   mov dx,184fh   int 10h   mov al,0 Завершення програми та передача керування до ОС  mov ah, 4ch   int21h   end start Можна також описати дані, що необхідно вивести, засобами мови Assembler, використовуючи безпосередні коди бажаних псевдографічних символів. Тоді за міткою Simbol, буде: Simbol db 60 dup (32),10,13 db 19 dup (32),26 dup(219),19 dup (32),13,10 db 17 dup (32),2 dup(219),7 dup(176),2 dup(219),8 dup(32),2 dup(219),7 dup(176),2 dup(219),17 dup(32), 10,13 db 15 dup (32),2 dup(219),7 dup(176),2 dup(219),12 dup(32),2 dup(219),7 dup(176),2 dup(219),15 dup(32), 10,13 db 13 dup (32),2 dup(219),7 dup(176),2 dup(219),16 dup(32),2 dup(219),7 dup(176),2 dup(219),13 dup(32), 10,13 db 11 dup (32),2 dup(219),7 dup(176),2 dup(219),20 dup(32),2 dup(219),7 dup(176),2 dup(219),11 dup(32), 10,13 db 8 dup( 9 dup (32),2 dup(219),7 dup(176),2 dup(219),24 dup(32),2 dup(219),7 dup(176),2 dup(219),9 dup(32), 10,13) db 11 dup (32),2 dup(219),7 dup(176),2 dup(219),20 dup(32),2 dup(219),7 dup(176),2 dup(219),11 dup(32), 10,13 db 13 dup (32),2 dup(219),7 dup(176),2 dup(219),16 dup(32),2 dup(219),7 dup(176),2 dup(219),13 dup(32), 10,13 db 15 dup (32),2 dup(219),7 dup(176),2 dup(219),12 dup(32),2 dup(219),7 dup(176),2 dup(219),15 dup(32), 10,13 db 17 dup (32),2 dup(219),7 dup(176),2 dup(219),8 dup(32),2 dup(219),7 dup(176),2 dup(219),17 dup(32), 10,13 db 19 dup (32),26 dup(219),19 dup (32),13,10 db 60 dup (32),10,13,'$' Решта коду програми залишається без змін. Текст програми міститься : Examples\laba2_1.asm Результатом виконання приведеної програми є вивід у текстовому режимі зображення символу «О» за допомогою псевдографіки.
Антиботан аватар за замовчуванням

29.05.2014 21:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!