Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой прокт.docx
Скачиваний:
2
Добавлен:
22.11.2018
Размер:
54.24 Кб
Скачать
  1. Список литературы

  1. Абель Питер. Язык ассемблера для IBM PC и программирования.

М. Высшая школа.1992

  1. Конспект лекций

  2. Юров Виктор Иванович.Assembler. С-П. Питер.2000

  1. Текст программы

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

;*****

26