Практикум_СП
.pdfДодаток 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