Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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 |
Отписаться
Убрать рекламу |
В избранное | ||