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

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


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

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

Выпуск № 425
от 24.11.2002, 19:00

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


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

keleb-glin
Статус: Доверительный
Общий рейтинг: 114.75
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 119.82
[Подробней >>]
LIFO
Статус: Профессиональный
Общий рейтинг: 126.18
URL: наш сайт
Телефон: 8 01710 24758
[Подробней >>]
 
Maverick
Статус: Профессиональный
Общий рейтинг: 138.09
URL: Задачи по ассемблеру
Телефон: 89039415024 (BiLine GSM)
[Подробней >>]
Eugene
Статус: Опытный
Общий рейтинг: 111.4
URL: мощный файловый архив
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 129.75
URL: моя рассылка по Protected Mode
[Подробней >>]
 
masquer
Статус: Профессиональный
Общий рейтинг: 151.36
[Подробней >>]
Sensey
Статус: Профессиональный
Общий рейтинг: 122.74
URL: Страничка рассылки по Паскалю
Телефон: +38 (0572) 41-76-04 дом.
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 154.4
[Подробней >>]
 
CodeBuilder
Статус: Начальный
Общий рейтинг: 103.61
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 117.17
[Подробней >>]
igorash
Статус: Профессиональный
Общий рейтинг: 115.93
Телефон: 8(903)251-86-01
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 125.28
[Подробней >>]
baldr
Статус: Профессиональный
Общий рейтинг: 114.42
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
DiGiT[old]
Статус: Опытный
Общий рейтинг: 107.24
[Подробней >>]
 
Beeblebrox
Статус: Профессиональный
Общий рейтинг: 112.27
URL: Beeblebrox / TMA HomePage
[Подробней >>]
St
Статус: Опытный
Общий рейтинг: 116.55
[Подробней >>]


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

Вопрос № 1863. Использую рассылку Калашникова в "обучительных" целях. Там есть одна прога, которая грузит... (ответов: 5)
Вопрос № 1864. Написал брутфорс для одного крякми, Работает он ~10000 комбинаций/0.8сек. на P4 2,4 Northwood, Asus ... (ответов: 6)
Вопрос № 1865. ПривеТ !!! Вот 5 кусочков кода(Приложение) По какому сегменту каждый раз будет адресоваться проц? Сл... (ответов: 6)
Вопрос № 1866. Здраствуйте господа прогеры. 1. Как используя WinApi или еще чемнить, перевести монитор(HDD) в ждущи... (ответов: 1)
Вопрос № 1867. Уважаемые эксперты, я сейчас прохожу 32 номер рассылки "Ассемблер? Это просто! Учимся программи... (ответов: 3)
Вопрос № 1868. Уважаемые эксперты здравствуйте! скажите пожалуйста можно ли получить прямой доступ к памяти дисплей... (ответов: 2)
Вопрос № 1869. Здравствуйте Bob Johnson. Вот мой адрес: kostin@nm.ru. С уважением, Николай.... (ответов: 1)
Вопрос № 1870. Здравствуйте! Я хотел бы задать вопрос: мне нужно перевести целое число, представленное в символьном... (ответов: 1)
Вопрос № 1871. Доброго времени суток господа! Помогите!!! Времени нет разбираться с макросом macro icon group,label... (ответов: 2)
Вопрос № 1872. Привет эксперты. Об'ясните пожалуста masm 6.x для доса а 7.x для win так ? Плиз оцените мою прогу, о... (ответов: 2)
Вопрос № 1873. Здравствуйте товарищи! Вот у меня тут ваще... Прога должна высветить "Calendar for year xxxx&qu... (ответов: 7)
Вопрос № 1874. Здравствуйте эксперты! Подскажите, кто знает, где найти информацию о драйверах устройств *.SYS (как ... (ответов: 2)
Вопрос № 1876. привет эксперты, 1.почему не работ. CtrlAltDel, если поместить в стек m1: p 0 call GetModuleHandle... (ответов: 2)
Вопрос № 1877. Здравствуйте уважаемые господа эксперты. Вот столкнулся с такой проблемкой: нужно написать подпрогра... (ответов: 2)
Вопрос № 1878. Здравствуйте уважаемые эксперты! Подскажите пожалуйста, как мне установить MASM 6.12 на свой компью... (ответов: 1)
Вопрос № 1879. Уважаемые эксперты у меня возникла проблема: как вставить обычный текст в звуковой файл - PCM. Главн... (ответов: 1)
Вопрос № 1880. Уважаемые эксперты, я нашел архив рассылки про dos и начал его изучать. В связи с тем вопросы: 1.Поч... (ответов: 9)
Вопрос № 1881. Привет! Это не персональный вопрос, просто я его не всем посылаю... Только 4 ответа на вопрос номер ... (ответов: 5)
Вопрос № 1882. Здравствуйте, уважаемые эксперты. Читаю рассылку, но то ли я не заметил, то ли нет на мой вопрос отв... (ответов: 4)

Вопросов: 19, ответов: 62


 Вопрос № 1863

Использую рассылку Калашникова в "обучительных" целях. Там есть одна прога, которая грузит саму себя поверх своего кода.
Вот частично цитируемый кусочек:
;--------------------------------------
Begin:
...
mov ah,3Fh ; начинаем его читать
mov cx,offset Finish-100h ; Записываем длину нашей программы (кол-во читаемых байт),
mov dx,offset Begin ; и читаем файл в память,
int 21h ; начиная с указанного адреса.
...
Finish equ $
;--------------------------------------
Я не понял, это dx указывает на то, что она будет читать себя поверх своего кода?
Кстати, на вопрос № 1788 мне понравился ответ ASMодея и Vitya. Круто! И еще. Надо было предусмотреть такие ситуации и дать на выбор вместо "добрый день" там, "доброе время суток" альтернативу - "Сам такой" или че-нить в этом роде.



Вопрос отправлен: 19.11.2002, 19:16
Отправитель: Faraon (qwqwqwooo@rambler.ru)

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

Отвечает keleb-glin

Здравствуйте, Faraon!
В данной проге dx указывает на адрес, с какого места файл будет считан в память. В этой проге в dx пишется смещение метки Begin, т.е. начало нашей программы, и файл загрузится поверх нашего кода.

Ответ отправлен: 19.11.2002, 22:26
Отправитель: keleb-glin


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

Добрый день, Faraon!
Регистр DX указывает на адрес памяти по которому будет прочитан
файл, а поскольку по этому адресу находится сама программа, то
она будет заменена этим файлом.


Ответ отправлен: 20.11.2002, 06:21
Отправитель: ASMодей


Отвечает LIFO

Добрый день, Faraon!
dx указывает на начало вашей проги
т.е. dx - 0100h
если у вас com-прога начинается так
CSEG segment
org 100h
begin:


Ответ отправлен: 21.11.2002, 16:45
Отправитель: LIFO


Отвечает Maverick

Здравствуйте, Faraon!
Да, DX указывает на буфер для чтения данных.


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


Отвечает Eugene

Здравствуйте, Faraon!
Ты прав, только на место, куда будут считываться данные указывают пара регистров: DS:DX. DS у нас указывает на начало программы, а DX смещение метки begin от начала программы.

Ответ отправлен: 20.11.2002, 08:59
Отправитель: Eugene


 Вопрос № 1864

Написал брутфорс для одного крякми, Работает он ~10000 комбинаций/0.8сек. на P4 2,4 Northwood, Asus P4S533, DDR 333 K4H280838D-TCB3 Samsung 256MB, но... на P2 400 он работает в ~5 раз быстрее!!! (почему?). Вопр2. Когда он работает он совершенно не загружает комп, т.е. я запущу ворд, фотошоп, q3. все будет шоколадно. как мне сделать так, чтобы брут использовал ресурсы по максисмуму, как например RAR Password Cracker. А в досе он работает еще медленнее раз в 6. Help! Сори за все.


Приложение:


Вопрос отправлен: 19.11.2002, 19:47
Отправитель: Igi(t)32 (igitname@mtu-net.ru)

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

Отвечает Broken Sword

Приветствую Вас, Igi(t)32!
Во-первых насчет того, почему на пне 2 оно быстрее, чем на IV. Это странно :)
хотя команда ror (и вообще все команды сдвигов) на четвертых пнях занимают больше тактов, чем на предыдущих моделях, поэтому их рекомендовано заменять на сложения.
Да и вообще, здесь в основном все повязано на кэш.
Во-вторых, я не уверен в чистоте твоего эксперимента - небось на PIV стояла ось XP да? А на втором пеньке - 9x? Так че ж ты хочешь - конечно, в XP ДОС-окно жрет в 100 крат больше ресурсов. Я например, при запуске одного дос-окна загрузки 32-х разр. hlp-файла дожидаюсь секунд 15 ато и больше.
блин, что у тебя за метки, все с баксами... очень оригинально. мда. и вообще, эту прогу ЛУЧШЕ всего запускать в "голом" реальном режиме. Вот там я сомневаюсь, что на IV пне она попустится.

Ответ отправлен: 19.11.2002, 20:26
Отправитель: Broken Sword


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

Добрый день, Igi(t)32!
Wow! Тебе несказанно повезло - ты нашел тот самый волшебный
компьютер на котором все программы просто летают и без всяких
багов :)


Ответ отправлен: 20.11.2002, 06:22
Отправитель: ASMодей


Отвечает Eugene

Доброе время суток, Igi(t)32!
По второму вопросу. Если у тебя Win2k или WinXP, то просто жмёшь CTRL ALT DEL, далее Task Manager, в нём щёлкаешь правой кнопой крысы на твоём прожекте и выставляешь Priority. Time Critical не советую, Worda ты можешь и не дождаться.

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


Отвечает masquer

Приветствую Вас, Igi(t)32!
1. Программа 16-разрядная, П4 плохо работает на таком коде
2. Куча переходов и прерываний (которые тоже являются переходами)
3. Здесь не очень видно, но код и данные, скорее всего, не выровнены - непопадание в кеш.
Сам алгоритм не разбирал, но что-то говорит мне что тут и генератор можно сделать. Это сложнее конечно.
По приоритету, есть функция SetThreadPriority. Делай программу под винду, запускай отдельным потоком и задавай THREAD_PRIORITY_TIME_CRITICAL :)

Ответ отправлен: 20.11.2002, 10:47
Отправитель: masquer


Отвечает Sensey

Здравствуйте, Igi(t)32!
Вот я не знаю, почему на 4-м он медленнее, скорее всего из-за 16-битного кода, а чтобы полностью загружал - сделай так. В свойствах екзешника(pif-файле) убери галочку "Остановка в фоне" и поставь Приоритет при ожидании максимальный.
Я с этим столконулся недавно - если для досовой задачи приоритет оставить по умолчанию, она все равно в фоне останавливается(под 2000й)
Непонятно, какого в ДОСе медленно работает, должен так же.
ЗЫ.Я как то написал сборщик кроссворда(скомпилена под 286), там основная процедура исполняется 1 500 000 раз в сек, так в чистом досе всего на 3% быстрее...
Кстати, сравнивал ее(свою) на Cel366 и k6-2 210 - на Целерроне на 10% медленнее! Из-за того, что в Целике 128 кеша, а в к6-2 - 256...
При компиляции моей прог под 286 размер ехе -28 кил, под 386 - 141.
Так что переписывать под 3-ку смысла не имеет...

Ответ отправлен: 20.11.2002, 11:07
Отправитель: Sensey


Отвечает Bob Johnson

Здравствуйте, Igi(t)32!
А зачем ты выводишь пароль каждый раз? Это УЖАСНО медленно. Я поставил вывод пароля один раз на миллион вариантов - и работает со скоростью около 5 млн/сек (P4 Northwood 2,7).
Если ты запускаешь его под НТ, то не забудь и приоритет соответствующий поставить (HIGH). К НТ относится 2К и ХР. Вот поэтому и комп не загружает (вытесняющая мультизадачность). Еще, у тебя в программе слишком много переходов - уменьши их число, т.к. они медленны на новых процах. И лучше такие вещи писать на 32-разрядном асме под винды - тогда еще быстрее будет.
P.S. А вот твоя ASUS P4S533 не поддерживает DDR 333!!! Только 266...


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


 Вопрос № 1865

ПривеТ !!!
Вот 5 кусочков кода(Приложение)
По какому сегменту каждый раз будет адресоваться проц?
Слабо проверить без написания проги и отладчика?


Приложение:


Вопрос отправлен: 19.11.2002, 20:03
Отправитель: Sensey

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

Отвечает Broken Sword

Здравствуйте, Sensey!
хех...! хитро...
ладно, я сначала книулся писать что все лежит в DS, а потом открыл Зубкова и прочитал... Мой ответ: если первым идет ESP или EBP (или BP), то из SS, во всех остальных случаях - по DS. Щас проверим
1. по SS... Да!
2. по DS... Да!
3. по DS... ммммдааааааа..... но все равно, в отладчике оно отображается как надо - ebp+4*ebx...)
4. вот здесь точно по DS!!!!... ДА!
5. хех..! а здесь вообще оригинально получается... я думаю, что по SS все таки (хотя точно не уверен...)
:) всю эту задачу можно использовать как один большой прикол над ассемблерщиком... особенно, пятый пункт :)

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


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

Добрый день, Sensey!
Если используется регистр EBP, то ассемблер по-умолчанию
адресуется через регистр SS.


Ответ отправлен: 20.11.2002, 06:22
Отправитель: ASMодей


Отвечает CodeBuilder

Доброе время суток, Sensey!
Последний , пятый вариант строго говоря недопустим т.к. одновременно исп. ebp*2 ebx*4. Два умножения в одной инструкции, когда SIB-байт то всего один и допускает только одно умножение а не два!
А что ты имел ввиду по поводу того по какому сегменту будет адресоваться проц? Уточни?А то я ща отвечу - DS-для данных,сs-для кода но думаю ты не это имел ввиду....

Ответ отправлен: 19.11.2002, 22:31
Отправитель: CodeBuilder


Отвечает Ayl

Доброе время суток, Sensey!
Ну, в общем, все как я и предполагал, но не проверить в отладчике было выше моих сил :-)
Итак, пп.1 и 3 - по DS, пп.2 и 4 - по SS. 5-й вариант очень интересный, а как, собственно, обрабатывать 2 множителя? :-)


Ответ отправлен: 20.11.2002, 11:57
Отправитель: Ayl


Отвечает igorash

Доброе время суток, Sensey!
Да вроде в первом по SS, во всех остальных по DS, но 5 пример довольно веселый :)
Это мои рассуждения, я ничего не проверял :))


Ответ отправлен: 20.11.2002, 12:34
Отправитель: igorash


Отвечает Bob Johnson

Доброе время суток, Sensey!
А слабо без ассемблера правильные проги писать???
Вот твой пятый пример никогда не откомпилируется! Потому что умножение допускается только для индексного регистра, а он может быть только один.
В общем, там где есть ebp*4 - это индекс, тогда используется DS.
В остальных трех примерах - SS.


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


 Вопрос № 1866

Здраствуйте господа прогеры.
1. Как используя WinApi или еще чемнить, перевести монитор(HDD) в ждущий режим(выключить) и обратно?
2. Как саму винду перевести в ждущий режим с условием что моя прога, которая эту гадость наделала, работала на полном ходе и сама указывала что винде делать?
3. Типа написал я дравер, как его установить программно самому не используя мастера оборудования.
(желательно выше перечисленное работало на W2k,XP.)
4. Кто знает "Байесова правило принятия решения корреляционного приема"



Вопрос отправлен: 19.11.2002, 22:24
Отправитель: Switcher

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

Отвечает masquer

Типа добрый день, Switcher!
3. Если ты типа драйвер написал, то должен типа знать как его типа загрузить и выгрузить. Вообще-то, через SCManager это делается.

Ответ отправлен: 20.11.2002, 11:07
Отправитель: masquer


 Вопрос № 1867

Уважаемые эксперты, я сейчас прохожу 32 номер рассылки "Ассемблер? Это просто! Учимся программировать" там был представлен пример программы "Hellow world!", на попытку скомпилить MASM32 v.7.0 выдает следующее:
Assembling: C:masm32world.asm
C:masm32world.asm(1) : error A2008: syntax error : integer
C:masm32world.asm(2) : error A2085: instruction or register not accepted in current CPU mode
C:MASM32INCLUDEwindows.inc(35) : error A2119: language type must be specified
C:MASM32INCLUDEwindows.inc(36) : error A2119: language type must be specified
........
........
C:MASM32INCLUDEuser32.inc(132) : error A2119: language type must be specified
C:MASM32INCLUDEuser32.inc(133) : error A2119: language type must be specified
C:MASM32INCLUDEuser32.inc(133) : fatal error A1012: error count exceeds 100; stopping assembly
Обьясните пожалуйста в чем проблема? Windows 98se(рус), PII-450


Приложение:


Вопрос отправлен: 19.11.2002, 22:39
Отправитель: CerbeR (cerber1145@mail.ru)

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

Отвечает Dark_Lord

Здравствуйте, CerbeR!
Отсутствует точка(.) перед 386

Ответ отправлен: 21.11.2002, 19:06
Отправитель: Dark_Lord


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

Здравствуйте, CerbeR!
Похоже ты забыл поставить точку перед 386


Ответ отправлен: 20.11.2002, 06:23
Отправитель: ASMодей


Отвечает Ayl

Добрый день, CerbeR!
В первой строке должно быть .386, а не 386.
На это и ругается :-)

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


 Вопрос № 1868

Уважаемые эксперты здравствуйте! скажите пожалуйста можно ли получить прямой доступ к памяти дисплейного контекста,контекста памяти или к
бит.карте(bitmap).Или к экранной памяти не используя Direct.Спасибо



Вопрос отправлен: 19.11.2002, 22:52
Отправитель: Korov (beloloba@yandex.ru)

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

Отвечает Bob Johnson

Здравствуйте, Korov!
Для битмапов существует CreateDIBSection - она позволяет. Остальное - скорее всего нет.


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


Отвечает baldr

Приветствую Вас, Korov!
Используй CDC - указатель на графический контекст устройства и с его помощью используй
методы BeginPaint()/EndPaint(), LineTo(), MoveTo(), Rectangle() и пр...


Ответ отправлен: 21.11.2002, 00:58
Отправитель: baldr


 Вопрос № 1869

Здравствуйте Bob Johnson.
Вот мой адрес: kostin@nm.ru.
С уважением,
Николай.


Приложение:


Вопрос отправлен: 19.11.2002, 23:15
Отправитель: Николай (kostin@nm.ru)

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

Отвечает Bob Johnson

Доброе время суток, Николай!
Высылаю... Когда ознакомишься - напиши, как тебе это.


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


 Вопрос № 1870

Здравствуйте! Я хотел бы задать вопрос: мне нужно перевести целое число, представленное в символьном двоичном формате, в целое число, представленное в символьном десятичном формате (тип строки - символьный массив), используя как промежуточную непосредственное двоичное представление. Алгоритмы есть:
Алгоритм преобразования из символьного двоичного формата в непосредственное двоичное представление:
Пусть исходная строка Str содержит N (N=8; 16) цифр, i=N, искомое B=0:
1. извлекаем i-ю цифру;
2. если цифра '0', то переход на 5;
3. сдвигаем 00000001 на N-i позиций;
4. полученное значение добавляем к B;
5. уменьшаем i на 1;
6. если i<>0, то переход к 1.
Алгоритм преобразования из непосредственного двоичного представления в символьный десятичный формат:
Пусть исходное целое число B имеет длину N бит (N=8; 16), i=M (3 или 5), искомая строка Str='':
1. делим B на 10 (полученное значение сохраняем в B);
2. к полученному от деления остатку добавляем 30h;
3. записываем полученное число в Str[i];
4. i--;
5. если i<>0, то переход к 1.
Но преобразовать эти алгоритмы в программу у меня не получается. Пожалуйста, подскажите, как это сделать? Заранее спасибо!



Вопрос отправлен: 19.11.2002, 23:28
Отправитель: Игорь (smth069@omen.ru)

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

Отвечает Ayl

Приветствую Вас, Игорь!
Ну, стандартный ответ "головой и ручками" вас, наверное, не устроит... Ну что ж...
Насчет алгоритма перевода символьной строки в число. Проще, наверное, вот так:
1. b = 0, i = 1, l = strlen (Str)
2. если i = l - выход
3. b = b shl 1
4. если Str [i] = 1, то inc b
5. i = i + 1
6. перейти к шагу 2
Кусок программы в приложении (часть 1)
Перевод числа в строку десятичных символов - там же (часть 2)

Приложение:

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


 Вопрос № 1871

Доброго времени суток господа!
Помогите!!!
Времени нет разбираться с макросом macro icon group,label,icon_file. Трабла в том, что мне нужно запихнуть в exe-ник больше 1-й иконки, а с помощью энтого макроса мне никак это не получается. И кроме того - что это за 'group'? Ведь у мелкомягких:
desk1 ICON desk.ico
11 ICON custom.ico
А на Фасме чего не так?
Спасибо!
Господа, если Вы до сих пор не пользуетесь Фасмом - ВСЯЧЕСКИ РЕКОМЕНДУЮ!



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

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

Отвечает Maverick

Здравствуйте, Бадян!
У меня есть wasm размером 26 килобайт, тоже ничего ассемблер.


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


Отвечает Eugene

Приветствую Вас, Бадян!
На фасме тоже всё очень просто, надо только 2 раза сказать слово icon. Например так:
section '.rsrc' resource data readable
directory RT_ICON, icons,
RT_GROUP_ICON, group_icons
icons:
resource 1, LANG_NEUTRAL, ICONDATA,
2, LANG_NEUTRAL, CHILDICONDATA
group_icons:
resource IDR_MAIN_ICON, LANG_NEUTRAL, MAINICON,
IDR_CHILD_ICON, LANG_NEUTRAL, CHILDICON
icon MAINICON, ICONDATA, 'minipad.ico'
icon CHILDICON, CHILDICONDATA, 'childicon.ico'
только перед этим надо определить константы IDR_MAIN_ICON и IDR_CHILD_ICON. Потом по этим константам и можно обращаться к иконкам.

Ответ отправлен: 20.11.2002, 09:23
Отправитель: Eugene


 Вопрос № 1872

Привет эксперты.
Об'ясните пожалуста masm 6.x для доса а 7.x для win так ?
Плиз оцените мою прогу, особо не ругайте я еще учусь.
Зарание спасибо.
P.S если не трудно вышлете исходник закрывающий/открывающий сидек только без наворотов.


Приложение:


Вопрос отправлен: 20.11.2002, 07:04
Отправитель: Cas (casvs@pochtamt.ru)

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

Отвечает Maverick

Добрый день, Cas!
С какой стороны оценить?
По скорости или оптимицации по размеру кода?
Нормальная прога.


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


Отвечает Eugene

Доброе время суток, Cas!
Исходник на фасме, немножко переделанный экзампл.

Приложение:

Ответ отправлен: 20.11.2002, 09:29
Отправитель: Eugene


 Вопрос № 1873

Здравствуйте товарищи!
Вот у меня тут ваще...
Прога должна высветить "Calendar for year xxxx"
xxxx <- задаётся коммандной строкой.
Я ПРОБОВАЛ ПО ВСЯКОМУ УЖЕ!
Вобщем мой код не работает, хотя в дебаггере всё нормально- там всё путём по всем параметрам.
Я пробовал в консоле на winxp и в досе на 386 компе
везде бред полнейший....
для примера в консоле xp вот:
test 2002
___alendar_for_Year
в досе вот:
test 1234
Calendar_for_Year__123
test 0987
Calendar_for_Year__098
_ <- это пробел
Вобщем что-то странное... объясните pls почему?
PS: компилю тасмом в виндусе XP.


Приложение:


Вопрос отправлен: 20.11.2002, 08:04
Отправитель: Эдвард Самохвалов (zeleniy_kot@yahoo.com)

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

Отвечает DiGiT[old]

Приветствую Вас, Эдвард Самохвалов!
В общем первый вариант точно воркает, а второй даже не смотрел. Ты линкуй с ключом /t наверное без него линкуешь. а вообще изучай матчасть без нее плохо.

Ответ отправлен: 20.11.2002, 08:57
Отправитель: DiGiT[old]


Отвечает Beeblebrox

Приветствую Вас, Эдвард Самохвалов!
А дебаггером кто будет пользоваться - Пушкин?
По адресу 80h находится db 5, то есть длина строки ' 1234', которая расположена по адресу 81h. Она уже начинается с пробела, так что на выводе этого пробела ты можешь сэкономить байт :)
По адресу 86h находится байт 0Dh, который надо заменить на '$'
Теперь понял свою ошибку?

Ответ отправлен: 20.11.2002, 09:18
Отправитель: Beeblebrox


Отвечает Ayl

Приветствую Вас, Эдвард Самохвалов!
Командная строка... Значит, так:
PSP:80h - длина командной строки
PSP:81h - пробел (!) (если есть параметры) или 0dh (если параметров нет)!
PSP:82h - первый символ первого параметра!
Так что пиши:
ORG 82h
Year db ?
и должно работать. У меня под WinME из командной строки DOS работает.
Про XP сказать не могу, не на чем проверить.


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


Отвечает St

Привет, Эдвард Самохвалов!
Первая программа вызывает некоторое недоумение:
mov ah, 9
lea dx, Hello
int 21h
lea dx, Year
int 21h
а где номер функции для второго int 21h (еще один mov ah, 9)?
кроме того вместо нужно использовать не [Year+4], а [Year+5], тк первый символ это пробел
St

Ответ отправлен: 20.11.2002, 13:06
Отправитель: St


Отвечает Bob Johnson

Добрый день, Эдвард Самохвалов!
1. Потому что реальные параметры командной строки начинаются по адресу 82h, а по 81 - пробел.
Но вот под ХР твоя программа работает также, как и под 98 (по крайней мере, у меня).


Ответ отправлен: 23.11.2002, 19:42
Отправитель: Bob Johnson


Отвечает Broken Sword

Приветствую Вас, Эдвард Самохвалов!
ну потому что для 09h функции строка должна начинаться по DS:DX!!!! DS - видишь? А у тебя она где? В коде. Поэтому или сделай push cs pop ds или сделай com-файл.

Ответ отправлен: 20.11.2002, 15:38
Отправитель: Broken Sword


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

Добрый день, Эдвард Самохвалов!
В DOS вроде все правильно работает, только строка по адресу
PSP+81h содержит в начале пробел, а ты берешь первые 4 символа,
поэтому у тебя выводятся только три символа номера года.
Используй для вывода длину строки (байт по адресу PSP+80h).


Ответ отправлен: 21.11.2002, 06:26
Отправитель: ASMодей


 Вопрос № 1874

Здравствуйте эксперты!
Подскажите, кто знает, где найти информацию о драйверах устройств *.SYS (как запускаются, PE-заголовок, чем отличаются от *.EXE). Можно ли запустить готовый драйвер из ОС или нет. ОС - XP.



Вопрос отправлен: 20.11.2002, 10:36
Отправитель: Ramil

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

Отвечает masquer

Приветствую Вас, Ramil!
В ДДК можно найти. Можно, хотя смотря для какой ОС создавался драйвер, некоторые в ХР не работают.

Ответ отправлен: 20.11.2002, 11:18
Отправитель: masquer


Отвечает baldr

Добрый день, Ramil!
У Зубкова есть даже глава, посвященная написанию драйвера. Вообще же, драйверы - это просто
com-файлы, но без 100h-байтного PSP в начале и с некоторыми желательными особенностями.
Вот черт - тебе надо для винды?? Посмотри на wasm.ru - там, кажется, я что-то такое видел...


Ответ отправлен: 21.11.2002, 00:57
Отправитель: baldr


 Вопрос № 1876

привет эксперты,
1.почему не работ. CtrlAltDel, если поместить в стек
m1:
p 0
call GetModuleHandle
p eax
call FreeLibrary
j1:
jmp j1
и перейти туда (m1)
Если просто запустить прогу->cad блокируется
Если через win.ini/reestr->иногда да, иногда нет. Что происходит?
2.какая стандарт. конструкция (шаблон) dll for w32? и какие ключи нужны для tasm32/tlink32 для ее созд.?




Вопрос отправлен: 20.11.2002, 11:14
Отправитель: oleg

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

Отвечает masquer

Приветствую Вас, oleg!
1. Чего-то я не совсем понял, что блокируется. По идее после FreeLibrary процесс завершается.
2. Прописываешь DllEntry
DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
push hInst
pop hInstance
mov eax, TRUE
ret
DllEntry Endp
Дальше пишешь функции, которые хочешь экспортировать и вносишь их в def файл

Ответ отправлен: 20.11.2002, 18:11
Отправитель: masquer


Отвечает Bob Johnson

Доброе время суток, oleg!
2. Нужно описать процедуру DllEntryPoint:
DllEntryPoint Proc hInstDLL: DWord, cReason: DWord, reserved: DWord
и в конце программы, естественно,
End DllEntryPoint
Про то, с какими параметрами вызывается dllentrypoint - смотри в msdn.
Для создания dll tasm32 запускается обычным образом, а вот tlink32 - вместо параметра -tpe необходимо написать -tpd.


Ответ отправлен: 23.11.2002, 19:42
Отправитель: Bob Johnson


 Вопрос № 1877

Здравствуйте уважаемые господа эксперты.
Вот столкнулся с такой проблемкой:
нужно написать подпрограммку для 8-ми битного контроллера
умножения и деления целых чисел в формате WORD
оптимизированную под используемую память данных,а лучше
чтоб вообще выполнялась "на месте", используя только память где
лежат исходные числа.
Подскажите плиз, как её победить , или алгоритм , или место где
есть подобная информация.
Заранее огромное спасибо !!.



Вопрос отправлен: 20.11.2002, 12:07
Отправитель: Valera

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

Отвечает Bob Johnson

Здравствуйте, Valera!
Алгоритм подсказать могу. Умножение:
1. результат = 0.
2. i = 0.
3. проверяем i-й бит операнда1, если он равен 1, то добавляем к результату операнд2.
4. умножаем операнд2 на 2 (это делается сдвигом влево на 1 разряд).
5. Увеличиваем i на 1.
6. Если i не превышает числа разрядов операнда1, то идем к 3.
Деление делается похожим образом, только с вычитанием и проверкой на флаг переноса. (т.е. если вычитание делителя*2^i из делимого прошло успешно (не установился флаг переноса), то устанавливаем i-й бит результата в 1, начинать надо с максимального i).


Ответ отправлен: 23.11.2002, 19:43
Отправитель: Bob Johnson


Отвечает DiGiT[old]

Доброе время суток, Valera!
Хороший вопрос. Но так сразу ничего и не придумаешь. Насколько я понял у тебя имеется четыре байта под числа, а также 2 байта под операции. Ты бы написал поконкретнее какие операции может делать твой контроллер. Сравнение, сдвиг, сложение, может это он делать или нет. И конкретно что дано.

Ответ отправлен: 22.11.2002, 04:03
Отправитель: DiGiT[old]


 Вопрос № 1878

Здравствуйте уважаемые эксперты!
Подскажите пожалуйста, как мне установить MASM 6.12 на свой компьютер? Дело в том, что при запуске файла ML.EXE компьютер выдает сообщение что ML.EXE не является приложением Win32.
Спасибо за ответ.



Вопрос отправлен: 20.11.2002, 14:07
Отправитель: Jack (reno@lipetsk.ru)

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

Отвечает St

Привет, Jack!
У меня в Win2000 работает версия 6.15
St

Ответ отправлен: 20.11.2002, 16:51
Отправитель: St


 Вопрос № 1879

Уважаемые эксперты у меня возникла проблема: как вставить обычный текст в звуковой файл - PCM. Главное чтоб никто не узнал. Можеткто небудь может мне помочь? Ядумаю что надо разбить текст (т.е. буквы) на биты , вставлять по одному в последние из восьми бит "посылок" файла, а потом извлекать их. Но проблема в том что я не лучший из програмистов и не знаю как это осуществить.
Эту процедуру мне надо сделать на Ассемблере. Если кто может помогите советом.
Спасибо



Вопрос отправлен: 20.11.2002, 15:21
Отправитель: Алекс (piero_S@tut.by)

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

Отвечает Bob Johnson

Здравствуйте, Алекс!
Это зависит от формата твоего PCM файла - если он 8-битный, то так, как ты написал, если 16-битный, то в самый младший из 16 разрядов (самый правый). См. пример.


Приложение:

Ответ отправлен: 23.11.2002, 19:43
Отправитель: Bob Johnson


 Вопрос № 1880

Уважаемые эксперты, я нашел архив рассылки про dos и начал
его изучать. В связи с тем вопросы:
1.Почему Калаш бросил писанину?
2.Кто-нибудь чо-нибудь пишет или только faq выходит?
3.Если я напишу 99, это будет десятеричное?
4.Почему ascii строки определяются с помощью db? Они 1 байт занимают что ли?
Спасибо,
DyC.



Вопрос отправлен: 20.11.2002, 17:11
Отправитель: DyC (dyc@nm.ru)

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

Отвечает Ayl

Доброе время суток, DyC!
1. Не знаю, скорее всего, времени нет
2. Если брать все человечество, то кто-нибудь что-нибудь обязательно пишет! :-) А насчет рассылки - вроде выходило еще несколько выпусков про защищенный режим...
3. Смотря как напишешь и где. Если ты про исходный код, то:
db 99 - десятичное 99
db 99h - 16-ричное 99, десятичное 153
4. Потому что определение db может резервировать несколько байт:
db counter dup (?),
что может рассматриваться как строка

Ответ отправлен: 20.11.2002, 18:00
Отправитель: Ayl


Отвечает keleb-glin

Приветствую Вас, DyC!
На первые два вопроса ответ найди сам, а на третий вопрос отвечу:
да, число 99 - десятичное, а 99h - шестнадцатиричное, 100011b - двоичное, а 12o - восьмеричное.
Теперь четвёртый.
Всё просто: директива db резервирует не один байт, а требуемое количество, что определяется длиной твоей строки или числом n в команде db n dup ('?'), что объявит n байт с одинаковым значением - '?'.


Ответ отправлен: 22.11.2002, 20:58
Отправитель: keleb-glin


Отвечает Eugene

Доброе время суток, DyC!
1) Времени нету.
2) Посмотри на subscribe.ru, там увидишь.
3) Да
4) Ты так определяешь только свою переменную, а не ASCII строку. А переменная уже указывает на байт памяти. Ведь можно записать и так:
ascii db 'Э'
sym1_3 db 'то '
sym4_14 db 'тоже строка'
Таким образом переменная ascii указывает на начало строки, точнее на 1-й байт её.
Надеюсь не очень сумбурно объяснил, а то под конец рабочего дня не очень думается что-то.

Ответ отправлен: 20.11.2002, 17:36
Отправитель: Eugene


Отвечает masquer

Приветствую Вас, DyC!
1. Не грубовато, а?
2. Бери и пиши.
3. Это уже как тебе будет угодно, девятиричное, десятиричное,...,n-ричное, короче.
4. Ты можешь и с помощью dq их определять

Ответ отправлен: 20.11.2002, 17:26
Отправитель: masquer


Отвечает Dark_Lord

Приветствую Вас, DyC!
1) Это его дело
2) Пишу её я, только иногда у меня траблы со временем
3) Да
4) любая строка это несколько байтов, поэтому и db

Ответ отправлен: 21.11.2002, 19:13
Отправитель: Dark_Lord


Отвечает Bob Johnson

Доброе время суток, DyC!
3. Да - для указания 16-ричной системы в конце принудительно необходимо ставить букву h, для двоичной - букву b.
4. Потому что каждый символ в строке занимает 1 байт.


Ответ отправлен: 23.11.2002, 19:43
Отправитель: Bob Johnson


Отвечает baldr

Добрый день, DyC!
1) Специально для тебя - не Калаш, а Калашников Олег Александрович. Если хочешь, чтобы тебе
отвечали нормально, не стоит так фамильярно обращаться ко всем! Ишь ты - "писанину"! А тебе-то
что? Если ты на такой "писанине" учишься, то уж можно и повежливей спросить? И не закончилась
рассылка. Просто некогда писать ему - вот и все!
2) Пишет.
3) Я тебе больше скажу - это будет в любой системе с основанием больше 9! Даже в стодвадцативосьмиричной!
4) Строки состоят из символов. А каждый из них, если строка объявлена как набор байт (db), состоит
из одного байта. А если написать не db, а dw, то каждый символ займет два байта. Вот и все.


Ответ отправлен: 21.11.2002, 00:57
Отправитель: baldr


Отвечает Maverick

Здравствуйте, DyC!
1. Просто она закончилась, там и так все подробно разжевано.
2. Выходит рассылка о программировании под вин.
3. Нет это все будет в двоичном.
4. Если ты насчет функции 9h то определяется адрес с которого начинается эта строка.

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


Отвечает Sensey

Доброе время суток, DyC!
1. Потому что все написано. Дальнейшее - личное творчество.
2. Теоритически выходят выпуски под Винду, но на практике раз в месяц...
3. Ага. А если 99h - шестнадцатеричное
4. Каждый символ занимает 1 байт
строка
Hello db 'Hello'
эквивалентна
Hello db 'H'
db 'e'
db 'l'
db 'l'
db '0'


Ответ отправлен: 21.11.2002, 11:18
Отправитель: Sensey


 Вопрос № 1881

Привет!
Это не персональный вопрос, просто я его не всем посылаю...
Только 4 ответа на вопрос номер 1865 :(((
Что, никто больше не знает? Или лень подумать?
Это же не долго - максимум 5 минут, даже с проверкой в TD...!



Вопрос отправлен: 20.11.2002, 17:25
Отправитель: Sensey

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

Отвечает masquer

Доброе время суток, Sensey!
Хех, с досом я уже давно не дружу (я тогда еще такихз вещей и не знал :))), и ТД у меня нет ни дома, ни на работе

Ответ отправлен: 20.11.2002, 18:13
Отправитель: masquer


Отвечает Eugene

Доброе время суток, Sensey!
У меня на работе не очень много времени, поэтому я сначала смотрю кнопкой подробнее, не ответил ли кто. Если кто отвечает, причём неплохо, я пропускаю этот вопрос. Так получилось и в том случае.

Ответ отправлен: 20.11.2002, 17:47
Отправитель: Eugene


Отвечает LIFO

Здравствуйте, Sensey!
Напомни вопрос ,если не сложно.


Ответ отправлен: 21.11.2002, 16:45
Отправитель: LIFO


Отвечает Bob Johnson

Доброе время суток, Sensey!
Так я же вроде тебе ответил. Или отослать ответ забыл? (у меня тут были некоторые проблемы с интернетом). В общем повторяю свой ответ в приложении...


Приложение:

Ответ отправлен: 23.11.2002, 19:43
Отправитель: Bob Johnson


Отвечает DiGiT[old]

Здравствуйте, Sensey!
Млин в день приходит куча вопросов, из которых читаешь первых 4-5. И на многие нет желания отвечать, в виду незнания матчасти задаваемым и получения ответа работой в поисковике :((

Ответ отправлен: 21.11.2002, 10:27
Отправитель: DiGiT[old]


 Вопрос № 1882

Здравствуйте, уважаемые эксперты.
Читаю рассылку, но то ли я не заметил, то ли нет на мой вопрос ответа:
мне надо ввести два числа и произвести над ними математические действия, т.е. сложить, отнять и т.п., а потом результат вывести на экран.
Меня интересует, каким образом осуществить ввод, т.е. как присвоить регистру число, которое было введено с клавиатуры, и вопрос, как вывести конечное число, которое находится, допустим, в регистре dx?
И если можно все как-нить поподробнее... Извините если очень глупый вопрос, но для меня он на данный момент очень актуален.
Заранее спасибо.



Вопрос отправлен: 20.11.2002, 17:33
Отправитель: kasko

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

Отвечает St

Привет, kasko!
А вводить и выводить число надо в каком виде? нужно преобразовывать в и из формата воспринимаемый человеком?
Какой должен быть максимальный размер чисел.
Большая просьба ставить задачу конкретнее.
St

Ответ отправлен: 20.11.2002, 18:42
Отправитель: St


Отвечает Bob Johnson

Доброе время суток, kasko!
Вот тебе прога, которая складывает 2 числа.


Приложение:

Ответ отправлен: 23.11.2002, 19:44
Отправитель: Bob Johnson


Отвечает keleb-glin

Доброе время суток, kasko!
Доброе время суток, kasko!
Чтобы ввести число строку с клавы, воспользуйся функцией 0ah прерывания int 21h:
mov ah, 0ah
mov dx, offset buff
int 21h
;------------
;------------
buff db 10, 0
db 10 dup (0)

В dx - адрес буфера ввода. Первый байт - количество запрашиваемых символов, после ввода во втором будет содержаться реальная длина запрашиваемой строки, далее будет записана сама строка. После вызова функции ты будешь вводить символы с клавы, нажмёшь ENTER - ввод завершится, если количество набранных символов превысит количество запрашиваемых, раздастся сигнал и лишние символы не введутся.
действия над числами:
add dx, ax
add line, ax
add ax, line
-сложение. К первому числу будет прибавлено второе. Можно оперировать данными одинакового размера ( byte с byte, word c word и т.д.) Складывать можно что угодно кроме непосредственно данных из памяти.
sub ax, dx
sub ax, line
sub line, ax
-вычитание. Из первого вычтется второе.
теперь - 8-битовое умножение. Команда mul умножит 8-битовое число (регистр, переменную), после неё стоящее на al и результат положит в ax.
Теперь - перевод числа в строку. Надо откинуть с помощью операторов shr и shl ( смещение битов регистра вправо и влево соответственно ) часть регистра чтобы остались лишь 4 бита – одна цифра. Далее к регистру, в нижнеё своей части содержащему эти биты, нужно прибавить 48, если это четырёхбитовое число меньше 10 и 55, если больше. Так мы получим ascii – код соответствующего символа.


Приложение:

Ответ отправлен: 23.11.2002, 21:30
Отправитель: keleb-glin


Отвечает Maverick

Добрый день, kasko!
Давай мыло, я тебе код вышлю с подробными объяснениями.
Maverick@nightmail.ru


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



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

Внимание!
Форма может работать некорректно в почтовых программах "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 (42)
C / C++ (29)
Perl (9)
Delphi (14)
Pascal (23)
Basic / VBA (12)
Java / JavaScript (14)
PHP (10)
MySQL / MSSQL (9)
Пользователю
Windows 95/98/Me (33)
Windows NT/2000/XP (23)
"Железо" (28)
Поиск информации (17)
Администратору
Windows NT/2000/XP (12)
Linux / Unix (17)
Юристу
Гражданское право (7)
Семейное право (2)
Трудовое право (3)
КоАП (2)

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




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

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


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

В избранное