Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 7
з курсу „ Системне програмування ”
Тема: Управлiння вiдеосистемою IBM PC.
Екраннi операцiї – основнi та розширенi властивостi, колiр та графiка.
Львів – 2004
Мета роботи: Вивчення органiзацiї вiдеосистеми IBM PC. Оволодiння навичками роботи з екранними операцiями – основними та розширеними властивостивостями, кольором та графiкою.
Короткі теоретичні відомості
Відеорежим визначає, чи на екран виводиться текст чи графіка, в кольорі чи в монохромному режимі і з якою кількістю кольорів. Текстовий режим використовується для виводу символів таблиці ASCII.
В текстовому режимі байт атрибутів визначає властивості кожного символу, що виводиться. Коли програма встановлює атрибут, він залишається у встановленому стані до наступної явної зміни атрибутів. Тому всі подальші символи після того, для якого встановлений атрибут, будуть мати такі ж атрибути.
Байт атрибутів має наступну структуру:
Фон
Символ
BL(блимання)
R
G
B
I(інтенсивність)
R
G
B
7
6
5
4
3
2
1
0
Блимання та інтенсивність (яскравість) відносяться тільки до символу.
Обробник переривання INT 10H виконує багато функцій, що застосовуються для роботи з дисплеєм: установка відео режиму (00Н), установка положення курсору (02Н), прокрутка екрану вверх (06Н), прокрутка екрану вниз (07Н), вивід символу в положення курсору (0АН), отримати поточний відео режим (0FН), вивід рядка символів (13Н), намалювати піксель (0CН).
Завдання на лабораторну роботу
Створити програму, що реалiзує вказаний викладачем варiант завдання.
В якостi генератора вихiдних даних необхiдно використати програму, що була написана в ходi виконання лабораторної роботи №4.
Варіант 9.
Визначити тип мікропроцесора і тип ПЕОМ; перевірити, чи акумулятор функціонує нормально. Оформити програму у вигляді “вікна”.
Вміст .asm-файлу
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
ProcMsg db 10,13,10,13,10,13,10,13,' ║ Type of microprocessor: $'
P1Msg db '8086.$'
P2Msg db '80286.$'
P3Msg db '80386 or later.$'
PCMsg db 10,13,10,13,' ║ Type of computer: $'
ATMsg db 'AT.',10,13,10,13,'$'
nonATMsg db 'non - AT.',10,13,10,13,'$'
AcumOKMsg db ' ║ Acumulator is charged and working properly.$'
AcumBadMsg db ' ║ Acumulator is not working properly!$'
Header db '╔═════════════════════════════════════════════════════════╗',13,10
Middle db '║ ║',13,10
Footer db '╚.═.[. .в.и.к.о.н.а.в. . .С+о/р/о/к/е/в/и/ч/ /М+а/к/с/и/м/ /'
db 'I+г/о/р/о/в/и/ч/ . . . . .m*A*x*4.0.v.4.k*i*3*4* . . .].═.╝.'
LineFeed db 13,10,13,10,13,10,13,10,'$'
.CODE
begin:
push ds
sub ax,ax
push ax
mov ax,@data
mov ds,ax
mov ah,0 ;═╗
mov al,3 ; ║Set video mode
int 10h ;═╝
;************************************************************ Print window header
mov bp,OFFSET Header
mov ax,SEG Header
mov es,ax
mov ch,16
mov al,02h ;background
mul ch
mov bl,al
add bl,0eh ;foreground(symbols)
mov bh,0
mov dh,2 ;row
mov dl,10 ;column
mov cx,62
mov al,0
mov ah,13h ;BIOS write string function
int 10h ;print window header
;************************************************************ Print window middle
mov dh,2 ;row
mov bh,0
mov dl,10 ;column
mov cx,62
mov bp,OFFSET Middle
mov al,0
mov ah,13h ;BIOS write string function
win: inc dh
int 10h ;print window middle
cmp dh,9 ; is row 9 (last) printed ?
jl win
mov dh,5 ;row
int 10h ;print window middle
;************************************************************ Print window footer
mov bh,0
mov dh,10 ;row
mov dl,10 ;column
mov cx,62
mov bp,OFFSET Footer
mov al,2
mov ah,13h ;BIOS write string function
int 10h ;print window footer
;-----Detection of microprocessor type
mov dx,OFFSET ProcMsg
mov ah,09
int 21h
mov ax,0000
push ax
popf
pushf
mov ax,0000
pop ...