Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 466
от 05.06.2006, 06:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 334, Экспертов: 21
В номере:Вопросов: 3, Ответов: 6


Вопрос № 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 и набор функций по открытию файлов, коими являются:

  1. 15 - открытие файла средствами FCB;
  2. 22 - создание файла средствами FCB;
  3. 60 - создание файла;
  4. 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).

С, Уважением MnEm0n!C.

---------
Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: Студент)
Ответ отправлен: 31.05.2006, 05:22


Вопрос № 44.708
Люди! Я новичек в АСМе и не могу решить такую задачу:
С клавиатуры вводится строка с пробелами и после нажатия 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

vivod:
mov byte ptr [si],10
mov byte ptr [si+1],13
mov byte ptr [si+2],'$'
mov ah,9h
lea dx,b
int 21h
exit:
Ret

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!

Так как задача похожа на Лаб. Работу в листинге исходного текста, нет комментариев и плюс алгоритм был придуман по принцепу "Что первое пришло в голову, то и написал".

CSEG segment
assume cs:CSEG,ds:CSEG,ss:CSEG,es:CSEG
org 100h
Begin:
;================================
;Input in Buffer:

mov ah,09h
lea dx,MS0
int 21h
;================================
;Out Message:
mov ah,0ah
lea dx,MAX
int 21h
;================================
mov bx,dx
inc bx
;================================
xor cx,cx
mov ax,cx
mov dh,24h
mov cl,[bx]
add bx,cx
mov [bx+1],dh
;================================
@1:
mov dl,[bx]
cmp dl,20h
jne @@2
mov [bx],dh
push bx
inc ax
@2:
dec bx
loop @@1
;================================
push bx
inc ax
xchg ax,cx
;================================
;Out String:
inc cx
jmp @@4
@3:
mov ah,09h
pop dx
inc dx
int 21h
@4:
mov al,0dh
int 29h
mov al,0ah
int 29h

loop @@3
;================================
ret ;exit
;================================
MS0 db 'Input_String: $'
;================================
MAX db 20
LEN db ?
BUFF db 21 dup(?)
;================================
CSEG ends
end Begin

С, Уважением MnEm0n!C.

---------
Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: Студент)
Ответ отправлен: 31.05.2006, 04:37


Вопрос № 44.711
Есть программа на ассемблере.

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

Может данная книга ответит на ваш вопрос.

С, Уважением MnEm0n!C.


---------
Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: Студент)
Ответ отправлен: 31.05.2006, 06:17

Отвечает: Ayl
Здравствуйте, Стас М.!

Информация о настройках сегментных адресов сохраняется в заголовке EXE-файла. Там есть relocation-table, которая содержит полный адрес элементов программы, которые требуют настройки в момент загрузки программы в память. Программа грузится одним куском, начиная с некоторого сегментного адреса. Это адрес называется базовым. ОС считывает элементы relocation-table и добавляет базовый адрес к значению, находящемуся по считанному адресу.
Т.е. в твоем случае вторая команда будет представлять собой загрузку в регистр AX базового адреса.
---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Академик)
Россия, Санкт-Петербург
ICQ: 5163321
----
Ответ отправлен: 31.05.2006, 15:55


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное