Добавил:
salavat
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
Include Library.inc ;Подключение файла макросов
Code segment
Assume cs:code,ds:data ;Привязка сегментных регистров
push es
mov ax,data
mov ds,ax
Start: Hidecursor ;"Спрятать" курсор
BackGround ;Вывести "обои"
Invert 0,0,8 ;Выделить маркером первый пункт меню
xor bx,bx ;bh-X координата маркера ,bl-Y координата
XYRead: ;НАЧАЛО ОПОЗНАВАНИЯ ВЫБОРА
cmp bl,0 ;y=0?
je next1 ;Да
jmp far ptr mTest3 ;Нет
next1: push bx ;Запомнить координаты (x,y)
cmp bh,0 ;(0,0)=[Exit]?
jne mTest1
FillTable ;Очистить рабочий стол
jmp mTest2
mTest1:
cmp bh,7 ;(7,0)=[File]?
je next2
jmp far ptr mTest2
next2: FillTable ;Очистить рабочий стол
POther ;Вывести окошко 'Other'
mTest2:
pop bx
mTest3:
xor ah, ah ;ОПРОС КЛАВИАТУРЫ
int 16h
cmp ax,4800h ;up
je mUp
cmp ax,5000h ;down
jne next3
jmp far ptr mDn
next3: cmp ax,4B00h ;Left
jne next4
jmp far ptr mLt
next4: cmp ax,4D00h ;right
jne next5
jmp far ptr mRt
next5: cmp ax,1C0Dh ;enter
jne next6
jmp far ptr mEnter
next6: jmp XYRead
mUp:
xor ax,ax
invert bh,bl,8 ;Убрать маркер со старого места
cmp bl,2 ;Запрещаем перемещать маркер выше
je mUp1 ;0-й строки или 2-й строки
cmp bl,0
je mUp1
sub bl,2 ;Вычисляем новую координату Y
mUp1:
invert bh,bl,8 ;Поставить маркер на новом месте
jmp XYRead
mDn:
cmp bh,0 ;Запрет перемещать маркер вниз
jne mDn0 ;в первом пункте меню 'Exit'
cmp bl,0
jne mDn0
jmp far ptr XYRead
mDn0:
invert bh,bl,8 ;Убрать маркер со старого места
cmp bl,8 ;Запрещаем перемещать маркер ниже
je mDn3 ;8-й строки
add bl,2 ;Вычисляем новую координату Y
mDn3:
invert bh,bl,8 ;Поставить маркер на новом месте
jmp XYRead
mRt:
invert bh,bl,8 ;Убрать маркер со старого места
cmp bl,0
je mRt0
xor bl,bl ;Y:=0
mRt0:
cmp bh,7 ;Запрещаем перемещать маркер дальше
je mRt1 ;7-й строки
add bh,7 ;Вычисляем новую координату X
mRt1:
invert bh,bl,8 ;Поставить маркер на новом месте
jmp XYRead
mLt:
invert bh,bl,8 ;Убрать маркер со старого места
cmp bl,0
je mLt0
xor bl,bl ;Y:=0
mLt0:
cmp bh,0 ;Запрещаем перемещать маркер меньше
je mLt1 ;0-й строки
sub bh,7 ;Вычисляем новую координату X
mLt1:
invert bh,bl,8 ;Поставить маркер на новом месте
jmp XYRead
mEnter:
cmp bx,0 ;Выбрали команду 'Exit'?
jne next7
jmp far ptr mExit
next7: cmp bh,7 ;Выбрали пункт 'Other'?
je next8
jmp far ptr mExit
next8: cmp bl,0
jne m072
jmp XYRead
m072:
cmp bl,2 ;Выбрали 'Executor'?
je next9
jmp far ptr m074
next9:
SelectFile
jmp Start
m074:
cmp bl,4 ;Выбрали 'Help'?
je next10
jmp far ptr m076
next10: Help
invert 0,0,8
jmp XYRead
m076:
cmp bl,6 ;Выбрали 'About'?
je next11
jmp far ptr mExit
next11: About
invert 0,0,8
jmp XYRead
mExit:
ClearScreen ;Очистка экрана
mov ax,4C00h ;Завершение работы программы
int 21h
Code ends
;---Сегмент данных------------------------------------------------------------
Data segment
WinBar db 80,' Exit Other ';
FileExec db 8,'Executor' ;
FileHelp db 4,'Help' ;
FileAbout db 5,'About' ;
FileExit db 4,'Exit' ;
HelpString db 19,'Executing EXE-files';
About1 db 6,'Tutaev' ;
About2 db 6,' Alex ' ;
About3 db 5,' 2000' ;
EnterUserFileName db 19,'Enter path of file:';
ExeMessage db 9,'PROGRAMS:'
PPMessage db 11,'pas_pas.exe'
PAMessage db 11,'pas_asm.exe'
APMessage db 11,'asm_pas.exe'
AAMessage db 11,'asm_asm.exe'
WiMessage db 11,'windows.exe'
UsMessage db 11,'User file..'
ExitMessage db 11,'- Q U I T -'
paspas db 'pas_pas.exe',0 ;имена загружаемых файлов
pasasm db 'pas_asm.exe',0
asmpas db 'asm_pas.exe',0
asmasm db 'asm_asm.exe',0
WinPro db 'windows.exe',0
UserFileName db 50 dup (?)
parametrs dw 3 dup(0) ;блок параметров
oldss dw 0 ;буферная переменная для ss
oldsp dw 0 ;буферная переменная для sp
Data ends
Virtual segment
Virtual ends
End
Code segment
Assume cs:code,ds:data ;Привязка сегментных регистров
push es
mov ax,data
mov ds,ax
Start: Hidecursor ;"Спрятать" курсор
BackGround ;Вывести "обои"
Invert 0,0,8 ;Выделить маркером первый пункт меню
xor bx,bx ;bh-X координата маркера ,bl-Y координата
XYRead: ;НАЧАЛО ОПОЗНАВАНИЯ ВЫБОРА
cmp bl,0 ;y=0?
je next1 ;Да
jmp far ptr mTest3 ;Нет
next1: push bx ;Запомнить координаты (x,y)
cmp bh,0 ;(0,0)=[Exit]?
jne mTest1
FillTable ;Очистить рабочий стол
jmp mTest2
mTest1:
cmp bh,7 ;(7,0)=[File]?
je next2
jmp far ptr mTest2
next2: FillTable ;Очистить рабочий стол
POther ;Вывести окошко 'Other'
mTest2:
pop bx
mTest3:
xor ah, ah ;ОПРОС КЛАВИАТУРЫ
int 16h
cmp ax,4800h ;up
je mUp
cmp ax,5000h ;down
jne next3
jmp far ptr mDn
next3: cmp ax,4B00h ;Left
jne next4
jmp far ptr mLt
next4: cmp ax,4D00h ;right
jne next5
jmp far ptr mRt
next5: cmp ax,1C0Dh ;enter
jne next6
jmp far ptr mEnter
next6: jmp XYRead
mUp:
xor ax,ax
invert bh,bl,8 ;Убрать маркер со старого места
cmp bl,2 ;Запрещаем перемещать маркер выше
je mUp1 ;0-й строки или 2-й строки
cmp bl,0
je mUp1
sub bl,2 ;Вычисляем новую координату Y
mUp1:
invert bh,bl,8 ;Поставить маркер на новом месте
jmp XYRead
mDn:
cmp bh,0 ;Запрет перемещать маркер вниз
jne mDn0 ;в первом пункте меню 'Exit'
cmp bl,0
jne mDn0
jmp far ptr XYRead
mDn0:
invert bh,bl,8 ;Убрать маркер со старого места
cmp bl,8 ;Запрещаем перемещать маркер ниже
je mDn3 ;8-й строки
add bl,2 ;Вычисляем новую координату Y
mDn3:
invert bh,bl,8 ;Поставить маркер на новом месте
jmp XYRead
mRt:
invert bh,bl,8 ;Убрать маркер со старого места
cmp bl,0
je mRt0
xor bl,bl ;Y:=0
mRt0:
cmp bh,7 ;Запрещаем перемещать маркер дальше
je mRt1 ;7-й строки
add bh,7 ;Вычисляем новую координату X
mRt1:
invert bh,bl,8 ;Поставить маркер на новом месте
jmp XYRead
mLt:
invert bh,bl,8 ;Убрать маркер со старого места
cmp bl,0
je mLt0
xor bl,bl ;Y:=0
mLt0:
cmp bh,0 ;Запрещаем перемещать маркер меньше
je mLt1 ;0-й строки
sub bh,7 ;Вычисляем новую координату X
mLt1:
invert bh,bl,8 ;Поставить маркер на новом месте
jmp XYRead
mEnter:
cmp bx,0 ;Выбрали команду 'Exit'?
jne next7
jmp far ptr mExit
next7: cmp bh,7 ;Выбрали пункт 'Other'?
je next8
jmp far ptr mExit
next8: cmp bl,0
jne m072
jmp XYRead
m072:
cmp bl,2 ;Выбрали 'Executor'?
je next9
jmp far ptr m074
next9:
SelectFile
jmp Start
m074:
cmp bl,4 ;Выбрали 'Help'?
je next10
jmp far ptr m076
next10: Help
invert 0,0,8
jmp XYRead
m076:
cmp bl,6 ;Выбрали 'About'?
je next11
jmp far ptr mExit
next11: About
invert 0,0,8
jmp XYRead
mExit:
ClearScreen ;Очистка экрана
mov ax,4C00h ;Завершение работы программы
int 21h
Code ends
;---Сегмент данных------------------------------------------------------------
Data segment
WinBar db 80,' Exit Other ';
FileExec db 8,'Executor' ;
FileHelp db 4,'Help' ;
FileAbout db 5,'About' ;
FileExit db 4,'Exit' ;
HelpString db 19,'Executing EXE-files';
About1 db 6,'Tutaev' ;
About2 db 6,' Alex ' ;
About3 db 5,' 2000' ;
EnterUserFileName db 19,'Enter path of file:';
ExeMessage db 9,'PROGRAMS:'
PPMessage db 11,'pas_pas.exe'
PAMessage db 11,'pas_asm.exe'
APMessage db 11,'asm_pas.exe'
AAMessage db 11,'asm_asm.exe'
WiMessage db 11,'windows.exe'
UsMessage db 11,'User file..'
ExitMessage db 11,'- Q U I T -'
paspas db 'pas_pas.exe',0 ;имена загружаемых файлов
pasasm db 'pas_asm.exe',0
asmpas db 'asm_pas.exe',0
asmasm db 'asm_asm.exe',0
WinPro db 'windows.exe',0
UserFileName db 50 dup (?)
parametrs dw 3 dup(0) ;блок параметров
oldss dw 0 ;буферная переменная для ss
oldsp dw 0 ;буферная переменная для sp
Data ends
Virtual segment
Virtual ends
End
Соседние файлы в папке Third
