IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Assembler
сообщение
Сообщение #1


Гость






Всем привет. Помогите кто может. Своего серого не хватает!
Буду очень очень благодарнаsmile.gif
Задание: написать на языке Ассемблер резидентную программу в со­ответствии с вариантом задания.
Общие требования: программа должна включать в себя резидентный обработчик прерывания (в соответствии с вариантом задания), и блок инициализации. Программа должна быть подготовлена для построения в COM-формате. В программе должны быть предусмотрены средства контроля за повторной установкой. Всю необходимую программе информацию (см. задание) она должна получать из командной строки. Вывод любой инфор­мации на экран должен осуществляться в текстовом режиме с сохранением образа той части экрана, в которую осуществляется вывод. После завер­шения работы содержимое экрана должно быть восстановленно. Все дейс­твия по выводу информации должны быть реализованы посредством вызова соответствующих функций BIOS.
По желанию в программе могут быть предусмотрены средства выгруз­ки из памяти по запросу пользователя. Вид запроса на выгрузку прог­раммы - командная строка, "горячая клавиша" или другое - выбирается по усмотрению автора программы.

Вариант
Перехватывается прерывание 09H (клавиатура), горячая клавиша: <Ctrl>+<Alt>+<I>. Действия резидентной части программы: ин­вертировать порядок символов в слове, на котором в момент активизации находится курсор. Словом может считаться последовательность букв и цифр на экране, ограниченная с двух сторон любыми другими символами (а также началом или концом строки).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Задача не архисложная, но объемная, делать все врядли кто будет. Показывай, что у тебя получается и на чем ты остановился.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Вообще я это "остановилась", но не суть.smile.gif)) Остановилась ни на чем. Первые пять лаб я сделала сама, а на этой просто ступор какой-то. Есть несколько кусков, исполняющие отдельные функции,а вот как объеденить и что б заработалоsmile.gif)). Это для меня супер-сложно. Однако пасиб что откликнулся.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Вот несколько программок, которые возможно окажутся в темуsmile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






; Эта программа будет проверять, находиться ли она уже в памяти, и показывать
; глупое сообщение, если это так. В противном случае она будет инсталлировать
; в память и показывать другое сообщение.
; Если файл запустить с параметром /u то он его выгружает.
; Я специально оптимизацией не занимался, но мне будетинтересно если вы ее
; оптимизируете
; компилить: tasm tsr.asm
; tlink /t tsr.obj

.model tiny
.code
org 100h

start:
jmp fuck

newint9:

cmp ax,0ACDCh ; Пользователь вызывает нашу функцию?
je is_check ; Если да, отвечаем на вызов

cmp ax,0AAAAh ; Пользователь выгружает наш резидент?
je disabled ; Если да, выгружаем

jmp dword ptr cs:[oldint9] ; Или переходим на исходный int9

is_check:
mov ax,0DEADh ; Мы отвечаем на звонок
iret ; И принуждаем прерывание возвратиться

disabled:
push ds ;сохраняем изменяемые регистры
push dx
push ax

lds dx, dword ptr cs:[oldint9] ;загружаем адрес старого загрузчика
; в ds:dx
mov ax,2509h ; Функция для возврата адреса
; старого обработчика int9
int 21h

pop ax ;Востанавливаем регистры
pop dx
pop ds
iret ; И принуждаем прерывание возвратиться

oldint9 label dword
int9_off dw 0000h ;указатель на старый обработчик
int9_seg dw 0000h

fuck:
mov di,81h ;В области DTA смещаем смещение в di
mov al," " ;через все пробелы
mov cx,128
repe scasb
dec di
mov si,di

cmp word ptr [si],'u/' ;сравниваем c /u
jne install

mov ax,0aaaah ;выгружаем
int 9h
mov ax,0900h ; Показываем сообщение 3
mov dx,offset msg_disabled
int 21h
jmp final

install:
mov ax,0ACDCh ; Проверка на резидентность
int 9h ;
cmp ax,0DEADh ; Мы здесь?
je stupid_yes ; Если да, показываем сообщение 2

mov ax,3509h ; Если, инсталлируем программу
int 21h ; Функция, чтобы получить векторы
; INT 9h
mov word ptr cs:[int9_off],bx ; Мы сохраняем смещение в oldint9+0
mov word ptr cs:[int9_seg],es ; Мы сохраняем сегмент в oldint9+2

mov ax,2509h ; Функция для помещения нового
; обработчика int9
mov dx,offset newint9 ; где он находится
int 21h

mov ax,0900h ; Показываем сообщение 1
mov dx,offset msg_installed
int 21h

mov dx,offset fuck+1 ; Делаем резидент от смещения 0 до
int 27h ; смещения в dx используя int 27h
; Это также прервет программу

stupid_yes:
mov ax,0900h ; Показываем сообщение 2
mov dx,offset msg_already
int 21h

final:
int 20h ; Прерываем программу.

msg_installed db "Глупый резидент не установлен. Устанавливаю...$"
msg_already db "Глупый резидент жив и дает вам под зад!$"
msg_disabled db "Убиваю глупый резидент. Убит наповал ( $"

end start
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.12.2020 3:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name