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

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


Информационный Канал Subscribe.Ru

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

Выпуск № 453
от 25.12.2002, 19:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 2265
Отправлено ответов: 6835
Активность: 301.7 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Maverick
Статус: Профессиональный
Общий рейтинг: 139.09
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 118.78
[Подробней >>]
VicSimon
Статус: Начальный
Общий рейтинг: 104.38
[Подробней >>]
 
Traish
Статус: Доверительный
Общий рейтинг: 130.18
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 148.17
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 151.93
[Подробней >>]
 
Andrew Vext
Статус: Доверительный
Общий рейтинг: 107.76
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 127.68
URL: моя рассылка по Protected Mode
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 117.4
[Подробней >>]
 
LIFO
Статус: Профессиональный
Общий рейтинг: 120.04
URL: наш сайт
Телефон: 8 01710 24758
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 121.73
[Подробней >>]
igorash
Статус: Профессиональный
Общий рейтинг: 115.04
Телефон: 8(903)251-86-01
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 2215. Доброго времени суток хлопцы!!! Вот такая прога: Расставте мне в этой проге все по полочкам(объяс... (ответов: 3)
Вопрос № 2216. У меня два вопроса: 1). Программа находит файл. Перемещает его имя в переменную. Добавляет в хвост п... (ответов: 1)
Вопрос № 2217. Приветствую всех. Прошу ответить на этот вопрос тех экспертов, кто знаком с таким языком программ... (ответов: 1)
Вопрос № 2218. Здравствуйте, эксперты в своем деле! Необходимо написать программу по Windows. Она должна проверять ... (ответов: 1)
Вопрос № 2219. Мой Вопрос был № 2210 ..masquer ... продолжим >>Заразить?? Как это делает вирус ... при запуске exe... (ответов: 1)
Вопрос № 2220. Здравствуйте, уважаемые господа Эксперты!!! Подскажите пожалуйста алгоритм умножения 16bit на 16bit ... (ответов: 3)
Вопрос № 2221. Люди расскажите о связи асм и си. Надо написать прогу на этих языках (на асм функцию) не используя д... (ответов: 2)
Вопрос № 2223. Добрый, уважаемые эксперты и все, все!!! Я слепил микропроцессорный контроллер на основе МП КР... (ответов: 3)
Вопрос № 2224. Подскажите пожалуйста, где в с сети можно найти информацию по работе с MBR и создании загрузчков, а ... (ответов: 2)
Вопрос № 2225. Ув. эксперты. Есть задача написать резидент, который будет отслеживать состояние заданного файла (ес... (ответов: 3)
Вопрос № 2226. Доброго времени суток, вот столкнулся с достаточно неожиданной проблеммой и зашёл в тупик. если в пр... (ответов: 4)
Вопрос № 2227. Спасибо, с этим более или менее понятно, но вот мне не понятен принцип проверки пароля (с этим вообщ... (ответов: 1)

Вопросов: 12, ответов: 25


 Вопрос № 2215

Доброго времени суток хлопцы!!!
Вот такая прога:

Расставте мне в этой проге все по полочкам(объясните!!!)пожалуйста!!!!


Приложение:


Вопрос отправлен: 20.12.2002, 20:25
Отправитель: MOZART (radmir@newmail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Maverick

Приветствую Вас, MOZART!
Ну дак это же Калашникова прога из рассылки.
Наколка для AFD и TD.
Он же там и так все расписал.
Повторяться чтоли???


Ответ отправлен: 21.12.2002, 08:33
Отправитель: Maverick


Отвечает ASMодей

Доброе время суток, MOZART!
Чего тут раскладывать?
Устанавливаеется границу стека на адрес после первой команды
INT 20h. В стек заносится число 9090h и таким образом затирается
команда INT 20h (так как при занесении в стек числа, граница стека
сдвигается в сторону уменьшения адресов). А так как число 9090h -
это не что иное как две команды NOP, то при испольнении процессор
просто перейдет через них к месту программы, где выводится строка.


Ответ отправлен: 21.12.2002, 09:47
Отправитель: ASMодей


Отвечает VicSimon

Добрый день, MOZART!
1. Настраиваем вершину стека на метку Lab_1
2. Командой push ax (сначала sp = sp - 2, sp указывает на начало команды int 20h, потом mov ss:[sp],ax) заносим вместо команды int 20h (размер 2 байта) две команды NOP (код 90h)
3. С метки Lab_1 команды не меняются.
Это пример самомодифицирующегося кода.

Ответ отправлен: 23.12.2002, 06:10
Отправитель: VicSimon


 Вопрос № 2216

У меня два вопроса:
1). Программа находит файл. Перемещает его имя в переменную. Добавляет в хвост переменной символы "0" и "$", чтобы потом прочитать имя на экран и открыть файл. Мои код оказался неработоспособным, приходится имя файла перемещать в другую переменную, которая по данным имеет в своем 13 байте символ "0". Вот кусок исходника:
;---------------------------------------------------
mov ah,4eh ;----------- поиск --------------
lea dx,FileSh
xor cx,cx
int 21h ;-------------------------------
lea si,cs:[0080h+1eh] ; узнаю название файла...
lea di,FileNb
mov cx,12
rep movsb
mov FileNb[13],0h ; добавляю в имя "0" и...
mov FileNb[14],"$" ; ... "$"
mov dx,offset FileNb ; имя файла на монитор
call printman
lea si,FileNb ; название файла в "другую" переменную
lea di,FileN
mov cx,15
rep movsb
mov ah,3dh ;открываю файл из "другой" переменной
mov dx,offset FileN
xor cx,cx
int 21h
FileN db "12345678.txt",0
FileNb db ?
FileSh db "*.txt"
;----------------------------------------------------
Почему программа не хочет открывать то имя, которое находится в переменной FileN, ведь там в 13 байте тоже находится "0"?
2). Что если в памяти найти Вин и в середине кода поставить int 20h? Он вернется в Дос?
Спасибо



Вопрос отправлен: 20.12.2002, 21:51
Отправитель: Faraon

[Следующий вопрос >>] [Список вопросов]

Отвечает ASMодей

Здравствуйте, Faraon!
Ты, похоже, запутался с индексами массивов.
Если ты копируешь в строку 12 байт, то это означает, что ты
копируешь байты с 0 по 11. То есть 0 нужно ставить не в FileNb[13],
а в FileNb[12], соответственно и символ '$' - не в 14, а в 13.
И при копировании имени файла в "другую" переменную, достаточно
скопировать не 15 байт, а лишь 13.
И еще: надеюсь ты понимаешь, что копируя имя файла в FileNb, ты
этим самым затираешь маску файла в FileSh, так как ты отвел под
FileNb только 1 байт.


Ответ отправлен: 21.12.2002, 09:48
Отправитель: ASMодей


 Вопрос № 2217

Приветствую всех.
Прошу ответить на этот вопрос тех экспертов, кто знаком с таким языком
программирования как Prolog. В частности использую Turbo Prolog 2.0...
1) Есть, например, такое правило:
a(B):-retract(db1(1)), assert(db1(2)), c(B), db1(X), abc(X).
(Это просто пример!)
Так вот, если c(B) будет ложным, то правило также будет ложным и часть после него не
выполнится. Это очевидно. А вот вопрос такой - мы изменили предикат db1 в базе данных
или нет? Или произошел откат и опять восстановилось db(1) ?? Очень прошу ответить,
срочно нужно!
2) Вообще, может, кто знает, где можно достать Turbo Prolog версии выше 2.0? Или хотя бы
консольный его компилятор, потому как его IDE жутко неудобное...
3) Будет вообще здорово, если кто-то популярно и доступно объяснит как происходит backtracking...
4) И еще - в форуме про Prolog Александр сказал, что Turbo Prolog не вполне соответствует
стандарту Prolog. Может, кто объяснит - почему?
Огромная просьба тем, кто захочет дать ссылки - давайте, pls, конкретные ссылки...
Спасибо...



Вопрос отправлен: 20.12.2002, 22:09
Отправитель: baldr (baldr@pisem.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает VicSimon

Приветствую Вас, baldr!
2) Версии Turbo Prolog'а старше 2.0 не сущестует. Есть классная вещь - BProlog. Консольный, поддерживает двухсторонний интерфейс с C и Java.
Есть Здесь

Ответ отправлен: 23.12.2002, 06:01
Отправитель: VicSimon


 Вопрос № 2218

Здравствуйте, эксперты в своем деле!
Необходимо написать программу по Windows.
Она должна проверять бит четности в каждом байте поступающего с com-порта и разделять эти байты на 2 массива:
- с битом четности = 1
- с битом четности = 0
Имеются сведения, что это не так просто и возниикает некоторый гемор. Так что может кто сталкивался с этим.
Может кто направит куда копать или док по этой теме на мыло скинет.
На всякий слечай: nicki1@mail.ru



Вопрос отправлен: 20.12.2002, 23:16
Отправитель: Nicki (Nicki1@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Traish

Добрый день, Nicki!
Я тебе доку на мыло скинул, не знаю подойдет или нет.
ЗЫ мыл мой на всякий случай - traish@mail.ru.

Ответ отправлен: 21.12.2002, 07:41
Отправитель: Traish


 Вопрос № 2219

Мой Вопрос был № 2210 ..masquer ... продолжим
>>Заразить??
Как это делает вирус ... при запуске exe запускается 2 проги, нормальный код и собственно
сам вирь
>>При помощи асм?
Знаю что надо поставить jmp, а это как бы к asm-у вроде относиться.....
>>Еще и с примерчиком? Честно говоря, я в вопросе ничего не понял.
>>Ты уж потрудись, напиши в чем конкретно трудности. Ну, и изучай формат РЕ.
Да вот я и хочу чтобы вы объяснили мне нормально формат pe(/ссылочка),
а для наглядности и попросил код(/ссылочка)...
Труднось в том что я никак не могу написать ...
Помогите... а..
lamachok
lamachok@mail.ru



Вопрос отправлен: 20.12.2002, 23:49
Отправитель: lamachok

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Добрый день, lamachok!
Ситуация такая: с нуля рассказывать о формате РЕ у меня ни желения, ни возможности нет, посему мой тебе совет - изучай самостоятельно (туториалов, даже на русском - море), если что-то конкретное непонятно будет - задашь вопрос.
По другому - никак...

Ответ отправлен: 21.12.2002, 16:12
Отправитель: masquer


 Вопрос № 2220

Здравствуйте, уважаемые господа Эксперты!!!
Подскажите пожалуйста алгоритм умножения 16bit на 16bit для МП КР580ВМ80. Никогда не писал под ентый проц (Хотя предмет соответствующий был в универе, но видимо я тогда занимался несколько другими делами), но вот сестра попросила сделать курсак. Почитал доку по нему. И не нашел среди команд заветной команды умножения. Неужто придется сложением? Но я всетаки думаю что ларчик изящнее открывается.
Может посоветуете неплохой эмулятор? Слил только что 3 штуки. ОТСТОЙ! :( Эмулятор додумались написать, а шоб на человеческом языке исходник сохранять, или распечатать - слабо. Или надо после утомительного процесса ввода опкодов еще с ручкой сидеть и переписывать текст набраной проги.
Заранее благодарю.



Вопрос отправлен: 21.12.2002, 02:43
Отправитель: Бадян (sba@litech.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Добрый день, Бадян!
Команды умножения на i8080 нет. Тут есть два варианта. Первый - если необходимо просто делать умножение, то можно и циклом (сложением) - я в свое время так сдавал лабораторную по i8080. Это будет несколько небыстро, но зато просто.
Если этот вариант не подойдет - тогда надо писать прогу. Попробую тебе помочь - см. приложение.
Из эмуляторов посоветую эмулятор спектрума R80 (там стоял Z-80, который полностью совместим с i8080 + новые команды), потому что там есть неплохие ассемблеры (XAS) и отладчики (STS). Хотя в R80 есть свой встроенный отладчик...


Приложение:

Ответ отправлен: 22.12.2002, 13:55
Отправитель: Bob Johnson


Отвечает Andrew Vext

Доброе время суток, Бадян!
В КР580ВМ80А действительно нет команды умножения. Проще всего реализовать стандартный алгоритм "сдвиг-сложение".


Ответ отправлен: 23.12.2002, 12:41
Отправитель: Andrew Vext


Отвечает Broken Sword

Доброе время суток, Бадян!
на контроллере "Электроника КI-20", на котором стоят 580 есть стандартная библиотека :) арифметических операций.
За умножение отвечает процедура MUMUN. Перед ее использованием нужно посредством команд переноса трехбайтовых переменных (QUABC и WRABC) переместить их (переменные) по определенным адресам. Вообщем, у меня есть код лаб, думаю, разберешься... (см. в ящике CPU-Лаб раб №5)
p.s. а команды умножения таки нет... (не говоря уже про деление...)

Ответ отправлен: 21.12.2002, 09:21
Отправитель: Broken Sword


 Вопрос № 2221

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



Вопрос отправлен: 21.12.2002, 04:44
Отправитель: Sephiroth (sephiroth7@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Здравствуйте, Sephiroth!
Связь у тебя может быть или через DLL или через obj.
Как будут передаваться параметры - зависит от того, какой вид вызова функции ты укажешь в С. Например:
extern "C" int _stdcall myfunc (int, int);
тип stdcall означает передачу параметров через стек, начиная с последнего, очистка стека производится вызванной функцией. Результат передается в регистре eax. Т.е. на асме ты можешь ее описать так:
myfunc proc
push ebp
mov ebp, esp
par1 equ dword ptr [ebp + 8]
par2 equ dword ptr [ebp + 12]
...
mov eax, [par1]
...
mov eax, результат функции
pop ebp
ret 8


Ответ отправлен: 22.12.2002, 13:55
Отправитель: Bob Johnson


Отвечает Ayl

Приветствую Вас, Sephiroth!
Очень просто. Все параметры передаются через стек, результат возвращается в регистрах.
Кроме этого нужно использовать директиву extern в модуле на Си и директиву PUBLIC в модуле на асме.
Возвращаемые значения располагаются:
Тип Местонахождение
unsigned char AX
char AX
enum AX
unsigned short AX
short AX
unsigned int AX
int AX
unsigned long DX:AX
long DX:AX
float ST(0)
double ST(0)
long double ST(0)
near * AX
far * DX:AX
Структуры длиной 1 или 2 байта возвращаются в AX, 4 байта - в DX:AX. Для остальных структур (в т.ч. и для 3-хбайтовой структуры) вызывающая процедура (!) должна выделить место для возвращаемого значения и передать его адрес в вызываемую функцию как дополнительный "скрытый" параметр.
Параметры передаются одним из 2-х способов. Какой именно будет использован способ зависит от описания функции. Это или cdecl (используется по умолчанию), или pascal.
При использовании cdecl параметры помещаются в стек "справа налево", т.е. в порядке, обратном их описанию в прототипе функции. Параметр, описанный в прототипе первым, в стеке будет находится ближе всего к вершине.
При использовании описания pascal передача параметров происходит наоборот, "слева направо". Первый параметр окажется дальше всего от вершины стека.
Кроме этого, при использовании cdecl очисткой стека от параметров занимается вызывающая программа, а при использовании pascal - вызываемая.
Стек после вызова процедуры выглядит так:
SP -> [адрес возврата]
[параметры]
Адрес возврата в зависимости от типа вызова (near или far) будет занимать 2 или 4 байта.
Работу с параметрами лучше всего осуществлять с помощью адресации через регистр BP.
И еще. В ассемблерной процедуре необходимо оставить без изменения регистры BX, SI, DI, BP, DS.
В приложении см.пример для моделей памяти TINY, SMALL и COMPACT. Для остальных моделей надо ко всем смещениям прибавить 2 (адрес возврата увеличивается на 2).
Если бы использовался прототип:
extern int pascal Sum (int A, int B);
то надо было внести следующие изменения в процедуру на асме:
1. Из имени процедуры убрать знак подчеркивания.
2. Изменить описания параметров:
A EQU [BP + 6]
B EQU [BP + 4]
3. Заменить ret на команду ret 4 (удалить из стека 4 байта).


Приложение:

Ответ отправлен: 23.12.2002, 15:12
Отправитель: Ayl


 Вопрос № 2223

Добрый, уважаемые эксперты и все, все!!!
Я слепил микропроцессорный контроллер на основе МП КР580ВМ80А и другой всячины наших микросхем. Память ОЗУ=4Кб, а ПЗУ=2Кб. Эта система контролирует питание елюдвигателя и тахогенератора станка. Уровень управляющего напряжения равен 4.06В, а время задержки 0.36с.
В приложении есть подпрограммы с описанием, в которых есть непонятные мне моменты.
В связи с этим возникли следующие вопросы:
1) как расчитать время задержки?
2) сколько будет циклов?
Растолкуйте пожалуйста. А то доцент, который составлял методичку, вообще в этом не понимает или был в изрядно пьяном состоянии. Там вообще ничего непонять. Вот приходится собирать с мира по нитке.
Заранее благодарен.


Приложение:


Вопрос отправлен: 21.12.2002, 15:56
Отправитель: duser (selfpolice@e-mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Broken Sword

Приветствую Вас, duser!
хех! веселая прога, и доцент у вас веселый...
значит, цикла всего три. Самый вложенный (который по dec H) - выполниться FAh раз, затем идет средний (который по dec D) - выполниться 64h раза, и все это дело выполниться FF раз (по dec B). Итого имеем:
команды dec H и jnz m1 выполнятся FA*64*FF раз КАЖДАЯ = 6375000 раз (десятичное)
команды dec D и jnz m2 выполнятся 64*FF раз каждая = 25500 раз (десятичное)
команды dec B и jnz m3 выполнятся FF раз каждая = 255 раз (десятичное).
(это я кстати тебе задержку расчитываю)
ну еще нада подмахнуть команды MVI в регистры D и H, высчитываешь сколько все это тактов и - ура! можешь подсчитать время выполнения
ну и циклов здесь три как ты видишь

Ответ отправлен: 21.12.2002, 16:19
Отправитель: Broken Sword


Отвечает Bob Johnson

Приветствую Вас, duser!
Чтобы рассчитать время задежки, ты должен выбрать один из двух способов:
1. Если у тебя в устройстве есть таймер, который генерирует переодические запросы прерываний, то можно время подсчитывать в процедуре обработки прерываний (так работают АОНы Русь).
2. Если ничего такого нет, то остается одна альтернатива - просто выполнять пустые циклы. Для этого нужно знать тактовую частоту процессора, время выполнения каждой команды и убедиться, что на вход RDY ГФ24 ничего не поступает (иначе будут дополнительные задержки). Этот вариант не очень хороший, потому что легко ошибиться в рассчетах и во время задержки нельзя выполнять другие операции, так что если ты спаял сам себе контроллер, то добавь в него 8253 (ВИ53).


Ответ отправлен: 23.12.2002, 17:40
Отправитель: Bob Johnson


Отвечает Maverick

Приветствую Вас, duser!
Ты бы еще методичку показал, было бы круто.


Ответ отправлен: 22.12.2002, 11:02
Отправитель: Maverick


 Вопрос № 2224

Подскажите пожалуйста, где в с сети можно найти информацию по работе с MBR и создании загрузчков, а также по работе с дисковой подсистемой компьтера.



Вопрос отправлен: 21.12.2002, 15:57
Отправитель: BOTANIC (bevs@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает LIFO

Приветствую Вас, BOTANIC!
Посмотри на codenet.ru
http://sources.codenet.ru/search.php?q=%22%C2%E8%F0%F3%F1%FB%22%2C+%22%D7%E5%F0%E2%E8%22%2C+%22%C4%F0%E0%EA%EE%ED%FB%22+%E8+%F0%E5%E7%E8%E4%E5%ED%F2%FB+%ED%E0+%F1%EB%F3%E6%E1%E5+%EF%F0%EE%E3%F0%E5%F1%F1%E0.&x=9&y=8

Ответ отправлен: 22.12.2002, 17:11
Отправитель: LIFO


Отвечает Maverick

Здравствуйте, BOTANIC!
Лови доку на мыло.


Ответ отправлен: 22.12.2002, 11:03
Отправитель: Maverick


 Вопрос № 2225

Ув. эксперты.
Есть задача написать резидент, который будет отслеживать состояние заданного файла (если он существует, то копировать в другой файл его содержимое плюс дописывать туда определенную дополнительную информацию).
Написал резидент (с помошью перехвата int 28h, т. е. все файловые операции производятся в тот момент, когда DOS свободна), вроде бы все нормально. Но есть проблема: работает он только в реальном режиме. Создается впечатление, что прерывание 28h в защищенном режиме не генерируется вообще. Это неприемлемо, так как отслеживать нужно состояние файла, создаваемого программой, работающей в защищенном режиме.
Вопрос: есть ли аналог прерыванию 28h для защищенного режима работы (и если есть, то как им пользоваться); если нет, то каким образом можно определить, свободна ли DOS (можно или нельзя производить операции файлового ввода-вывода), учитывая то, что резидент должен работать тогда, когда запущена другая программа, работающая в защищенном режиме.
Заранее спасибо.



Вопрос отправлен: 21.12.2002, 17:54
Отправитель: Dennis

[Следующий вопрос >>] [Список вопросов]

Отвечает Traish

Приветствую Вас, Dennis!
Так в защищенном режиме и не должны выполнятся прерывания DOS, потому что DOS является программой реального режима и использует сегментную адресацию реального режима, а в протмоде в сегментные регистры записываются селекторы. Кроме того инструкция программного прерывания int приведет к совершенно другим результатам, чем в реальном режиме.


Ответ отправлен: 22.12.2002, 18:33
Отправитель: Traish


Отвечает Dark_Lord

Доброе время суток, Dennis!
Дело в том, что в защищённом режиме работа всех прерываний зависит только от фантазии программиста, который создаёт среду защищённого режима, поэтому сказать точно какое прерывание что делает в твоём случае достаточно трудно!

Ответ отправлен: 21.12.2002, 18:37
Отправитель: Dark_Lord


Отвечает Broken Sword

Доброе время суток, Dennis!
хех! вот ты загнул... ДОС - однозадачная ОС, защищ. режим предназначен для многозадачных ОС, а нахрена им (многозадачным ОС) флаги занятости и т.п. int 28h? Ядро само все распределит, и каждый дорвется до своего куска, поэтому никакого аналога int 28h нет и быть не может, здесь другая идеология
странно другое - в режиме эмуляции MSDOS эмулируется также и int 28h. Другое дело, что ты в NT или XP это пытаешься сделать - тут даже int 15 не работает, не говоря про 28
попробуй через флаг занятости это дело организовать.

Ответ отправлен: 21.12.2002, 19:23
Отправитель: Broken Sword


 Вопрос № 2226

Доброго времени суток, вот столкнулся с достаточно неожиданной проблеммой и зашёл в тупик. если в программе под дос переключить текущий диск на дискету когда дискета не вставлена, то выводится сообщение об ошибке ввода дискеты с соответсвующими (a)Abort (r)Retry.. при нажатии аборт пограмма выходит в дос. Так вот у меня вопрос, как проверить есть ли внутри дискета или нет!? Тот же самый вопрос, но о CD. Надеюсь на Вашу помощь, Dark_Lord



Вопрос отправлен: 21.12.2002, 18:34
Отправитель: Dark_Lord

[Следующий вопрос >>] [Список вопросов]

Отвечает Broken Sword

Доброе время суток, Dark_Lord!
ну как - очень просто. по коду ошибки, возвращаемом в регистре AX.

Ответ отправлен: 21.12.2002, 19:23
Отправитель: Broken Sword


Отвечает igorash

Добрый день, Dark_Lord!
Попытайся с нее что-нибудь прочитать, но не через ДОС, а через int 13h, потом анализируй.... :)


Ответ отправлен: 21.12.2002, 21:08
Отправитель: igorash


Отвечает Maverick

Здравствуйте, Dark_Lord!
А пробовал отлавливать коды ошибок int 13h?


Ответ отправлен: 23.12.2002, 07:09
Отправитель: Maverick


Отвечает Ayl

Доброе время суток, Dark_Lord!
Напиши обработчик прерывания 24h (критическая ошибка). В своем обработчике ты просто должен вернуть одно из следующих значений в регистре AL:
0 - игнорировать ошибку
1 - повторить операцию
2 - прервать выполнение (будет вызвано прерывание 23h)
3 - вернуть приложению признак неуспешного выполнения
Лучше всего использовать значение 3. Надеюсь, что у тебя DOS версии не ниже 3.0 :-)


Ответ отправлен: 23.12.2002, 15:19
Отправитель: Ayl


 Вопрос № 2227

Спасибо, с этим более или менее понятно, но вот мне не понятен принцип проверки пароля (с этим вообще никогда неработал). Если знаете то подскажите как работает set, где запоминаются данные как можно к ним обращаться.
>Помогите плз написать прогу на асм'е:
>резидентная программа, которая будет отлавливать нажатие >alt-ctrl-del и осуществлять блокировку рабочей станции до >ввода пользователем пароля. Пароль сохранять (и изменять) >как переменную окружения (см. команду set). Если >соответствующая переменная (например, passwd) не >определена, паролем считать пустую строку
>Буду премного благодарен тому кто поможет.
{Отвечает Bob Johnson
Приветствую Вас, Hammer!
Тебе надо вешаться на прерывание 9 (как я понимаю, речь идет про ДОС), потому что оно позволит перехватить ctrl-alt-del. В его обработчике необходимо анализировать scan-codы, которые поступают от клавиатуры (in al, 60h в обработчике прерывания) и запоминать их. Потом обычно ты должен будешь вызвать старый обработчик, если только не отловил последнюю из 3 клавиш (иначе произойдет стандартная реакция на эти кнопки). Когда же будет вызвана именно эта комбинация - сбросишь контроллер клавиатуры и прерываний (см. вопрос № 2150 - там в вопросе это есть), после чего перейдешь в свой кусок программы, который будет использовать твой же обработчик 9 прерывания (вот тут старый вызывать не надо) для ввода пароля. Придется использовать scan-codы.}



Вопрос отправлен: 21.12.2002, 19:48
Отправитель: Hammer

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Добрый день, Hammer!
Set изменяет значения переменных окружения. Ты можешь получить сегментный адрес блока переменных окружения - он находится по адресу 2Ch в PSP твоей программы. Т.е. если у тебя com файл, то можно так:
mov ax, ds:[2Ch]
mov es, ax
теперь es:[0] и дальше содержат переменные окружения в формате:
переменная=значение\0
...
в конце
два нуля подряд.
Чтобы получить значение какой-либо конкретной переменной, тебе будет нужно самому просматривать все окружение.


Ответ отправлен: 23.12.2002, 17:41
Отправитель: Bob Johnson



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (39)
C / C++ (29)
Perl (5)
Delphi (21)
Pascal (23)
Basic / VBA (11)
Java / JavaScript (6)
PHP (4)
MySQL / MSSQL (4)
Пользователю
Windows 95/98/Me (32)
Windows NT/2000/XP (27)
"Железо" (31)
Поиск информации (13)
Администратору
Windows NT/2000/XP (10)
Linux / Unix (13)
Юристу
Гражданское право (7)
Семейное право (3)
Трудовое право (4)
КоАП (2)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное