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

Ассемблер? Это просто! Учимся программировать


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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 692
от 07.03.2007, 21:13

Администратор:Калашников О.А.
В рассылке:Подписчиков: 366, Экспертов: 18
В номере:Вопросов: 9, Ответов: 11


Вопрос № 76940: Дан массив размерности n.Найти первый отрицательный элемент. Вопрос:Сделать для двух отрицательных элементов? В приложениях выводится результат с одним отрицательным элиментом????...
Вопрос № 76944: Здравствуйте все. Поскажите плиз, есть файлиг размером 1~2 Гб. Надо посчитать его CRC32. В моём варианте идёт считывание по 10 Мб кусками. И есть готовая прога для расчёта суммы. Дык вот эта прога секунд на 20 это делает быстрее. Если кто сталкив...
Вопрос № 77015: Уважаемые эксперты! Скажите ,пожалуйста, зачем в программе нужна дериктива - > adc carry,0? Ведь вроде бы на переполнения проверяет jnc enp (непонятно). Зачем надо проверять результат 2 раза ? По идеи на входе :summand_1,summand_2 - слага...
Вопрос № 77017: Уважаеме експерты.У меня вопрос? Как изменить програму которая создает каталог на диске С. Что бы, ета програма делала выше сказаное, если Я войду под "Ограниченной учетной записью пользователя". Програма: START: m...
Вопрос № 77038: Здравствуйте! Думаю, что эксперты по ассемблеру должны знать ответ на мой вопрос. У меня на жёстком диске есть две версии OllyDbg: 1.09 и 1.10. Но в 1.09 в меню нет раздела Plugin, а в 1.10 этот раздел есть, но изображение инвертировано, ...
Вопрос № 77201: Здравствуйте эксперты. Подскажите, где можно скачать Win32 Programmer's Reference (я находил только в комплекте с Delphi). Заранее благодарен....
Вопрос № 77226: Здравствуйте. Интересует один вопрос. Как работает курсор. Поясняю. Процессор переходит в PM таблица прерываний еще не готова и ни одна функция BIOS не работает и прерывания запрещены. Единственное что в голову приходит - курсор управляется видеоадап...
Вопрос № 77229: Еще раз здравствуйте. Интересует написание собственного обработчика прерываний от клавиатуры. 1 Должен ли обработчик выводить на экран нажатую клавишу? Если нет, то чем она выводится? 2 Нашел вот такой код - in al,61H ;взять значениe пор...
Вопрос № 77279: 1.Дан массив размерности n.Найти первый отрицательный элемент. Вопрос:Сделать для двух отрицательных элементов? нужно завести вторую переменную r2 и не выходить из цикла пока второй не найдёшь ...

Вопрос № 76.940
Дан массив размерности n.Найти первый отрицательный элемент.
Вопрос:Сделать для двух отрицательных элементов?

В приложениях выводится результат с одним отрицательным элиментом????

Приложение:

Отправлен: 27.02.2007, 10:36
Вопрос задал: Kostya kam (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Kostya kam!

см.приложение

Удачи!

Приложение:

---------
И только наступив на грабли мы преобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: 5-ый класс)
Ответ отправлен: 27.02.2007, 12:34
Оценка за ответ: 5


Вопрос № 76.944
Здравствуйте все.
Поскажите плиз, есть файлиг размером 1~2 Гб. Надо посчитать его CRC32. В моём варианте идёт считывание по 10 Мб кусками. И есть готовая прога для расчёта суммы. Дык вот эта прога секунд на 20 это делает быстрее. Если кто сталкивался с такой задачей, поделитесь решением. Вобщем нужен очень быстрый алгоритм подсчёта CRC32 для оч. большого файла.
Всем заранее спасибо.
Макс
max.yegorov@mail.ru (в теме 777, от спама)
Отправлен: 27.02.2007, 10:58
Вопрос задал: Maximus777 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Maximus777!

алгоритмов много (у В.Юрова их несколько описано, а у Д.Э.Кнута их столько, что можно зациклится). Есть библиотечная функция CheckSumMappedFile и ее программый аналог посмотрите тут:
http://www.wasm.ru/article.php?article=green2red02
Удачи!

---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 5-ый класс)
Ответ отправлен: 01.03.2007, 19:18


Вопрос № 77.015
Уважаемые эксперты! Скажите ,пожалуйста, зачем в программе нужна дериктива - > adc carry,0? Ведь вроде бы на переполнения проверяет jnc enp (непонятно). Зачем надо проверять результат 2 раза ?

По идеи на входе :summand_1,summand_2 - слагаемые,а на выходе: sum_b или sum_w - значение суммы с учётом переполнением . По смыслу программа учитывает возможное переполнение результата.
Программа производит сложение чисел размером 1 байт без учёта знака.

Приложение:

Отправлен: 27.02.2007, 18:21
Вопрос задал: Loriendil (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Loriendil!
строку:
jnc endp
можно убрать, команда:
adc carry,0
запишет значение CF в carry.

endp-это зарезервированое слово и не подходит для метки.
Удачи!


---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 5-ый класс)
Ответ отправлен: 27.02.2007, 18:43
Оценка за ответ: 5


Вопрос № 77.017
Уважаеме експерты.У меня вопрос? Как изменить програму которая создает каталог на диске С.
Что бы, ета програма делала выше сказаное, если Я войду под
"Ограниченной учетной записью пользователя".
Програма:

START:
mov ah,39h
mov dx,offset Mes1
int 21h ;создание каталога

Mes1 db "C:TTT",0 ;//название каталога
Mes2 db '$'

Отправлен: 27.02.2007, 18:38
Вопрос задал: Tired (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Tired!

1) попросить админа поменять вам права доступа.
или
2) http://www.wasm.ru/publist.php?list=6
прочитать о получении неограниченных прав,
а также УК вспомнить.
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 5-ый класс)
Ответ отправлен: 27.02.2007, 19:59


Вопрос № 77.038
Здравствуйте!
Думаю, что эксперты по ассемблеру должны знать ответ на мой вопрос.
У меня на жёстком диске есть две версии OllyDbg: 1.09 и 1.10.
Но в 1.09 в меню нет раздела Plugin, а в 1.10 этот раздел есть, но изображение инвертировано, т.е. белый текст на чёрном фоне. К тому же за этим чёрным фоном не видно текста программы(
move eax,0
add ebx,1
...)
Согласитесь, это не удобно. Как это можно изменить?
В настройках изменения цвета на "чёрное на белом" я не нашёл (его там нет) в отличии от 1.09.
Возможно какие то изменения нужно внести в файл OllyDbg.INI
Прошу ответить, а то уже на третий вопрос в RUSFAQ я ответа не получаю вообще. Неужели мои вопросы так сложны для экспертов RUSFAQ?
Спасибо всем, кто ответит!
Отправлен: 27.02.2007, 20:48
Вопрос задал: Federal (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Wild_one
Здравствуйте, Federal!
Не совсем понял, что значит "за этим чёрным фоном не видно текста программы". В любом случае настройки цветов находятся в Options->Appearance на вкладках сcolours, code hihglighting.
Чтобы в меню появился раздел Plugin нужно в OllyDbg.INI прописать в раздел [History] параметр Plugin path=путь к папке с плагинами
Ответ отправил: Wild_one (статус: 5-ый класс)
Ответ отправлен: 27.02.2007, 21:37
Оценка за ответ: 4
Комментарий оценки:
в раздел [History] параметр Plugin path=путь к папке с плагинами прописан, но раздела в меню так и нет
Спасибо за совет покопаться в OllyDbg.INI, исправить цвет удалось прописав в OllyDbg.INI строку
Scheme[0]=0,12,8,18,7,8,7,13
Scheme name[0]=Black on white


Вопрос № 77.201
Здравствуйте эксперты. Подскажите, где можно скачать Win32 Programmer's Reference (я находил только в комплекте с Delphi).
Заранее благодарен.
Отправлен: 28.02.2007, 19:34
Вопрос задал: Anton_m (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Anton_m!

Посмотрите на WWW.WASM.RU в разделе инструменты MASM32
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 5-ый класс)
Ответ отправлен: 28.02.2007, 19:44

Отвечает: Волков Павел Юрьевич
Здравствуйте, Anton_m!
Можете скачать по ссылке

http://slil.ru/24011081

размер - 8Мб
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 10-ый класс)
Ответ отправлен: 01.03.2007, 12:27


Вопрос № 77.226
Здравствуйте. Интересует один вопрос. Как работает курсор. Поясняю. Процессор переходит в PM таблица прерываний еще не готова и ни одна функция BIOS не работает и прерывания запрещены. Единственное что в голову приходит - курсор управляется видеоадаптером. Если не прав, поправьте. Значит управлять им можно на уровне портов. Расскажите пожалуйста, как можно передвинуть курсор влево и вправо, спрятать, изменить скорость, если можно, приведите код. Спасибо.
Отправлен: 28.02.2007, 22:19
Вопрос задал: RIV (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Стас
Здравствуйте, RIV!
Да курсор управляется напрямую видеоадаптером.
Прямое программирование видеоадаптера штука сложная-опасная, говорят можно спалить монитор... Насчет портов управляющих курсором - поищи инфу о 3b5h,3d5h портах, так называемых "CRT controller internal registers"-CRTC.
(Скорость мерцания насколько я помню не меняется, вот на MSX2 там да меняли.... )
Но лучше положится на BIOS: Int10h
Ah=01H уст. размер/форму курсора (текст). Курсор, если он видим, всегда мерцает.
Вход: CH = начальная строка (0-1fH; 20H=подавить курсор)
CL = конечная строка (0-1fH)

Ah=02H уст. позицию курсора. Установка на строку 25 делает курсор невидимым.
Вход: BH = видео страница
DH,DL = строка, колонка (считая от 0)

Ah=03H читать позицию и размер курсора
Вход: BH = видео страница
Выход: DH,DL = текущие строка,колонка курсора
CH,CL = текущие начальная,конечная строки курсора (см. функцию 01H)
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 01.03.2007, 00:06
Оценка за ответ: 4
Комментарий оценки:
int 10h это хорошо, но я работаю в 32-битном PM использовать BIOS прерывания очень не хочется.


Вопрос № 77.229
Еще раз здравствуйте. Интересует написание собственного обработчика прерываний от клавиатуры.
1 Должен ли обработчик выводить на экран нажатую клавишу? Если нет, то чем она выводится?
2 Нашел вот такой код -
in al,61H ;взять значениe порта управления клавиатурой
mov ah,al ; сохранить его
or al,80h ;установить бит разрешения для клавиатуры
out 61H,al ; и вывести его в управляющий порт
xchg ah,al ;извлечь исходное значение порта
out 61H,al ; и записать его обратно
Что такое порт № 61h, что такое старший бит и зачем записывать в порт исходное значение?
3 Допустим, обработчик считывает скан код клавиши, перекодирует его в ascii и выводит на экран нажатую клавишу. Вопрос, если надо, то когда следует выполнить команду STI, когда надо послать сигнал контроллеру прерываний, что прерывание завершено, когда надо послать сигнал разрешения для клавиатуры?
Надеюсь я понятно спрашиваю и надеюсь я не очень надоел вопросами. Спасибо.
Отправлен: 28.02.2007, 22:57
Вопрос задал: RIV (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Стас
Здравствуйте, RIV!
1) нет. кто спросил код нажатой кнопки тот её и выведет (или нет) на экран.
(например command.com или вашапрограмма)
2) 61 порт управляет клавиатурой. старший бит это первый (слева) бит в байте, т.е. Xxxxxxxx. Обычно комбинация - взять байт, инвертировать бит, записать байт, инвертировать бит (или как у Вас в примере вернуться к исходному), записать байт - используется для того чтобы просигнализировать комуто о том, что какоето действие произведено (в вашем случае контроллеру клавиатуры), т.е. как бы подняли флажок, опустили его (махнули флажком-битом).
3) (вывод на экран в вашем примере избыточен, вместо него после перекодирования кладем символ в буффер клавиатуры, а когда место в нем закончилось пищим динамиком и ничего не делаем.)
запрещать прерывания в случае обработчика клавиатуры нужно в самом начале, может быть даже первой, и разрешать перед самым выходом (прям перед IRET).
Ведь если вы пишете в контроллер клавиатуры, а в это время произойдет новое прерывание от клавы (нажата/отпущена клавиша) - последствия не предсказуемы.
А если во время перекодирования в для записи в буффер клавиатуры, то вполне может случится, что следующая клавиша запишется в буффер до (или вместо) текущей.
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 28.02.2007, 23:51
Оценка за ответ: 5
Комментарий оценки:
Я знаю, что такое старший бит, меня интересует назначение этого бита в этом порту.

Отвечает: Евгений Иванов
Здравствуйте, RIV!

Прерывания запрещаются автоматически после возникновения прерывания, то есть, в точке начала обработчика прерывания можно быть уверенным, что всё запрещено (если другие обработчики правильно написаны, конечно).

На всякий случай можно и запретить, но это не обязательно.

97-ой порт - управление клавиатурой. И старший бит используется для того, чтобы показать клавиатуре, что код принят и что она может отдать следующий код в очереди, если он есть. Попробуйте этого не делать - увидите, будто клавиатура зависла. Я помню, в начале времён, много раз нажимал на Reset, чтобы сбросить процессор (тогда ещё 386 40 Мгц), когда клавиатура повисла в результате неправильного написания обработчика.

STI подаётся само собой во время выхода из обработчика прерывания (после retf).
То есть, сохранённые флаги возвращаются обратно и если был установлен флаг IF, то он установится (обычно так и есть, прерывания же разрешены во время работы программы).

Перед выходом из обработчика нужно и клавиатуру разрешать.

Не забудьте о паузах между посылками в порт, на быстрых компах это нужно.
Хотя бы простейший jmp $+2.

У меня есть интересный драйверок для эмулятора Спектрума, написанного мной.
Посмотрите.
http://eugene-ivanov.narod.ru/research_zxs.htm

Приложение:

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Что имеем - не храним, потерявши - плачем

Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 01.03.2007, 03:42
Оценка за ответ: 5


Вопрос № 77.279
1.Дан массив размерности n.Найти первый отрицательный элемент.
Вопрос:Сделать для двух отрицательных элементов?

нужно завести вторую переменную r2 и не выходить из цикла пока второй не найдёшь

Приложение:

Отправлен: 01.03.2007, 10:28
Вопрос задал: Kostya kam (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Kostya kam!
asm {
pusha
push es
push ds
pop es
cld
lea esi, ar
mov edi,esi
mov r1,-1
mov r2,-1
mov ecx, n
4:lodsd
or eax,eax
jns @5
push esi
sub esi,4
sub esi,edi
shr esi, 2
xchg r2, esi
xchg r1, esi
pop esi
5:loop @4
pop es
popa
}
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: 5-ый класс)
Ответ отправлен: 01.03.2007, 10:54


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

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

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

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

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


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


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

В избранное