Вопрос № 44704: Господа эксперты, помогите с процедерой запрета копирования файлов в
среде MS DOS. Мне нужно знать сам алгоритм, прерывания и функции
Заранее спасибо...Вопрос № 44708: Люди! Я новичек в АСМе и не могу решить такую задачу:
С клавиатуры вводится строка с пробелами и после нажатия Enter все слова должны выстраиваться в столбик. Пытался решить вот, так, но что-то не получается,пожалуйста помогите:
model...Вопрос № 44711: Есть программа на ассемблере.
mov ax, 0h
mov ax, DATASG
После компиляции в ЕХЕшнике имеем две одинаковые комманды
B8 00 00 B8 00 00
Через отладчи же видим
напимер
B8 00 00 B8 17 15
то есть компоновщик подста...
Вопрос № 44.704
Господа эксперты, помогите с процедерой запрета копирования файлов в
среде MS DOS. Мне нужно знать сам алгоритм, прерывания и функции
Заранее спасибо
Отправлен: 30.05.2006, 19:50
Вопрос задал: NameLess (статус: 7-ой класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Евгений Иванов
Здравствуйте, NameLess!
Для того, чтобы нельзя было копировать файлы, нужно не допускать их открытие на чтение. Для этого перехватывай прерывание номер 33 и набор функций по открытию файлов, коими являются:
15 - открытие файла средствами FCB;
22 - создание файла средствами FCB;
60 - создание файла;
61 - открытие файла;
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214;88;90;76 ---- Ответ отправлен: 30.05.2006, 19:58 Оценка за ответ: 4
Отвечает: Пан Павел Константинович
Здравствуйте, NameLess!
В Рассылке Олега Калашникова есть урок, по созданию Резидента. Там вы найдёте как ставить резидента на определенное прерывание и функцию, это нужно для Запрета копирвания файла, к уроку прелогается полный Исходный текст Резидента.
Копирование файла:
A - file1
B - file2
==> - Открытие файла 'A' и перенос данных из него в буфер, с последующим переносом данных из буфера в 'B'.
A ==> B
Акцентируйте внимание на прерывание INT 21h функцию Открытия файла(Open file).
Люди! Я новичек в АСМе и не могу решить такую задачу:
С клавиатуры вводится строка с пробелами и после нажатия Enter все слова должны выстраиваться в столбик. Пытался решить вот, так, но что-то не получается,пожалуйста помогите:
.model tiny
.code
org 100h ; Типа СОМ файл.
Start:
;==============================================
Mov ah,9h ;Предложение
Lea dx,Text ;ввести
Int 21h ;строку
;==============================================
Mov ah,0Ah ;Собственно
Lea dx,stroka ;Cам ввод
int 21h ;Cтроки.
;==============================================
lea di,stroka+2
NACH:
lea si,buf
prover:
mov al,[di]
cmp al,' '
je vivod
mov [si],al
inc si
inc di
cmp al,13
je exit
jmp prover
vivod:
mov byte ptr [si],10
mov byte ptr [si+1],13
mov byte ptr [si+2],'$'
mov ah,9h
lea dx,buf
int 21h
je exit
jmp prover
Exit:
Ret
buf db 255 dup(?)
stroka db 255
text db "Введите строку!",10,13,'$'
End Start
Отправлен: 30.05.2006, 21:00
Вопрос задал: Lenin (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Евгений Иванов
Здравствуйте, Lenin!
.model tiny
.code
org 100h ; Типа СОМ файл.
Start:
push cs
pop ds
;==============================================
Mov ah,9h ;Предложение
Lea dx,Text ;ввести
Int 21h ;строку
;==============================================
Mov ah,0Ah ;Собственно
Lea dx,stroka ;Cам ввод
int 21h ;Cтроки.
;==============================================
lea di,stroka+2
NACH:
lea si,buf
prover:
mov al,[di]
cmp al, 32
je v
mov [si],al
inc si
inc di
cmp al,13
je vivod
jmp prover
v:
mov byte ptr [si],10
mov byte ptr [si+1],13
inc si
inc si
inc di
jmp prover
b db 13, 10
buf db 255 dup(?)
stroka db 255
Text db "Введите строку!",10,13, '$'
End Start
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214;88;90;76 ---- Ответ отправлен: 30.05.2006, 21:18 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо,
вы меня спасли!
Отвечает: Пан Павел Константинович
Здравствуйте, Lenin!
Так как задача похожа на Лаб. Работу в листинге исходного текста, нет комментариев и плюс алгоритм был придуман по принцепу "Что первое пришло в голову, то и написал".
loop @@3
;================================
ret ;exit
;================================
MS0 db 'Input_String: $'
;================================
MAX db 20
LEN db ?
BUFF db 21 dup(?)
;================================
CSEG ends
end Begin
mov ax, 0h
mov ax, DATASG
После компиляции в ЕХЕшнике имеем две одинаковые комманды
B8 00 00 B8 00 00
Через отладчи же видим
напимер
B8 00 00 B8 17 15
то есть компоновщик подставил вместо нулей адрес сегента памяти, где он положил сегмент данных программы.
Подскажите пожалуйста, а на основани какой логики он это делает.
По идее где-то должна хранится информация о том где зарезервированны "места" под адреса...
Ни в литературе, ни в Интеренете ответа не нашел..
Заранее благодарен!
Приложение:
Отправлен: 30.05.2006, 22:05
Вопрос задал: Стас М. (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Пан Павел Константинович
Здравствуйте, Стас М.!
B8 00 00 - mov ax,0h
B8 00 00 - резервирование места так как адрес сегмента данных не определён.
> По идее где-то должна хранится информация о том где зарезервированны "места" под адреса...
>> Формат EXE отличается от COM, тем что у него есть "Заголовок", данная информация должна храниться там ИМХО.
Вот ссылка на хорошую книгу про форматы Исполняймых файлов:
http://megalib.com/books/189/formats.pdf
Информация о настройках сегментных адресов сохраняется в заголовке EXE-файла. Там есть relocation-table, которая содержит полный адрес элементов программы, которые требуют настройки в момент загрузки программы в память. Программа грузится одним куском, начиная с некоторого сегментного адреса. Это адрес называется базовым. ОС считывает элементы relocation-table и добавляет базовый адрес к значению, находящемуся по считанному адресу.
Т.е. в твоем случае вторая команда будет представлять собой загрузку в регистр AX базового адреса.
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Академик) Россия, Санкт-Петербург ICQ: 5163321 ---- Ответ отправлен: 31.05.2006, 15:55