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

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

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

Додаток 5.1. Приклад виконання індивідуального завдання.

На прикладі цієї програми розглянемо основні моменти створення подібних програм. На першому етапі створюємо малюнок, з урахуванням необхідної кількості пробілів і символів, які складають малюнок. На другому етапі задаємо атрибути рядкам,які виводяться, як показано на рисунку 5.1

Зелений

синій жовтий синій жовтий синій

 

Рисунок 5.1 Рядок кольорового малюнка.

Перший етап:

H42

DB"

ЫЫЫЫЫЫЫ ",'$'

H43

DB"ЫЫ",'$'

H44

DB"ЫЫЫ",'$'

H45

DB"ЫЫЫ",'$'

H46

DB"ЫЫЫ",'$'

H47

DB"ЫЫ",0DH,0AH,'$'

Всі шість рядків виводять один рядок в програмі. У шостому рядку 0DH,0AH відповідає за перехід на інший рядок.

Другий етап: задаємо атрибути рядкам:

MOV AH,9

;

задаємо зелений колір рядку Н42

MOV BL,00000010B

MOV

CX,0CH

;

задаємо кількість символів (з

;урахуванням пробілів), які

будуть зафарбовані даним кольором

INT

10H

 

 

MOV AH,9

MOV DX,OFFSET H42 ; виводимо рядок Н42

INT 21H

MOV AH,9

; задаємо синій колір рядку

Н43

MOV BL,00000001B

MOV

CX,02H

; задаємо кількість зафарбованих

символів

INT

10H

 

 

MOV AH,9

MOV DX,OFFSET H43 ; виводимо рядок Н43

INT 21H

MOV AH,9

; задаємо жовтий колір рядку Н44

MOV BL,00001110B

MOV CX,03H

; задаємо кількість зафарбованих символів

INT 10H

 

MOV AH,9

; виводимо рядок Н44

MOV DX,OFFSET H44

41

INT 21H

 

MOV AH,9

; задаємо синій колір рядку Н45

MOV BL,00000001B

MOV CX,03H

; задаємо кількість зафарбованих символів

INT 10H

 

MOV AH,9

; виводимо рядок Н45

MOV DX,OFFSET H4

INT 21H

 

MOV AH,9

; задаємо жовтий колір рядку Н46

MOV BL,00001110B

MOV CX,03H

; задаємо кількість зафарбованих символів

INT 10H

 

MOV AH,9

MOV DX,OFFSET H46 ; виводимо рядок Н46

INT 21H

MOV AH,9

; задаємо синій колір рядку Н47

MOV BL,00000001B

MOV

CX,02H

; задаємо кількість зафарбованих символів

INT

10H

 

MOV AH,9

MOV DX,OFFSET H47 ; виводимо рядок Н47

INT 21H

Рисунок 5.2 Результат роботи програми DOM. Програма виведення кольорового зображення DOM.asm (Рис. 5.2). Крапками вказана кількість пробілів.

model small stack 256 dataseg

42

H1 DB"•ЫЫЫЫЫЫЫЫЫЫЫЫЫЫ•••••••••••",0DH,0AH,'$'

H2 DB"••••ЫЫЫЫЫЫЫЫЫЫЫЫЫ••••••••••",0DH,0AH,'$'

H3 DB"•••••••ЫЫЫЫЫЫЫЫЫЫЫ",'$'

H4 DB"•••Ы•••••••",0DH,0AH,'$'

H5 DB"••••••••••••••••••••ЫЫЫ••••••",0DH,0AH,'$'

H6 DB"••••••••••••••••ЫЫ•",'$'

H7 DB"ЫЫЫЫЫ•••••",0DH,0AH,'$'

H8 DB"••••••••Ы•••••••",'$'

H9 DB"ЫЫ",'$'

H10 DB"ЫЫЫЫЫЫЫ••••",0DH,0AH,'$'

H11 DB"••••••••Ы•••••••",'$'

H12 DB"Ы",'$'

H13 DB"ЫЫЫЫ",'$'

H14 DB"Ы",'$'

H15 DB"ЫЫЫЫ••••",0DH,0AH,'$'

H16 DB"•••••••ЫЫЫ••••••",'$'

H17 DB"ЫЫЫЫ",'$'

H18 DB"ЫЫЫ",'$'

H19 DB"ЫЫЫЫ••",0DH,0AH,'$'

H20 DB"••••••ЫЫЫЫЫ••••",'$'

H21 DB"ЫЫЫЫЫ",'$'

H22 DB"ЫЫЫ",'$'

H23 DB"ЫЫЫЫЫ•",0DH,0AH,'$'

H24 DB"•••••••ЫЫЫ••••",'$'

H25 DB"ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ",0DH,0AH,'$'

H26 DB"••••••ЫЫЫЫЫ••••",'$'

H27 DB"ЫЫЫЫЫЫЫЫЫЫЫЫЫ",0DH,0AH,'$'

H28 DB"•••••ЫЫЫЫЫЫЫ•••",'$'

H29 DB"ЫЫЫЫЫЫЫЫЫЫЫЫЫ",0DH,0AH,'$'

H30 DB"•••••••ЫЫЫ•••••",'$'

H31 DB"ЫЫ",'$'

H32 DB"ЫЫЫ",'$'

H33 DB"ЫЫЫ",'$'

H34 DB"ЫЫЫ",'$'

H35 DB"ЫЫ",0DH,0AH,'$'

H36 DB"••••••ЫЫЫЫЫ••••",'$'

H37 DB"ЫЫ",'$'

H38 DB"ЫЫЫ",'$'

H39 DB"ЫЫЫ",'$'

H40 DB"ЫЫЫ",'$'

H41 DB"ЫЫ",0DH,0AH,'$'

H42 DB"•••••ЫЫЫЫЫЫЫ•••",'$'

H43 DB"ЫЫ",'$'

H44 DB"ЫЫЫ",'$'

H45 DB"ЫЫЫ",'$'

H46 DB"ЫЫЫ",'$'

H47 DB"ЫЫ",0DH,0AH,'$'

H48 DB"••••ЫЫЫЫЫЫЫЫЫ••",'$'

H49 DB"ЫЫ",'$'

H50 DB"ЫЫЫ",'$'

H51 DB"ЫЫЫ",'$'

H52 DB"ЫЫЫ",'$'

H53 DB"ЫЫ",0DH,0AH,'$'

43

H54 DB"••••••ЫЫЫЫЫ••••",'$'

H55 DB"ЫЫЫЫЫЫЫЫЫЫЫЫЫ",0DH,0AH,'$'

H56 DB"•••••ЫЫЫ",'$'

H57 DB"Ы",'$'

H58 DB"ЫЫЫ•••",'$'

H59 DB"ЫЫЫЫЫЫЫЫЫЫЫЫЫ",0DH,0AH,'$'

H60 DB"••••••••Ы••••••",'$'

H61 DB"ЫЫЫЫЫЫЫЫЫЫЫЫЫ",0DH,0AH,'$'

H62 DB"••••••••Ы••••••",'$'

H63 DB"ЫЫЫЫЫЫЫЫЫЫЫЫЫ",0DH,0AH,'$' CODESEG

START:

MOV AX,@DATA

MOV DS,AX

MOV AH,9

MOV BL,00000111B MOV CX,0fh

INT 10H

MOV AH,9

MOV DX,OFFSET H1

INT 21H

MOV DX,OFFSET H2

INT 21H

MOV DX,OFFSET H3

INT 21H

MOV AH,9

MOV BL,00000110B

MOV CX,04H

INT 10H

MOV AH,9

MOV DX,OFFSET H4

INT 21H

MOV AH,9

MOV BL,00000110B

MOV CX,1dH

INT 10H

MOV AH,9

MOV DX,OFFSET H5

INT 21H

44

MOV AH,9

INT 21H

MOV BL,00000100B

MOV AH,9

MOV CX,1dH

INT 10H

MOV BL,00000100B

MOV AH,9

MOV CX,01H

INT 10H

MOV DX,OFFSET H6

MOV AH,9

INT 21H

MOV AH,9

MOV DX,OFFSET H12

INT 21H

MOV BL,00000110B

MOV AH,9

MOV CX,05H

INT 10H

MOV BL,00000110B

MOV AH,9

MOV CX,04H

INT 10H

MOV DX,OFFSET H7

MOV AH,9

INT 21H

MOV AH,9

MOV DX,OFFSET H13

INT 21H

MOV BL,00000010B

MOV AH,9

MOV CX,0DH

INT 10H

MOV BL,00001110B

MOV AH,9

MOV CX,01H

INT 10H

MOV DX,OFFSET H8

MOV AH,9

INT 21H

MOV AH,9

MOV DX,OFFSET H14

INT 21H

MOV BL,00000100B

MOV AH,9

MOV CX,0DH

INT 10H

MOV BL,00000110B

MOV AH,9

MOV CX,04H

INT 10H

MOV DX,OFFSET H9

MOV AH,9

INT 21H

MOV AH,9

MOV DX,OFFSET H15

INT 21H

MOV BL,00000110B

MOV AH,9

MOV CX,08H

INT 10H

MOV BL,00000010B

MOV AH,9

MOV CX,06H

INT 10H

MOV DX,OFFSET H10

MOV AH,9

INT 21H

MOV AH,9

MOV DX,OFFSET H16

INT 21H

MOV BL,00000010B

MOV AH,9

MOV CX,07H

INT 10H

MOV BL,00000110B

MOV AH,9

MOV CX,04H

INT 10H

MOV DX,OFFSET H11

 

45

MOV AH,9

MOV AH,9

MOV DX,OFFSET H17

MOV DX,OFFSET H23

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00001110B

MOV BL,00000010B

MOV CX,03H

MOV CX,06H

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H18

MOV DX,OFFSET H24

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000110B

MOV BL,00000110B

MOV CX,04H

MOV CX,0fH

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H19

MOV DX,OFFSET H25

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000010B

MOV BL,00000010B

MOV CX,05H

MOV CX,0BH

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H20

MOV DX,OFFSET H26

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000110B

MOV BL,00000001B

MOV CX,05H

MOV CX,0DH

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H21

MOV DX,OFFSET H27

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00001110B

MOV BL,00000010B

MOV CX,03H

MOV CX,0DH

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H22

MOV DX,OFFSET H28

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000110B

MOV BL,00000001B

MOV CX,05H

MOV CX,0DH

INT 10H

INT 10H

46

MOV AH,9

INT 10H

MOV DX,OFFSET H29

MOV AH,9

INT 21H

MOV DX,OFFSET H35

MOV AH,9

INT 21H

MOV AH,9

MOV BL,00000010B

MOV CX,0AH

MOV BL,00000010B

INT 10H

MOV CX,0BH

MOV AH,9

INT 10H

MOV AH,9

MOV DX,OFFSET H30

INT 21H

MOV DX,OFFSET H36

MOV AH,9

INT 21H

MOV AH,9

MOV BL,00000001B

MOV CX,02H

MOV BL,00000001B

INT 10H

MOV CX,02H

MOV AH,9

INT 10H

MOV AH,9

MOV DX,OFFSET H31

INT 21H

MOV DX,OFFSET H37

MOV AH,9

INT 21H

MOV AH,9

MOV BL,00001110B

MOV CX,03H

MOV BL,00001110B

INT 10H

MOV CX,03H

MOV AH,9

INT 10H

MOV AH,9

MOV DX,OFFSET H32

INT 21H

MOV DX,OFFSET H38

MOV AH,9

INT 21H

MOV AH,9

MOV BL,00000001B

MOV CX,03H

MOV BL,00000001B

INT 10H

MOV CX,03H

MOV AH,9

INT 10H

MOV AH,9

MOV DX,OFFSET H33

INT 21H

MOV DX,OFFSET H39

MOV AH,9

INT 21H

MOV AH,9

MOV BL,00001110B

MOV CX,03H

MOV BL,00001110B

INT 10H

MOV CX,03H

MOV AH,9

INT 10H

MOV AH,9

MOV DX,OFFSET H34

INT 21H

MOV DX,OFFSET H40

MOV AH,9

INT 21H

MOV AH,9

MOV BL,00000001B

MOV CX,02H

MOV BL,00000001B

MOV CX,02H

MOV AH,9

47

MOV AH,9

MOV DX,OFFSET H47

MOV DX,OFFSET H41

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000010B

MOV BL,00000010B

MOV CX,0DH

MOV CX,0CH

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H48

MOV DX,OFFSET H42

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000001B

MOV BL,00000001B

MOV CX,02H

MOV CX,02H

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H49

MOV DX,OFFSET H43

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00001110B

MOV BL,00001110B

MOV CX,03H

MOV CX,03H

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H50

MOV DX,OFFSET H44

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000001B

MOV BL,00000001B

MOV CX,03H

MOV CX,03H

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H51

MOV DX,OFFSET H45

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00001110B

MOV BL,00001110B

MOV CX,03H

MOV CX,03H

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H52

MOV DX,OFFSET H46

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000001B

MOV BL,00000001B

MOV BL,00000001B

MOV CX,02H

MOV CX,0DH

INT 10H

INT 10H

48

MOV CX,02H

MOV AH,9

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H59

MOV DX,OFFSET H53

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000110B

MOV BL,00000010B

MOV CX,09H

MOV CX,0BH

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H60

MOV DX,OFFSET H54

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000001B

MOV BL,00000001B

MOV CX,0DH

MOV CX,0DH

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H61

MOV DX,OFFSET H55

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000110B

MOV BL,00000010B

MOV CX,09H

MOV CX,08H

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H62

MOV DX,OFFSET H56

INT 21H

INT 21H

MOV AH,9

MOV AH,9

MOV BL,00000001B

MOV BL,00000110B

MOV CX,0DH

MOV CX,01H

INT 10H

INT 10H

MOV AH,9

MOV AH,9

MOV DX,OFFSET H63

MOV DX,OFFSET H57

INT 21H

INT 21H

MOV AH,4CH

MOV AH,9

INT 21H

MOV BL,00000010B

END START

MOV CX,03H

 

INT 10H

 

MOV AH,9

 

MOV DX,OFFSET H58

 

INT 21H

 

49

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

Тема: Система команд. Команди переходів і організації циклів. Мета роботи: Вивчення команд переходів і організації циклів х86 і способів їх використання в асемблерних програмах для

реалізації галужень і циклічних обчислень.

Теоретичні відомості

Команди переходу забезпечують безумовні переходи усередині поточного кодового сегменту (внутрішній перехід) або з поточного сегменту в інший кодовий сегмент (зовнішній або міжсегментний перехід). Всі ці переходи реалізуються за допомогою команди JMP, яка має формат JMP [type] OPR; де type – тип переходу: SHORT (короткий), NEAR (ближній) або FAR (дальній), за умовчанням приймається NEAR; OPR – ім'я, мітки або адресний вираз. Залежно від типу переходу (type) і/або структури операнда OPR можна виділити 5 видів команд безумовного переходу, з яких три визначають внутрішньосегментні переходи, а дві – міжсегментні переходи.

JMP SHORT label ; короткий перехід в межах -128...+127 ; байт щодо адреси наступної команди

JMP [NEAR PTR] label; внутрішньосегментний прямий перехід ; по зсуву відносно мітки label

JMP [NEAR PTR] opr ; внутрішньосегментний непрямий перехід

;opr – регістр або слово в пам'яті, де міститься адреса переходу JMP [FAR PTR] label; міжсегментний прямий перехід за

;адресою (Seg: Offset) мітки label

JMP [FAR PTR] opr ;міжсегментний непрямий перехід за адресою ; (Seg: Offset), що записана в пам'яті, на яку указує операнд opr

Мітка label – це безпосередня мітка команди (ім'я із завершуючою двокрапкою) або мітка, визначена в кодовому сегменті за допомогою директиви LABEL. Операнд opr в командах непрямого переходу являє собою ім'я регістра, в якому міститься адреса переходу (тільки для внутрішніх переходів), або ім'я змінної, де записана адреса переходу (одне слово для внутрішньосегментного переходу або два слова для міжсегментного переходу), або ж адресний вираз, яким визначається адреса пам'яті, де зберігається адреса переходу. Слід особливо підкреслити, що у разі внутрішньосегментного прямого переходу в команді зберігається не пряма адреса переходу (Offset), а зсув (Displacement) в байтах від наступної після JMP команди до мітки переходу, який складається з поточним вмістом IP при виконанні команди JMP і тим самим робить вміст IP рівним цільовій адресі (Offset) переходу в поточному сегменті. Це дозволяє переміщати кодовий сегмент в пам'яті без корекції інформації про переходи. У разі прямих міжсегментних переходів в команді зберігається повна логічна адреса переходу (Seg: Offset), який повинен корегуватися при переміщеннях сегменту, в якому знаходиться точка переходу.

50