Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2012, 14:12   #1
kiw1
Новичок
Джуниор
 
Регистрация: 31.12.2012
Сообщений: 2
Лампочка Написать резидентную программу для вывода текущего времени, после второго запуска - выгружается из памяти

Давайте слепим программу (Есть всё что надо)
Так как я в ассемблере не очень, прошу помощи слепить эту инфу (написана ниже) в одну программу. Я б и денежку заплатил, но меня уже 2 раза кинули за месяц с этой прогой. Жду помощи понимающих людей.

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

Нашел я как вивести текущее время (системное прерывание, мне надо такое):

Код:
out_h proc      ;Выводит на экран текущий час.
    mov al,ch
    call OutInt
    ret
out_h endp
 
out_m proc      ;Выводит текущие минуты.
    mov al,cl
    call OutInt
    ret
out_m endp
 
out_s proc      ;Выводит секунды.
    mov al,dh
    call OutInt
    ret
out_s endp
 
out_cln proc        ;Выводит двоеточие.
    mov ah,2
    mov dl,':'
    int 21h
    ret
out_cln endp
Вот шаблон резидентной программы:
Код:
%Title “Шаблон COM - резидента”
	Ideal
	Model tiny
	Codeseg
	Org 100h	;Установим IP на адрес после PSP
Proc	resident
	jmp init	;Переход на секцию инициализации
;Данные резидентной секции программы
	…
Entry:	;Начало программного кода резидента (точка входа после активизации резидента)
	…
Endp	resident	;Секция инициализации резидента
Proc 	init
	…
	mov ah,27h	;Можно опустить
	lea dx,[cs:init]	;DX - адрес первого байта за резидентной частью программы,
		;CS – на начало PSP
	Int 27h	;Оставить резидентной
Endp	init
	End resident	;Конец программы/точка входа
И собственно выгpузка чеpез int 21h/ah=49h.
Разумна в случае, если pезидент выгpужается из повтоpно
запускаемой его копии. Восстанавливаются вектоpы, затем
освобождается блок памяти, где обитает pезидент.
Код:
----------------
ID              dw 1234h
Old_08h         dd ?
       ...
Unload:
                mov    ax,3508h                 ; пyсть это бyдет вектоp 8
                int    21h
                cmp    word ptr es:[offset ID],1234
                jne    Fuk                     ; вектоp 8 пеpехвачен дpyгим
                                                ; TSR
                mov    dx,word ptr es:[offset Old_08h]
                mov    ds,word ptr es:[offset Old_08h+2]
                mov    ax,2508h
                int    21h                      ; восстановим стаpый вектоp
                mov    ah,49h                   ; и освободим память,
                int    21h                      ; занимаемyю pезидентом.
       ...
Fuk:                                           ; выгpyзка обычным способом
                                                ; невозможна

______________
1) Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.
На первый раз я исправил.
В последующем, темы с подобным названием будут закрываться или удаляться,
а автор такой темы будет получать штрафные баллы.

2) Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!


Модератор.

Последний раз редактировалось Serge_Bliznykov; 31.12.2012 в 19:48.
kiw1 вне форума Ответить с цитированием
Старый 31.12.2012, 14:56   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Так как я в ассемблере не очень, прошу помощи слепить эту инф
Песочница не далеко от дома. Пасочки ленпи.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 31.12.2012, 15:19   #3
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Цитата:
Сообщение от kiw1 Посмотреть сообщение
меня уже 2 раза кинули за месяц
Бог троицу любит.
vadimych вне форума Ответить с цитированием
Старый 31.12.2012, 15:28   #4
kiw1
Новичок
Джуниор
 
Регистрация: 31.12.2012
Сообщений: 2
По умолчанию

Если вы ничего не можете, зачем тут тролить.
kiw1 вне форума Ответить с цитированием
Старый 31.12.2012, 15:35   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от kiw1 Посмотреть сообщение
Если вы ничего не можете, зачем тут тролить.
Я умею писать проги, просто сегодня день такой - 31 декабря. И Вас с новым годом!
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 31.12.2012, 19:59   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

во-первых, то, что Вы накидали некомпилируемые куски кода, Вы сами ничего делать не пытались?

во-вторых, если уж так тяжко с программированием на Ассемблере под MS DOS (без сарказма), так ищите готовые примеры, разбирайте их и переделывайте под себя.

например,
Резидентные Часы с выгрузкой
(взято, кстати, тут - там много примеров резидентных программ...)

Написание резидентных программ для MS DOS там всё разжёвано. и есть даже такое:
Цитата:
Рассмотрим пример резидентной программы "часы" на ассемблере (CLOCK2.ZIP - 827 байт). Программа перехватывает обработчик прерываний от таймера и с возникновением очередного прерывания выводит в левом верхнем углу экрана текущее время. Ниже представлен исходный текст программы с комментариями.
Желаю успехов!

С Наступающим Новым Годом!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать резидентную программу которая выполняет опредилённые действия: Светочик Помощь студентам 8 03.03.2012 17:40
Освобождение памяти после запуска TOpenDialog t2skler Общие вопросы Delphi 8 14.09.2011 02:19
как написать программу на с++ каторая после запуска сталабы нажимать клавеши в определенном порядке.. biovolk Общие вопросы C/C++ 4 07.01.2010 02:39
как написать программу на с++ каторая после запуска сталабы нажимать клавеши в определенном порядке.. biovolk Помощь студентам 6 06.01.2010 20:05
Написать на Паскале резидентную программу kaeromorte Помощь студентам 3 22.05.2009 20:41