Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

spo_3 / 1 / Third / EXEC

.doc
Скачиваний:
22
Добавлен:
27.05.2013
Размер:
55.3 Кб
Скачать

4

;*********Программа запуска ЕХЕ-файлов************************

Include Library.inc ;Подключение файла макросов

Code segment ;Начало кодового сегмента

Assume cs:code,ds:data ;Привязка сегментных регистров к сегментам

push es ;Сохраняем ES

mov ax,data ;Связываем регистр DS c

mov ds,ax ;сегментом DATA

Start: ;--ПЕРВОНАЧАЛЬНАЯ ИНИЦИАЛИЗАЦИЯ--

Hidecursor ;Сделать курсор невидимым

BackGround ;Заполнить экран фоном

xor bx,bx ;Устанавливаем начальные координаты маркера

;bh-X координата маркера ,bl-Y координата маркера

Invert 0,0,8 ;Выделить маркером первый пункт меню

ReadKey:

xor ah, ah ;--НАЧИНАЕМ ОПРОС КЛАВИАТУРЫ--

int 16h

cmp ax,4800h ;Нажата клавиша ‘Вверх’ ?

je mUp ;если да, то вычисляем новую координату У

cmp ax,5000h ;Нажата клавиша ‘Вниз’ ?

jne else1 ;если нет, то продолжаем сравнение кода клавиши

jmp far ptr mDn ;иначе вычисляем новую координату У

else1: cmp ax,4B00h ;Нажата клавиша ‘Влево’?

jne else2 ;если нет, то продолжаем сравнение кода клавиши

jmp far ptr mLeft ;иначе вычисляем новую координату Х

else2: cmp ax,4D00h ;Нажата клавиша ‘Вправо’?

jne else3 ;если нет, то продолжаем сравнение кода клавиши

jmp far ptr mRight ;иначе вычисляем новую координату У

else4: cmp ax,1C0Dh ;Нажата клавиша ‘Enter’?

jne else5 ;если нет, то продолжаем сравнение кода клавиши

jmp far ptr mEnter ;иначе определяем, что нужно выполнить

else5: jmp WhatWin ;Определяем какое окно надо вывести

mUp: ;--ВЫЧИСЛЕНИЕ НОВОЙ КООРДИНАТЫ У И

; ПЕРЕМЕЩЕНИЕ МАРКЕРА НА НОВОЕ МЕСТО--

invert bh,bl,8 ;Убрать маркер со старого места

cmp bl,2 ;Если У=0 или У=2, то запрещаем перемещать маркер

je mUpNext ; выше 0-й строки или 2-й строки

cmp bl,0

je mUpNext ;

sub bl,2 ;иначе вычисляем новую координату Y (Y:=Y-2)

mUpNext:

invert bh,bl,8 ;Поставить маркер на новом месте

jmp WhatWin ;Определяем какое окно надо вывести

mDn: ;--ВЫЧИСЛЕНИЕ НОВОЙ КООРДИНАТЫ У И

; ПЕРЕМЕЩЕНИЕ МАРКЕРА НА НОВОЕ МЕСТО--

cmp bh,0 ;Если У=0 и Х=0(первый пункт меню -'Exit'), то

jne mDnNext ;запрещаем перемещать маркер вниз

cmp bl,0

jne mDnNext ;

jmp far ptr WhatWin ; и определяем какое окно надо вывести

mDnNext:

invert bh,bl,8 ;Иначе убрать маркер со старого места

cmp bl,8 ;Если У=8, то запрещаем перемещать маркер ниже

je mDnNext2 ;8-й строки

add bl,2 ;Иначе вычисляем новую координату Y (Y:=Y+2)

mDnNext2:

invert bh,bl,8 ;Cтавим маркер на новом месте

jmp WhatWin ;Определяем какое окно надо вывести

mRight: ;--ВЫЧИСЛЕНИЕ НОВОЙ КООРДИНАТЫ Х И

; ПЕРЕМЕЩЕНИЕ МАРКЕРА НА НОВОЕ МЕСТО--

invert bh,bl,8 ;Убрать маркер со старого места

cmp bl,0 ;Если У<>0, то

je mRightNext ; при нажатии клавиши ‘Вправо’

xor bl,bl ; У присваиваем 0 (Y:=0)

mRightNext: ;Иначе

cmp bh,7 ;если У=7, то запрещаем перемещать маркер дальше

je mRightNext2 ;7-й строки

add bh,7 ;иначе вычисляем новую координату X

mRightNext2:

invert bh,bl,8 ;Ставим маркер на новом месте

jmp WhatWin ;Определяем какое окно надо вывести

mLeft: ;--ВЫЧИСЛЕНИЕ НОВОЙ КООРДИНАТЫ Х И

; ПЕРЕМЕЩЕНИЕ МАРКЕРА НА НОВОЕ МЕСТО--

invert bh,bl,8 ;Убрать маркер со старого места

cmp bl,0 ;Если У<>0, то

je mLeftNext ; при нажатии клавиши ‘Влево’

xor bl,bl ; У присваиваем 0 (Y:=0)

mLeftNext: ;Иначе

cmp bh,0 ;если У=0 запрещаем перемещать маркер меньше

je mLeftNext2 ;0-й строки

sub bh,7 ;иначе вычисляем новую координату X

mLeftNext2:

invert bh,bl,8 ;Ставим маркер на новом месте

jmp WhatWin ;Определяем какое окно надо вывести

mEnter: ;--ОПРЕДЕЛЯЕМ КАКОЙ ПУНКТ МЕНЮ НАДО ВЫПОЛНИТЬ--

cmp bx,0 ;Выбрали команду 'Exit'?

jne next1 ;если нет, то продолжаем определять что выбрано

jmp far ptr mExit ;иначе выходим из программы

next1: cmp bh,7 ;Выбрали пункт 'Other'?

je mExecutor ;если да, то определяем какую команду выбрали

jmp far ptr mExit ;иначе выходим из программы

mExecutor:

cmp bl,2 ;Выбрали команду'Executor'? (У=2)

je mExecutorStart ;если да, то выполнить эту команду

jmp far ptr mHelp ;иначе продлжаем определять что выбрано

mExecutorStart:

SelectFile ;Макрос выбора и запуска ЕХЕ-файлов

jmp Start ;На начала программы

mHelp:

cmp bl,4 ;Выбрали 'Help'? (У=4)

je mHelpStart ;если да, то выполнить эту команду

jmp far ptr mAbout ;иначе продлжаем определять что выбрано

mHelpStart:

Help ;макрос вывода окна ‘Help’

invert 0,0,8 ;Ставим маркер

jmp WhatWin ;Определяем какое окно надо вывести

mAbout:

cmp bl,6 ;Выбрали 'About'? (У=6)

je mAboutStart ;если да, то выполнить эту команду

jmp far ptr mExit ;иначе выбрана последняя команда-‘Exit’

mAboutStart:

About ;макрос вывода окна ‘About’

invert 0,0,8 ;Ставим маркер и

WhatWin: ;---ОПРЕДЕЛЯЕМ КАКОЕ ОКНО МЕНЮ ВЫВЕСТИ---

cmp bl,0 ;координата y=0?

je Yes ;если Да, то ищем координату Х

jmp far ptr ReadKey ;если нет, то переходим на считывание кода клавиши

Yes: push bx ;Запомнить регистры bh,bl

cmp bh,0 ;Маркер стоит в координате(0,0)? (Команда - ’Exit’)

jne mNEXT ;Если нет, то продолжаем определять где находится

; маркер.

FillTable ;Иначе заполняем рабочий стол фоном(т.е. никакого

; окна выводить не надо)

jmp mQuit ;Выход

mNEXT:

cmp bh,7 ;X-координата маркера X=7? (Пункт меню–‘Other’)

je next2 ;Если да, то вывести окно ‘Other’

jmp far ptr mQuit ;Иначе на выход

next2: FillTable ;Заполняем рабочий стол фоном

POther ;Выводим окно 'Other'

mQuit:

pop bx ;Восстановить регистры bh,bl

jmp ReadKey ;На опрос клавиатуры

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 -' ; Строка-сообщение

;-----ASCIIZ имена загружаемых и исполняемых файлов

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 ? ;буферная переменная для регистра ss

oldsp dw ? ;буферная переменная для регистра sp

Data ends

Virtual segment ;”Виртуальный” сегмент без данных(необходим

Virtual ends ; для определения адреса конца программы)

End

Соседние файлы в папке Third
  • #
    27.05.20131.74 Кб18asm_asm.exe
  • #
    27.05.20132.46 Кб17asm_pas.exe
  • #
    27.05.201355.3 Кб22EXEC.doc
  • #
    27.05.20135.33 Кб20EXEC.TXT
  • #
    27.05.20135.35 Кб17Executor.asm
  • #
    27.05.20134.15 Кб17EXECUTOR.EXE
  • #
    27.05.2013238 б17EXECUTOR.MAP
  • #
    27.05.20137.28 Кб17EXECUTOR.OBJ