- •Министерство образования и науки Украины
- •«Системное программирование и операционные системы»
- •Чепыгова а. В.
- •Аннотация
- •Содержание
- •Задание
- •Вариант № 2.25
- •Введение
- •Описание применения
- •Назначение программы
- •Структура программы
- •Входные и выходные данные
- •Алгоритм работы программы
- •Инсталляционная часть:
- •Резидентная часть:
- •Руководство пользователя
- •Список литературы
- •Текст программы
-
Список литературы
-
Абель Питер. Язык ассемблера для IBM PC и программирования.
М. Высшая школа.1992
-
Конспект лекций
-
Юров Виктор Иванович.Assembler. С-П. Питер.2000
-
Текст программы
CURSA4.ASM:
;Курсоой проект разработаный Чепыговой Ангелиной
include my.mac
code_seg SEGMENT PARA
assume cs:code_seg, ss:code_seg, ds:code_seg;
org 100h
begin: jmp install
;Резедентный данные
syst_1ch dw ?
syst_1ch_offs dw ?
indos_seg dw ?
indos_offs dw ?
my_count db 32
;Резедентный процедуры
sys_1ch proc far
;сохранение регистров
push ax
push bx
push cx
push dx
push sp
push bp
push di
push si
push ds
push es
push ss
push cs
pop ds
cmp my_count, 0
jne end_1
cli
CALL PROV
jc end_pop
mov si,0040h
mov es,si
mov bx,es:[1ch]
dec bx
dec bx
cmp bx,1eh
jge cont_
mov bx,3ch
cont_:
mov al,es:[bx+1]
cmp al,103
jne arr
jmp vygryzka
arr:
CALL CAPSLOCK
jnc end_pop
CALL COLOR
CALL SOUND
mov my_count, 32
jmp end_pop
vygryzka:
mov ax,251ch
mov dx,cs:syst_1ch
mov ds,dx
mov dx,cs:syst_1ch_offs
int 21h
push cs
pop es
mov ah,49h
int 21h
mov ah,49h
mov es,cs:[2ch]
int 21h
end_1:
dec my_count
end_pop:
pop ss
pop es
pop ds
pop si
pop di
pop bp
pop sp
pop dx
pop cx
pop bx
pop ax
iret
sys_1ch endp
;проверка флажка Indos+errormod
prov proc
push es
push bx
mov bx, indos_seg
mov es, bx
mov bx, indos_offs
cmp word ptr es:[bx], 0
jne _bad
pop bx
pop es
clc
ret
_bad:
pop bx
pop es
stc
ret
prov endp
;Проверка нажатиия CapsLock
CapsLock proc
mov ax, 40h
mov es, ax
mov al, es:[0017h]
and al, 01000000b
jz track1
STC
ret
track1:
CLC
ret
CapsLock endp
;изменение цвета фона через прямой доступ к видеопамяти
COLOR PROC
mov di, 0b800h
mov es, di
mov di, 0
mov ah, 10h
mov cx, 2000
label1:
add es:[di+1], ah
inc di
inc di
loop label1
ret
COLOR ENDP
;подача звукового сигнала
Sound proc
mov AL,10110110b
out 43h,al
mov ax,10000
out 42h,al
mov al,ah
out 42h,al
in al,61h
or al,03
out 61h,al
;продолжительность звукового сигнала
mov cx,60000
zvuk:
loop zvuk
;прекращение звукового сигнала
in al,61h
and al,11111100b
out 61h,al
ret
Sound endp
;ИНСТАЛЯЦИОННАЯ ЧАСТЬ
install:
push cs
pop ds
mov ax, 351ch
int 21h
mov cs:syst_1ch_offs, bx
mov cs:syst_1ch, es
mov ax, 251ch
lea dx, my_1ch
int 21h
;проверка пароля
call ClearScreen
vivod 5,5, MesPass
call Enter_Password
push DS
pop ES
lea di,m_pas
lea si,Password
mov cx,12
repe cmpsb
jz continue
jmp trak
continue:
mov ax, 40h
mov es, ax
mov al, es:[0017h]
and al, 01000000b
jz trak
mov ax, 40h
mov es, ax
mov al, es:[0017h]
and al, 00100000b
jz trak
mov ah,4eh
mov cx,0
lea dx,my_file
int 21h
jc trak
jmp ok_
ok_:
vivod 15,6,MesPassOk
mov ah,34h
int 21h ;es:bx
mov cs:indos_seg,es
dec bx
mov cs:indos_offs,bx
mov ax, 251ch
lea dx, sys_1ch
int 21h
lea dx, install
int 27h
trak:
vivod 15,6,MesPassError
mov ax, 251ch
mov dx, cs:syst_1ch
mov ds, dx
mov dx, cs:syst_1ch_offs
int 21h
int 20h
;Нерезедентный собственный обработчик 1ch
my_1ch proc far
push ax
push bx
push cx
push sp
push bp
push si
push di
push dx
push es
push ds
push ss
push cs
pop ds
cmp my_flag,1
je name_viv
mov SI,0b800h
mov ES,SI
mov SI,160-2*l_my_hai
mov DI, offset my_hai
mov CX,l_my_hai
mov AH,47h
metka1:
mov AL,[DI]
mov ES:[SI],AL
inc SI
mov ES:[SI],AH
inc SI
inc DI
loop metka1
dec count1
cmp count1,0
jne end_pop1
mov my_flag,1
mov count1,54
jmp end_pop1
name_viv:
mov SI,0b800h
mov ES,SI
mov SI,160-2*l_my_pus
mov DI, offset my_pus
mov CX,l_my_pus
mov AH,0h
metka3:
mov AL,[DI]
mov ES:[SI],AL
inc SI
mov ES:[SI],AH
inc SI
inc DI
loop metka3
mov SI,0b800h
mov ES,SI
mov SI,160-2*l_my_name
mov DI, offset my_name
mov CX,l_my_name
mov AH,74h
metka2:
mov AL,[DI]
mov ES:[SI],AL
inc SI
mov ES:[SI],AH
inc SI
inc DI
loop metka2
dec count
cmp count,0
jne end_pop1
mov my_flag,0
mov count,90
jmp end_pop1
end_pop1:
pop ss
pop ds
pop es
pop dx
pop di
pop si
pop bp
pop sp
pop cx
pop bx
pop ax
iret
my_1ch endp
ClearScreen PROC
mov AL,00
mov CH,00
mov CL,00
mov DH,24
mov DL,79
mov BH,7
mov AH,06h
int 10h
RET
ClearScreen ENDP
Enter_Password PROC
lea di,m_pas
mov Prom,di
add Prom,12
mov cx,12
begin_:
mov ah,08h
int 21h
cmp di,Prom
jz end_
mov [di],al
mwrite Star
inc di
loop begin_
end_:
ret
Enter_Password ENDP
;Нерезедентные данные
my_pus db ' '
l_my_pus=$-my_pus
my_name db ' Чепыгова Ангелина Влодимировна '
l_my_name=$-my_name
my_hai db ' Национальный аэрокосмический университет "ХАИ" '
l_my_hai=$-my_hai
count db 90
count1 db 54
my_flag db 1
MesPass db 'Введите пароль - $'
MesPassError db ' ВХОД НЕ РАЗРЕШЕН!!!!'
db '$'
MesPassOk db ' :-) ВХОД РАЗРЕШЕН :-)! '
db '$'
Password db '123456789987'
db '$'
m_pas db 12 dup (' ')
db '$'
Prom dw 0
Star db '*$'
my_file db 'a.txt'
lognum dw ?
code_seg ends
end begin
MY.MAC
; процедура вывода сообщения в заданном месте
vivod macro stb,str,mes
push ax
push dx
push bx
mov ah,02h
mov dh,str
mov dl,stb
mov bh,0
int 10h
mov ah,09h
lea dx,mes
int 21h
pop bx
pop dx
pop ax
endm
;процедура вывода сообщения в заданом месте
MGotoXY MACRO x,y
push ax
push dx
push bx
mov ah,02h
mov dh,y
mov dl,x
mov bh,0
int 10h
pop bx
pop dx
pop ax
ENDM
;процедура вывода сообщения на экран
MWrite MACRO mes
push ax
push dx
mov ah,09h
mov dx, offset mes
int 21h
pop dx
pop ax
ENDM
; процедура для перевода чисел и слов
moveascii Macro num,numascii
local lab0,lab1,lab2,lab5
push cx
push di
push ax
push dx
push si
mov cx,0004
lea di,numascii
mov al,20h
lab0:
mov [di],al
inc di
loop lab0
lea SI,numascii+3
mov AX,num
sub DX,DX
lab1:
cmp DX,00
jnz lab2
cmp AX,0010
jb lab5
lab2:
div tenword
or DL,30H
mov [SI],DL
dec SI
sub DX,DX
jmp lab1
lab5:
or AL,30H
mov [SI],AL
pop si
pop dx
pop ax
pop di
pop cx
ENDm
;*****