Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 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 ax
CMP ax,0F000h
JZ i8086
JMP else1
i8086:
mov dx,OFFSET P1Msg
else1:
mov ax,0F000h
push ax
popf
pushf
mov ax,0000
pop ax
CMP ax,0000
JZ i80286
mov dx,OFFSET P3Msg
JMP print1
i80286:
mov dx,OFFSET P2Msg
print1:
mov ah,09
int 21h
;-----Detection of PC type
mov dx,OFFSET PCMsg
mov ah,09
int 21h
MOV ax,0F000h
MOV ds,ax
MOV bx,0FFFEh
MOV dl,[bx]
mov ax,@data
mov ds,ax
CMP dl,0FCh
JZ isAT
mov dx,OFFSET nonATMsg
JMP print2
isAT: mov dx,OFFSET ATMsg
print2: mov ah,09
int 21h
;-----Acumulator check
mov al,0Eh
OUT 70h,al
nop
IN al,71h
nop
AND al,80h
CMP al,80h
JZ Bad
mov dx,OFFSET AcumOKMsg
JMP print3
Bad: mov dx,OFFSET AcumBadMsg
print3: mov ah,09
int 21h
;-----EXIT
mov dx,OFFSET LineFeed
mov ah,09
int 21h
mov ah,4Ch
int 21h
END begin
Результат виконання програми
╔══════════════════════════════════════════════════════════╗
║ ║
║ Type of microprocessor: 80386 or later. ║
║ ║
║ Type of computer: AT. ║
║ ║
║ Acumulator is charged and working properly. ║
║ ║
╚═[ виконав Сорокевич Максим Iгорович mAx40v4ki34 ]═╝
Висновок: Виконуючи дану лабораторну роботу, я вивчив органiзацiю вiдеосистеми IBM PC, оволодiв навичками роботи з екранними операцiями – основними та розширеними властивостивостями, кольором та графiкою.