Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум_СП

.pdf
Скачиваний:
42
Добавлен:
15.02.2015
Размер:
1.01 Mб
Скачать

Програма виведення монохромного зображення дворядковим методом.

model

small

;модель пам'яті, що використовує програма ехе

dataseg

stack

256

;розмір стеку

 

 

 

 

 

 

;початок сегменту даних

 

 

 

Line1•••••db"••ЫЬЬЬ",0dh,0ah,'$';0dh – команда повернення

 

;каретки

 

 

 

 

 

 

 

 

Line2•••••db"•ЫЫЫЫЫЫЫЬ",0dh,0ah,'$'

 

 

 

 

Line3•••••db"•ЫЬЫЯЫЫЫЫЬ",0dh,0ah,'$'

 

 

 

 

Line4•••••db"•ЫЫЫ•ЫЫЫЫЫЬЬЬЬЬЬЬЬ",0dh,0ah,'$'

 

 

 

 

Line5•••••db"•••••ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЯЫЫЬ",0dh,0ah,'$'

 

 

-

Line6•••••db"•••••ЫЫЫЫЫЫЫЫЫЫЫЫЫЫ••ЯЫЫ",0dh,0ah,'$'••; 0ah

;команда переведення каретки

 

 

 

 

 

 

Line7•••••db"••••••ЫЫЫЫЫЫЫЫЫЫЫЫЫЬЬ•ЫЫ",0dh,0ah,'$'

 

 

 

Line8•••••db"••••••ЫЫЫЯ•••••ЯЯЫЫЫЫ•ЯЯ",0dh,0ah,'$'

 

 

 

Line9•••••db"••••ЬЫЫЯ•••••••••••ЫЫЫ",0dh,0ah,'$'

 

 

 

Line10•••db"ЬЬ••ЫЫЯ•••••••••••••ЫЫ•ЬЬ",0dh,0ah,'$'

 

 

 

Line11•••db"ЫЫЫЫЫЯ•••••••••••ЫЫЫЫЫ",0dh,0ah,'$'

 

 

 

Line12•••db"••ЯЯЫЫЫЫЫЬЬЬЬЬЬЬЫЫЫЫЫЯЯ",0dh,0ah,'$' ;кінець

 

;сегменту даних

 

 

 

 

 

 

 

Line13•••db"••••••••ЯЯЯЯЯЯЯЯЯ",0dh,0ah,'$'

 

 

 

 

codeseg

 

 

;початок сегменту коду

 

 

start:

mov

ax,@data

;призначення

регістру

АХ

як

 

;регістру даних

ds,ax

;переміщення даних з АХ у DS

 

 

mov

 

 

mov

ah,9

;номер функції

DOS

виведення

;повідомлення

dx,offset Line1

;переміщення

даних

з

 

mov

;сегменту даних у регістр DX

 

;виклик переривання DOS

 

 

int

21h

 

 

 

mov

ah,9

 

 

 

 

 

 

 

mov

dx,offset Line2

 

 

 

 

 

 

int

21h

 

 

 

 

 

 

 

mov

ah,9

 

 

 

 

 

 

 

mov

dx,offset Line3

 

 

 

 

 

 

int

21h

 

 

 

 

 

 

 

mov

ah,9

 

 

 

 

 

 

 

mov

dx,offset Line4

 

 

 

 

 

 

int

21h

 

 

 

 

 

 

 

mov

ah,9

 

 

 

 

 

 

 

mov

dx,offset Line5

 

 

 

 

 

 

int

21h

 

 

 

 

 

 

 

mov

ah,9

 

 

 

 

 

 

 

mov

dx,offset Line6

 

 

 

 

 

 

int

21h

 

 

 

 

 

 

 

mov

ah,9

 

 

 

 

 

 

 

mov

dx,offset Line7

 

 

 

 

 

 

int

21h

 

 

 

 

 

 

 

mov

ah,9

 

 

 

 

 

 

 

mov

dx,offset Line8

 

 

 

 

 

 

int

21h

 

 

 

 

 

 

 

mov

ah,9

 

 

 

 

 

 

31

mov

dx,offset Line9

 

int

21h

 

mov

ah,9

 

mov

dx,offset Line10

 

int

21h

 

mov

ah,9

 

mov

dx,offset Line11

 

int

21h

 

mov

ah,9

 

mov

dx,offset Line12

 

int

21h

 

mov

ah,9

 

mov

dx,offset Line13

 

int

21h

;вихід з програми

mov

ah,4ch

int

21h

;завершення програми

end start

 

А тепер поглянемо, як змінюється розмір файлу у цих двох випадках. Виконавши компіляцію обох початкових модулів, як показано на

рисунку 4.5, ми побачимо, що порядкове виведення малюнків займає менше місця на диску. Файл strok.asm є порядковим, а dvostr – дворядковим:

Рисунок 4.5 Порівняння розмірів файлів початкових модулів. Пропонуємо спробувати спосіб скорочення тексту програми. Замість

того, щоб використовувати багато змінних, можна однією командою вивести зображення одразу. Ось модифікований текст програми, створеної студентом 411-ОКС-04 групи Яворським Володимиром, який застосовує всього одну змінну.

.model small

;модель пам'яті що використовує програма ехе

stack

256

;розмір стеку

32

.data

equ

00Dh

;початок сегмету

д

CR

;

код

повернення

каретки

LF

equ

00Ah

;

код

переведення каретки

BegMsg

db

CR,LF,LF

 

;каретки

db'

ЫЬЬЬ',

CR,CR,LF ;0dh - команда повернення

db' ЫЫЫЫЫЫЫЬ', CR,CR,LF

 

 

 

 

db' ЫЬЫЯЫЫЫЫЬ', CR,CR,LF

 

 

db' ЫЫЫ ЫЫЫЫЫЬЬЬЬЬЬЬЬ', CR,CR,LF

 

 

db'

ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЯЫЫЬ', CR,CR,LF

;0ah -

 

db'

ЫЫЫЫЫЫЫЫЫЫЫЫЫЫ ЯЫЫ', CR,CR,LF

;команда переведення каретки

 

 

 

db'

ЫЫЫЫЫЫЫЫЫЫЫЫЫЬЬ ЫЫ', CR,CR,LF

 

 

db'

ЫЫЫЯ

ЯЯЫЫЫЫ ЯЯ', CR,CR,LF

 

 

db'

ЬЫЫЯ

ЫЫЫ', CR,CR,LF

 

 

db'ЬЬ

ЫЫЯ

ЫЫ ЬЬ', CR,CR,LF

 

 

db'ЫЫЫЫЫЯ

ЫЫЫЫЫ', CR,CR,LF

;кінець

 

db'

ЯЯЫЫЫЫЫЬЬЬЬЬЬЬЫЫЫЫЫЯЯ', CR,CR,LF

;сегменту даних

db' ЯЯЯЯЯЯЯЯЯ', CR,LF,'$'

.code ;початок сегмету коду

.startup

lea

dx,BegMsg

;

Адреса стартового

;повідомлення в DX

ah,09 ;

Функція 09h

– виведення рядка

mov

int

21h

; Виклик Dos

 

mov

ah,4ch

;вихід з програми

int

21h

;завершення програми

end

 

33

Практична робота № 5

Тема: Створення псевдографіки. Кольорові зображення.

Мета роботи: Навчитися створювати псевдографічні малюнки у текстовому режимі за допомогою виведення на екран повідомлень з заданими атрибутами тексту.

Теоретична частина

Для створення кольорових зображень, можна використовувати два способи:

а) порядкове виведення; б) дворядкове виведення;

На відміну від монохромних зображень порядкове виведення застосовується тоді, коли потрібно скоротити розмір виконуваного фалу або ж листингу, а дворядкове виведення займає набагато більше часу на розробку та створення листингу не говорячи вже про його розміри. У кольорових зображеннях з використанням дворядкового методу застосовується кодування кольору фону та кольору самого символу, що ускладнює написання сегменту даних та займає багато часу, тому ми розглянемо тільки порядкове виведення.

Приведений далі листинг виводить кольорове зображення. Для виводу на екран повідомлення застосовується функція DOS – вивід рядка на екран. Вона викликається за допомогою переміщення числа 9 у регістр AH. Введіть листинг за допомогою будь якого текстового редактора, наприклад Блокнот чи

RullNote.

model small stack 256

dataseg

db"••••••••ЫЫЫЫЫ",0dh,0ah,'$'

Line1

Line2

db"•••••••ЫЫЫЫЫЫЫ",0dh,0ah,'$'

Line3

db"••••••ЫЫЫЫЫЫЫЫЫ",0dh,0ah,'$'

Line4

db"•••••ЫЫЫЫЫЫЫ••ЫЫ",0dh,0ah,'$'

Line5

db"••••ЫЫЫЫЫЫЫЫ•••ЫЫ",0dh,0ah,'$'

Line6

db"•••ЫЫЫЫЫЫЫЫЫЫ•••ЫЫ",0dh,0ah,'$'

Line7

db"••ЫЫЫЫЫЫЫЫЫЫЫЫ•••ЫЫ",0dh,0ah,'$'

Line8

db"•ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ",0dh,0ah,'$'

Line9

db"•Ы•••••••ЫЫЫ",0dh,0ah,'$'

Line10

db"•Ы••••••",'$'

Line11

db"ЫЫЫЫЫ",0dh,0ah,'$'

Line12

db"ЫЫЫ••••",'$'

Line13

db"ЫЫЫЫЫЫЫ",0dh,0ah,'$'

Line14

db"•Ы••••",'$'

Line15

db"ЫЫЫЫЫЫЫЫЫ",0dh,0ah,'$'

Line16

db"•••••ЫЫЫЫЫЫЫЫЫЫЫ",0dh,0ah,'$'

Line17

db"•••••Ы•ЫЫЫ•ЫЫЫ•Ы",0dh,0ah,'$'

Line18

db"•••••ЫЫЫ•ЫЫЫ•ЫЫЫ",0dh,0ah,'$'

Line19

db"•••••ЫЫЫЫЫЫЫЫЫЫЫ",0dh,0ah,'$'

Line20

db"••••••ЫЫЫЫЫЫЫЫЫ",0dh,0ah,'$'

34

Line21

db"•••••••ЫЫЫЫЫЫЫ",0dh,0ah,'$'

Line22

db"••••••••ЫЫЫЫЫ",0dh,0ah,'$'

Line23

db"•••••••••ЫЫЫ",0dh,0ah,'$'

Line24

db"••••••••••Ы",0dh,0ah,'$'

Line25

db"••••••••••Ы",0dh,0ah,'$'

Line26

db"••••••••••Ы",0dh,0ah,'$'

Line27

db"•••••••ЫЫЫЫЫЫЫ",0dh,0ah,'$'

codeseg

 

start:

 

mov

ax,@data

mov

ah,9

dx,offset Line5

 

mov

ds,ax

 

mov

 

mov

ah,9

 

int

21h

 

 

mov

ah,9

 

mov

bl,00000100b

 

 

mov

cx,0dh

 

mov

bl,00000100b

 

int

10h

 

mov

cx,12h

 

mov

ah,9

 

int

10h

 

 

mov

ah,9

 

mov

dx,offset Line1

 

 

int

21h

 

mov

dx,offset Line6

 

mov

ah,9

 

int

21h

 

 

mov

ah,9

 

mov

bl,00000100b

 

 

mov

cx,0eh

 

mov

bl,00000100b

 

int

10h

 

mov

cx,13h

 

mov

ah,9

 

int

10h

 

 

mov

ah,9

 

mov

dx,offset Line2

 

 

int

21h

 

mov

dx,offset Line7

 

mov

ah,9

 

int

21h

 

 

mov

ah,9

 

mov

bl,00000100b

 

 

mov

cx,0fh

 

mov

bl,00000100b

 

int

10h

 

mov

cx,14h

 

mov

ah,9

 

int

10h

 

 

mov

ah,9

 

mov

dx,offset Line3

 

 

int

21h

 

mov

dx,offset Line8

 

mov

ah,9

 

int

21h

 

 

mov

ah,9

 

mov

bl,00000100b

 

 

mov

cx,10h

 

mov

bl,00000100b

 

int

10h

 

mov

cx,14h

 

mov

ah,9

 

int

10h

 

 

mov

ah,9

 

mov

dx,offset Line4

 

 

int

21h

 

mov

dx,offset Line8

 

mov

ah,9

 

int

21h

 

 

mov

ah,9

 

mov

bl,00000100b

 

 

mov

cx,11h

 

mov

bl,00000101bmov

 

int

10h

bl,00001101b

 

35

mov

cx,0ch

10h

 

mov

cx,09h

 

int

 

int

10h

 

mov

ah,9

 

mov

ah,9

 

mov

dx,offset Line9

 

mov

dx,offset Line15

 

int

21h

 

int

21h

 

mov

ah,9

 

mov

ah,9

 

mov

bl,00000101b

 

mov

bl,00001101b

 

mov

cx,04h

 

mov

cx,10h

 

int

10h

 

int

10h

 

mov

ah,9

 

mov

ah,9

 

mov

dx,offset Line10

 

mov

dx,offset Line16

 

int

21h

 

int

21h

 

mov

ah,9

 

mov

ah,9

 

mov

bl,00001101b

 

mov

bl,00001101b

 

mov

cx,05h

 

mov

cx,10h

 

int

10h

 

int

10h

 

mov

ah,9

 

mov

ah,9

 

mov

dx,offset Line11

 

mov

dx,offset Line17

 

int

21h

 

int

21h

 

mov

ah,9

 

mov

ah,9

 

mov

bl,00000101b

 

mov

bl,00001101b

 

mov

cx,06h

 

mov

cx,10h

 

int

10h

 

int

10h

 

mov

ah,9

 

mov

ah,9

 

mov

dx,offset Line12

 

mov

dx,offset Line18

 

int

21h

 

int

21h

 

mov

ah,9

 

mov

ah,9

 

mov

bl,00001101b

 

mov

bl,00001101b

 

mov

cx,07h

 

mov

cx,10h

 

int

10h

 

int

10h

 

mov

ah,9

 

mov

ah,9

 

mov

dx,offset Line13

 

mov

dx,offset Line19

 

int

21h

 

int

21h

 

mov

ah,9

 

mov

ah,9

 

mov

bl,00000101b

 

mov

bl,00001101b

 

mov

cx,08h

 

mov

cx,0fh

 

int

10h

 

int

10h

 

mov

ah,9

 

mov

ah,9

 

mov

dx,offset Line14

mov

mov

dx,offset Line20

 

int

21h

ah,9

dx,offset Line24

 

mov

ah,9

 

mov

 

 

int

21h

36

int 21h

mov

ah,9

mov

ah,9

mov

bl,00000101b

mov

bl,00001101b

mov

cx,0bh

mov

cx,0eh

int

10h

int

10h

mov

ah,9

mov

ah,9

mov

dx,offset Line25

mov

dx,offset Line21

int

21h

int

21h

mov

ah,9

mov

ah,9

mov

bl,00000101b

mov

bl,00001101b

mov

cx,0bh

mov

cx,0dh

int

10h

int

10h

mov

ah,9

mov

ah,9

mov

dx,offset Line26

mov

dx,offset Line22

int

21h

int

21h

mov

ah,9

mov

ah,9

mov

bl,00000101b

mov

bl,00001101b

mov

cx,0eh

mov

cx,0ch

int

10h

int

10h

mov

ah,9

mov

ah,9

mov

dx,offset Line27

mov

dx,offset Line23

int

21h

int

21h

mov

ah,4ch

mov

ah,9

int

21h

mov

bl,00000101b

end start.

 

mov

cx,0bh

 

 

int

10h

 

 

Створіть початковий текст програми та збережіть його у папці c:\tasm\bin під ім’ям PictCol.asm. Після отримання початкового модуля, його потрібно скомпілювати, для цього викличте командний рядок з меню Пуск, або за допомогою ярлику на робочому столі, та введіть таку команду: tasm PictCol.asm. Після цього, якщо на екрані з’явилося повідомлення про успішне компілювання, введіть наступну команду: tlink /x /t PictCol.obj. Запустіть скомпільовану програму на виконання за допомогою команди PictCol.com. При правильному виконанні команд на екрані з’явиться кольорове зображення.

Розглянемо атрибути повідомлення. У регістр BL поміщується код кольору символу та його атрибути. Перші три біти (0-2) задають колір символу, біт номер 3 задає яскравість. Наступні три біти (4-6) відповідають за колір фону символу. І, нарешті, останній біт (7) дозволяє символу мерехтіти. У даному тексті програми наочно показано як задаються атрибути символів, для наочності задання атрибуту виконано у бінарній системі числення. Також

37

можна задавати ці ж атрибути у гексакодах. У таблиці 5.1 наведено коди кольорів, які використовуються для задання атрибутів символів.

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

Таблиця № 5.1 Кольори атрибутів символів.

 

 

 

Біти

 

 

 

Значення

 

 

27

26

25

24

23

22

21

20

 

 

 

 

0

0

0

0

0

0

0

0

Чорний

 

 

 

 

 

 

 

0

0

0

1

Синій

 

 

 

 

 

 

 

0

0

1

0

Зелений

 

 

 

 

 

 

 

0

0

1

1

Блакитний

 

 

 

 

 

 

 

0

1

0

0

Червоний

 

 

 

 

 

 

 

0

1

0

1

Пурпурний

 

 

 

 

 

 

 

0

1

1

0

Коричневий

 

 

 

 

 

 

0

1

1

1

Світло-сірий

 

 

 

 

 

 

1

0

0

0

Темно-сірий

 

 

 

 

 

 

1

0

0

1

Світло-синій

 

 

 

 

 

 

1

0

1

0

Ясно-зелений

 

 

 

 

 

 

1

0

1

1

Ясно-блакитний

 

 

 

 

 

 

1

1

0

0

Світло-червоний

 

 

 

 

 

 

1

1

0

1

Ясно-пурпурний

 

 

 

 

 

 

1

1

1

0

Жовтий

 

 

 

 

 

 

 

1

1

1

1

Білий

 

 

 

Мерехтіння

 

фонуКолір

 

Яскравість

 

Колір символу

 

Примітка:

Коди

кольорів

 

 

 

 

символів

збігаються

з

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

кодами

кольорів

 

фону

 

 

 

 

 

 

 

 

символів. Тому у таблиці

 

 

 

 

 

 

 

 

показані

тільки

 

коди

 

 

 

 

 

 

 

 

кольорів.

 

 

 

 

 

 

 

 

 

 

 

Атрибути символів

 

 

 

 

 

 

 

 

 

 

Атрибути фону

 

 

38

Контрольні питання:

1.Які методи кодування кольорових зображень ви знаєте?

2.Чим відрізняються методи кодування кольорових зображень від монохромних?

3.Що дає змогу символу мерехтіти на екрані монітора?

4.Яку функцію має регістр BL у MS DOS?

5.Яку функцію виконує регістр СХ у MS DOS?

Індивідуальні завдання:

1. За власним варіантом створіть програму, яка виводитиме кольорове зображення на екран. Студенти, номери варіантів яких парні, створюють програму типу СОМ, а студенти, що мають непарні варіанти - типу ЕХЕ. Варіанти завдань приведені у таблиці 5.2. Приклад виконання індивідуального завдання наведено у Додатку 5.1.

39

Таблиця 5.2 Варіанти кольорових зображень.

 

 

 

 

1

2

3

4

 

 

 

 

5

6

7

8

 

 

 

 

9

10

11

12

 

 

 

 

13

14

15

16

40