Запуск в определенное время различных программ

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование Ассемблер
  • 38 38 страниц
  • 4 + 4 источника
  • Добавлена 19.12.2022
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
Содержание
Введение

1 Теоретическая часть 3
1.1 Актуальность , цель и задачи курсовой работы 4
1.2 Теоретические основы рассматриваемой темы. 5
2 Среда разработки и технологические методы разработки 7
2.1 Запуск внешних программ 8
2.2 Внутренний запуск программы. 9
2.3 Возможности использования таймеров в прикладной задаче. 11
3 Специальный раздел 18
3.1 Описание алгоритма решения 20
3.2 Разработка программы 25
Заключение 32
4 Литература 33
Приложение А (Информационное) Код программного продукта 35
Фрагмент для ознакомления

Для примера приведем исходный текст простой программы SPARM (листинг 3.5), которая запускает программу с именем parm.com из текущего каталога. Программу parm.com мы уже рассматривали (листинг 3.2). Эта программа выводит на экран параметры, полученные ей при запуске через командную строку.

Листинг 3.5. Файл sparm\sparm.asm

.MODEL tiny
DOSSEG
.DATA

path db "PARM.COM",0
command_line db 11,"Parm1 Parm2"
epb dw 0
cmd_off dw ?
cmd_seg dw ?
fcb1 dd ?
fcb2 dd ?

.CODE
.STARTUP
;
; Освобождаем лишнюю память за концом программы
;
mov bx, OFFSET last ; смещение конца программы

mov cl,4 ; вычисляем длину программы в параграфах
shr bx,cl

add bx,17 ; добавляем 1 параграф для
; выравнивания и 256 байт для стека

mov ah, 4Ah ; изменяем размер выделенного
int 21h ; блока памяти

mov ax,bx ; устанавливаем новое значение
shl ax,cl ; для указателя стека
dec ax
mov sp,ax

mov bx,OFFSET command_line ; адрес командной
mov cmd_off,bx ; строки для блока EPB
mov cmd_seg,ds

mov ax,ds
mov es,ax

mov bx, OFFSET epb ; ES:BX указывают на EPB
mov dx, OFFSET path ; DS:DX указывают на путь
; к файлу запускаемой программы

mov ax, 4B00h ; AH = 4Bh
; AL = 0 загрузить и выполнить
int 21h
.EXIT 0

last: db ?
END

Программа SPARM освобождает всю неиспользуемую ей память, после чего на освободившееся место загружает программу parm.com. Такая процедура необходима потому, что MS-DOS выделяет всю имеющуюся память в распоряжение запускаемой com-программы. Поэтому при попытке запустить программу без предварительного освобождения части памяти функция 4Bh вернет код ошибки 8 (нет памяти для загрузки программы).
Для изменения размера блока памяти, выделенного программе, мы использовали функцию 4Ah прерывания INT 21h .
Загрузка программы без выполнения
Подфункции 1 и 2 прерывания INT 4Bh используются операционной системой MS-DOS для собственных нужд (это внутренние подфункции MS-DOS). Они также необходимы для создания программ-отладчиков, таких как, например, debug.com или td.exe. Мы приведем недокументированный формат блока EBP для этих функций.
Для подфункции 1 блок EBP имеет следующий формат:
Смещение, байт Размер, байт Имя поля Описание 0 2 seg_env Сегментный адрес среды, которая создается родительской программой для запускаемой программы. Если в этом поле находится 0, то для запускаемой программы копируется среда родительской программы 2 4 cmd Дальний адрес строки параметров для запускаемой программы 6 4 fcb1 Адрес блока FCB . Этот адрес будет записан в блок PSP со смещением 5Ch 10 4 fcb2 Адрес блока FCB . Этот адрес будет записан в блок PSP со смещением 6Ch 14 4 ss_sp В это поле после завершения работы запускаемой программы будет записано содержимое регистров SS:SP 18 4 entry_p Адрес точки входа в загруженную программу, который нужно записать в регистры CS:IP при запуске программы Формат блока EPB для подфункции 2:
Смещение, байт Размер, байт Имя поля Описание 0 2 seg_env Сегментный адрес среды, которая создается родительской программой для запускаемой программы. Если в этом поле находится 0, то для запускаемой программы копируется среда родительской программы 2 4 cmd Дальний адрес строки параметров для запускаемой программы 6 4 fcb1 Адрес блока FCB . Этот адрес будет записан в блок PSP со смещением 5Ch 10 4 fcb2 Адрес блока FCB . Этот адрес будет записан в блок PSP со смещением 6Ch Загрузка программного оверлея
Подфункция 3 используется для загрузки программных оверлеев . Оверлей загружается в адресное пространство родительской программы, поэтому MS-DOS не заказывает дополнительной памяти и не строит PSP . Формат EPB для этой подфункции:
Смещение, байт Размер, байт Имя поля Описание 0 2 seg_env Сегментный адрес, по которому загружается программа 2 4 reloc Фактор перемещения. Для exe-программ обычно содержит то же значение, что и поле seg_env, для com-программ в этом поле находится значение 0 Следующий фрагмент программы загружает программу parm.com как оверлей без передачи ей управления (программа загружается в буфер buff):
.DATA
path db "PARM.COM",0
epb dw 0
reloc dd 0
.CODE
.STARTUP

mov ax,ds
mov es,ax
mov bx,SEG buff
mov epb,bx

mov bx,OFFSET epb ; ES:BX указывают на EPB
mov dx,OFFSET path ; DS:DX указывают на путь
; загружаемой программы

mov ax, 4B03h ; AH = 4Bh
; AL = 0 загрузить оверлей
int 21h
;
; Работа с загруженной программой
........
;
.EXIT 0
buff: dd 100 dup(?)
END
Подготовка программы для выполнения
Подфункция 5 используется для загрузки и предварительной подготовки программы к выполнению . Она впервые появилась в MS-DOS версии 5.0.Можно использовать ее вместо недокументированных подфункций 1 и 2.
Если программа, запущенная с помощью подфункции 5, попытается определить версию MS-DOS, ей будет предоставлен не истинный номер версии, а определенный с учетом действия драйвера setver.
Напомним, что с помощью драйвера setver MS-DOS может "обмануть" программу, сообщив ей, что работает MS-DOS, например, версии 3.31 или любой другой версии, указанной пользователем. Такая возможность требуется в тех случаях, когда программа была рассчитана на конкретную версию MS-DOS, но, тем не менее, способна работать и в новой версии.
Для подфункции 5 указатель, расположенный в регистрах DS:DX, должен указывать на структуру EXECSTATE, описанную ниже:
Смещение, байт Размер, байт Имя поля Описание 0 2 Reserved Зарезервировано 2 2 Flags Тип программы: 0 - com-программа, 1 - exe-программа, 2 - оверлей 4 4 ProgName Указатель на текстовую строку ASCIIZ , содержащую имя программы 8 2 PSP Сегмент блока PSP новой программы 10 4 StartAddr Стартовый адрес CS:IP новой программы 14 4 ProgSize Общий размер программы с учетом размера блока PSP

Заключение Ассемблер является символическим аналогом машинного языка. По этой причине программа, написанная на ассемблере, должна отражать все особенности архитектуры микропроцессора: организацию памяти, способы адресации операндов, правила использования регистров и т. д. Из-за необходимости учета подобных особенностей ассемблер уникален для каждого типа микропроцессоров.В данной курсовой работе рассмотрены основные этапы программирования на ассемблере, реализован алгоритм выполнения поставленной задачи, а также выполнена трансляция кода в исполняемый файл. В ходе выполнения данной работы была разработана программа по теме курсового проекта, которая может быть использована любым пользователем. Разработанный программный продукт соответствует всем заявленным требованиям. Программный продукт полностью протестирован к разным родам несовместимостям и ошибкам.
На основании полученного задания мною было выполнено следующее:
1. Проанализирована литература по разработке такого рода задач;
2. Проанализирован и выбран язык Ассемблера для создания программного продукта;
3. Найден и интегрирован весь лекционный, демонстрационный и справочный материал;
4. Разработаны дизайн, структура и алгоритм работы программы;
6. Программный продукт проверен на работоспособность и готов к эксплуатации.



4. Литература
1. Финогенов К.Г. Основы языка Ассемблера. - М.: Радио и связь,2000.
2. Юров В. Assembler. Специальный справочник. - СПб.: Питер, 2001.
3. Юров В. Assembler. Практикум. - СПб.: Питер, 2001.
4. Юров В., Хорошенко В. Assembler - Учебный курс.- СПб.: Питер, 2000.
Ресурсы:
wasm.ru — наверное, самый крупный русскоязычный ресурс по Ассемблеру. Огромное количество статей, живой форум, новости
cracklab.ru — огромный ресурс по исследованию/крэкингу программ
www.insidepro.com/rus/doc.shtml — огромнейшее собрание статей Криса Касперски
programmersclub.ru/assembler — курс asm&&win32
www.proklondike.com/books/assembler.html — мини-библиотека книг по ассемблеру
wiki.conus.info — большое количество заметок о reverse engineering на русском языке для начинающих и тех кто хочет научиться понимать создаваемый C/C++ компиляторами код
wasm.ru/publist.php?list=1 — Уроки Iczelion'а переведенные
www.nf-team.org/drmad/zf/zf1/zf1_006.htm —как писать вирусы


(Информационное)
Код программного продукта

.model small
.stack 100h;
.data;
num db 0h;
max db 1bh;
st1 db 100h dup(0);
st2 db 100h dup(0);
s_SS dw 0h;
s_SP dw 3h dup(0);
smesh dw 0h
segm dw 0h
.code;
Main Proc Near
mov ax, @data
mov ds, ax
mov ax, 0h
mov es, ax
;
cli
mov ax, es:[0020h]
mov bx, es:[0022h]
mov [smesh], ax
mov [segm], bx
mov ax, offset Inter
mov bx, seg Inter
;
mov es:[0020h], ax;
mov es:[0022h], bx;
sti
mov ax, 0B800h
mov es, ax
;
Pause:
mov bl, num
cmp bl, max
jne Pause
;
cli
mov ax, 0h
mov es, ax
mov ax, [smesh]
mov bx, [segm]
mov es:[0020h], ax
mov es:[0022h], bx
int 21h
sti
;
mov ah, 4ch
int 21h
Main endp
Inter Proc Far
mov al, num
cmp al, 0h
jne Reset
;
mov si, 0h
mov s_SS, ss;
mov [s_SP], sp;
mov ax, ds
mov ss, ax
mov sp, offset st1+256;
;
pushf;
push cs;
push offset proc1;
mov [s_SP+2], sp;
mov sp, offset st2+256
;
pushf
push cs
push offset proc2;
mov [s_SP+4], sp
Reset:
add si, 2h
cmp si, 6h
jne Switch
mov si, 2h;
Switch:
;
mov ax, [s_SP+si]
mov sp, ax;
mov al, num
inc al;
mov num, al
cmp al, max
jne Exit
;
mov ax, s_SS
mov ss, ax;
mov ax, [s_SP]
mov sp, ax;
Exit:
;
jmp dword ptr [smesh]
Inter endp
proc1 proc
mov di, 3840
mov ch, num
add ch, '@'
mov es:[di], ch
jmp proc1
proc1 endp
proc2 proc
mov di, 3848
mov cl, num;
add cl, '@'
mov es:[di], cl
jmp proc2
proc2 endp
end Main


















Изм.

Лист

№ докум.

Подпись

Дата

Лист

2

09.02.036603000 ПЗ

Изм.

Лист

№ докум.

Подпись

Дата

Лист

1



Разраб.



Пров.



Т. контр.



Н. контр.



Утв.



Лит.

Листов

382

4. Литература
1. Финогенов К.Г. Основы языка Ассемблера. - М.: Радио и связь,2000.
2. Юров В. Assembler. Специальный справочник. - СПб.: Питер, 2001.
3. Юров В. Assembler. Практикум. - СПб.: Питер, 2001.
4. Юров В., Хорошенко В. Assembler - Учебный курс.- СПб.: Питер, 2000.
Ресурсы:
wasm.ru — наверное, самый крупный русскоязычный ресурс по Ассемблеру. Огромное количество статей, живой форум, новости
cracklab.ru — огромный ресурс по исследованию/крэкингу программ
www.insidepro.com/rus/doc.shtml — огромнейшее собрание статей Криса Касперски
programmersclub.ru/assembler — курс asm&&win32
www.proklondike.com/books/assembler.html — мини-библиотека книг по ассемблеру
wiki.conus.info — большое количество заметок о reverse engineering на русском языке для начинающих и тех кто хочет научиться понимать создаваемый C/C++ компиляторами код
wasm.ru/publist.php?list=1 — Уроки Iczelion'а переведенные
www.nf-team.org/drmad/zf/zf1/zf1_006.htm —как писать вирусы

Вопрос-ответ:

Какая актуальность у данной курсовой работы?

Данная курсовая работа актуальна, так как она изучает возможности запуска программ в определенное время, что может быть полезно в различных сферах деятельности, таких как автоматизация задач, планирование работы и другие.

Какие технологические методы разработки были использованы в данной работе?

В данной работе были использованы технологические методы разработки, такие как запуск внешних программ, внутренний запуск программы, использование таймеров в прикладной задаче.

Какой алгоритм решения был использован в данной работе?

В данной работе был использован следующий алгоритм решения: описание задачи, выбор подходящего метода запуска программы, разработка программы на основе выбранного метода.

Какие возможности использования таймеров были рассмотрены в прикладной задаче?

В прикладной задаче были рассмотрены возможности использования таймеров для запуска программ в определенное время, для установки интервалов между запусками программ и для контроля времени выполнения программ.

Какие источники литературы были использованы в данной работе?

В данной работе были использованы следующие источники литературы: литературные источники по программированию и автоматизации задач, специализированные статьи и публикации в области запуска программ в определенное время.

Зачем нужно запускать программы в определенное время?

Запуск программ в определенное время может быть полезен в ситуациях, когда необходимо автоматически выполнить определенные действия. Например, это может быть запуск резервного копирования данных или выполнение задач по расписанию. Такой подход помогает сэкономить время и упростить процесс обработки информации.

Какие технологические методы используются для задания времени запуска программ?

Для задания времени запуска программ можно использовать различные технологические методы. Один из них - это использование внешних программных средств, которые позволяют задать время запуска и выполнить необходимые действия. Другой метод - внутренний запуск программы, где настройка времени выполняется внутри самой программы. Также можно использовать таймеры для определения времени запуска в прикладной задаче.

Как можно запустить внешнюю программу в определенное время?

Для запуска внешней программы в определенное время можно воспользоваться специальным программным обеспечением, например, планировщиком задач операционной системы. Такой планировщик позволяет указать время и день недели, когда необходимо запустить программу, и настроить повторение задачи, если нужно. Также возможно использование командной строки операционной системы для запуска программы по расписанию.

Как реализовать запуск программы внутри самой программы в определенное время?

Для реализации запуска программы внутри самой программы в определенное время можно использовать таймеры. Таймеры позволяют установить интервал времени, через который будет выполняться определенное действие. В прикладной задаче можно задать время запуска программы с помощью таймера и выполнить необходимые действия по истечении заданного времени.