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

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


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

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

Выпуск № 430
от 30.11.2002, 03:50

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


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

Bob Johnson
Статус: Профессиональный
Общий рейтинг: 153.87
[Подробней >>]
St
Статус: Опытный
Общий рейтинг: 115.68
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 136.26
URL: Задачи по ассемблеру
Телефон: 89039415024 (BiLine GSM)
[Подробней >>]
 
Остапенко александр
Статус: Начальный
Общий рейтинг: 104.84
[Подробней >>]
Sensey
Статус: Профессиональный
Общий рейтинг: 122.63
URL: Страничка рассылки по Паскалю
Телефон: +38 (0572) 41-76-04 дом.
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 119.34
[Подробней >>]
 
masquer
Статус: Профессиональный
Общий рейтинг: 151.3
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.68
URL: Страничка обо мне и моих друзьях
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 117.39
[Подробней >>]


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

Вопрос № 1930. Вопрос 1877 Спасибо Bob Johnson !... (ответов: 1)
Вопрос № 1931. Здравствуйте, эксперты! Пишу прогу, которая выводит выводит клавишу, только что нажатую на клаве (ти... (ответов: 5)
Вопрос № 1933. Мир Вам Эксперты! Возникла необходимость реализовать рабочий стол аля Windows в интерфейсе MDI. КАК... (ответов: 1)
Вопрос № 1934. Доброе время суток Bob Johnson! К Вам был отправлен вопрос Вопрос № 1848, по поводу написания драйве... (ответов: 1)
Вопрос № 1935. Привет эксперты. при заказе бесплатного диска с winDDK с сайта MS при его доставке в РФ взималась л... (ответов: 1)
Вопрос № 1936. Добрый день, уважаемые эксперты. У меня возникла проблема. Делаю диалог с owner-draw кнопками. Так в... (ответов: 1)
Вопрос № 1937. > Отвечает ASMодей > Добрый день, Bob Johnson! > А ты Win переустанавливать пробовал? Я еще не вст... (ответов: 1)
Вопрос № 1938. Как сделать корректную ссылку, не цепляя другие регистры(размазать легко)? Мне надо обратиться fs:[c... (ответов: 3)
Вопрос № 1939. Уважаемые эксперты, подскажите пожалуйста, как на Win32Asm перевести число из целого в вещественное ... (ответов: 2)
Вопрос № 1941. Наваял тут прогу (по поиску бинарных отношений перебором, если кому интересно). Она просчитывает 2^2... (ответов: 1)
Вопрос № 1942. >Насколько я понял, есть адрес (A), записанный по адресу cs:DataOffs. >А тебе нужно обратиться по ад... (ответов: 1)
Вопрос № 1943. Хай, эксперты. Вопрос: как в WinAPI создать регион произвольной формы, например, под готовый jpg - ... (ответов: 3)
Вопрос № 1944. вопрос к Ayl привет. получил твою программу , но она постоянно выдаёт ошибки и не работает... (ответов: 2)
Вопрос № 1945. Большое спасибо всем кто ответил на мой вопрос.У меня есть еше один.Мне нужно написать прогу которая... (ответов: 2)

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


 Вопрос № 1930

Вопрос 1877
Спасибо Bob Johnson !



Вопрос отправлен: 25.11.2002, 04:18
Отправитель: Valera

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

Отвечает Bob Johnson

Здравствуйте, Valera!
Пожалуйста ... :-)


Ответ отправлен: 26.11.2002, 15:10
Отправитель: Bob Johnson


 Вопрос № 1931

Здравствуйте, эксперты! Пишу прогу, которая выводит выводит клавишу, только что нажатую на клаве (типа "Текстовый редактор"), но когда нажимаю клавишу первый раз, символ светится подряд не один, а много(3 с небольшим строки) раз, последующие символы также занимают за собой это пространство экрана. Как убрать эту фигню?


Приложение:


Вопрос отправлен: 25.11.2002, 06:34
Отправитель: Elm Thasa

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

Отвечает St

Привет, Elm Thasa!
Вот так работает вроде работает
je exit
mov cx,1 ;!!!!!!!
mov ah,0ah
mov bh,00
int 10h
Внимательнее читайте справочник по прерываниям.
St

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


Отвечает Maverick

Добрый день, Elm Thasa!
Че то я не понял твой код, че ты хотел.
Не стал разбираться. Вот написал тебе с комментариями в приложении.


Приложение:

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


Отвечает Остапенко александр

Доброе время суток, Elm Thasa!
попробуй написать в конце вывода "HELT"
И он у тебя потом еще долго вааще ничо выводить не будет.

И еще, попробуй выводить 21-ым прерыванием..

Ответ отправлен: 25.11.2002, 08:56
Отправитель: Остапенко александр


Отвечает Sensey

Доброе время суток, Elm Thasa!
Ф-ция вывода символа требует указания в CX кол-ва повторений


Ответ отправлен: 25.11.2002, 12:24
Отправитель: Sensey


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

Приветствую Вас, Elm Thasa!
Функция 0Ah прерывания INT 10h может повторять вывод символа,
а количество повторений передается функции в регистре CX. Запиши
в CX 1 и все будет в порядке.


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


 Вопрос № 1933

Мир Вам Эксперты!
Возникла необходимость реализовать рабочий стол аля Windows в интерфейсе MDI. КАК?
(парентом чилдам ListView уже давал, визуально все работает, но формы ведут себя очень не правильно)
Я программирую на Delphi, но так как вопрос системный послал профи в Ассемблер.
С надеждой. Maus.



Вопрос отправлен: 25.11.2002, 11:41
Отправитель: Maus (byterus@mail.ru)

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

Отвечает masquer

Приветствую Вас, Maus!
Как ты представляешь ответ на вопрос о том что "формы ведут себя очень не правильно". Тут мало быть профи...

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


 Вопрос № 1934

Доброе время суток Bob Johnson!
К Вам был отправлен вопрос Вопрос № 1848, по поводу написания драйверов для Win.
Не могли бы Вы мне выслать инфу по этому моводу.
Заранее благодарю, Рифат.



Вопрос отправлен: 25.11.2002, 11:50
Отправитель: Рифат (abriofh@mail.ru)

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

Отвечает Bob Johnson

Приветствую Вас, Рифат!
Высылаю...


Ответ отправлен: 26.11.2002, 15:10
Отправитель: Bob Johnson


 Вопрос № 1935

Привет эксперты.
при заказе бесплатного диска с winDDK с сайта MS при его доставке в РФ взималась ли с кого-нибудь(кто заказывал) delivery-fee (плата за доставку)? и если да,то чему она была равна?



Вопрос отправлен: 25.11.2002, 11:56
Отправитель: dxf

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

Отвечает Gibbel

Добрый день, dxf!
Следуя информации, предоставляемой самой Microsoft она состовляет для Москвы порядка 20 убитых енотов.

Ответ отправлен: 25.11.2002, 12:44
Отправитель: Gibbel


 Вопрос № 1936

Добрый день, уважаемые эксперты.
У меня возникла проблема. Делаю диалог с owner-draw кнопками. Так вот, как запретить перемещение по кнопкам с помощью стрелок или хотя бы реагирование на нажатие клавиши пробел??? Странно, но ни одна из кнопок не имеет стиль WS_GROUP, но тем не менее кнопки действую как если бы были включены в группу. Сабклассинг кнопок можно, но не очень хорошо.
Как я понимаю, событие WM_KEYDOWN будет посылаться в оконную процедуру кнопки, а не в диалоговую процедуру главного окна (и даже не его оконную процедуру, которая собственно вызывает диалоговую процедуру). Почему-то винда трактует все кнопки, не принадлежащие какой-либо группе, как принадлежащие одной глобальной группе окна диалога. Тогда такой вопрос: адреса оконных процедур всех одинаковых кнопок в диалоге будут одинаковыми или у каждой кнопки может быть своя оконная процедура??? Мне это нужно знать, чтобы в моей оконной процедуре для кнопок вызывать нужный оригинальный обработчик.
Заранее большое спасибо!!!



Вопрос отправлен: 25.11.2002, 13:14
Отправитель: Nize G (nizeg@beep.ru)

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

Отвечает masquer

Здравствуйте, Nize G!
Каждое окно, а кнопка таковым и является, может иметь и собственную очередь сообщений и, соответственно, процедуру для их обработки

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


 Вопрос № 1937

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

> Добрый день, Bob Johnson!
> А ты Win переустанавливать пробовал? Я еще не встречал такой
> ситуации, чтобы после замены какой-нибудь железки, Win работала бы
> как ни в чем не бывало.
Да, конечно - т.к. ни один из старых Windows (это были 98 и ХР) не стали работать на новом железе просто так.
Да нет, тут системы обе стоят нормально - т.к. обычные игры работают. Проблема именно в том, что некоторые программы почему-то находят на моем п4 northwood поддержку 3DNow! (т.к. на п3 эти же драйвера для двуковой карты работали нормально).
А вообще, каким образом определяется эта поддержка (ну вот MMX, SSE и SSE 2 - по CPUID), а 3DNow как?



Вопрос отправлен: 25.11.2002, 13:40
Отправитель: Bob Johnson (bobjohn@newmail.ru)

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

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

Здравствуйте, Bob Johnson!
3DNow! тоже определяется по CPUID, только в EAX нужно передавать
числа от 80000000h и выше. Описание есть и в Зубкове (немного) и
в Interrupt List. В частности поддержка именно 3DNow! определяется
битом 31 регистра EDX, при посылке EAX=80000001h.


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


 Вопрос № 1938

Как сделать корректную ссылку, не цепляя другие регистры(размазать легко)? Мне надо обратиться
fs:[cs:Ссылка на память + const]
а вместо этого получается в коде
fs:[адрес ссылки в cs + const]
при операции типа
mov ax,fs:[cs:DataOffs+2]



Вопрос отправлен: 25.11.2002, 14:16
Отправитель: Vladimir

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

Отвечает Sensey

Приветствую Вас, Vladimir!

Поскольку в вопросе сказано: "не цепляя другие регистры", осмелюсь поправить эксперта Ayl:

xchg bx, cs:[DataOffs]
mov ax, fs:[bx+2]
xchg bx, cs:[DataOffs]

но это слишком долго - гораздо быстрее сохранить в стеке регистр bx

Ответ отправлен: 25.11.2002, 17:34
Отправитель: Sensey


Отвечает Ayl

Здравствуйте, Vladimir!
Что-то у тебя хитрое такое.
Насколько я понял, есть адрес (A), записанный по адресу cs:DataOffs.
А тебе нужно обратиться по адресу fs:(A+2)?
Одной командой фиг получится. Надо вот так:
mov bx, cs:[DataOffs]
mov ax, fs:[bx+2]
Или я неправильно тебя понял?

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


Отвечает Bob Johnson

Здравствуйте, Vladimir!
Т.е. тебе надо выполнить:
fs:[cs:[ссылка] + const] - да?
Так никак без других регистров... Процессор от интела пока не поддерживает двойную косвенную адресацию.
Если проблемы с регистрами, то в твоем примере можно так:
xor eax, eax
mov ax, cs:[DataOffs]
mov ax, fs:[eax + 2]
фишка тут в том, что по регистру ax адресоваться нельзя, а по eax - можно.


Ответ отправлен: 26.11.2002, 15:11
Отправитель: Bob Johnson


 Вопрос № 1939

Уважаемые эксперты, подскажите пожалуйста, как на Win32Asm перевести число из целого в вещественное и наоборот. Интересует как сама программа, так и алгоритм перевода. А может быть такая функция API есть?
Заранее спасибо.



Вопрос отправлен: 25.11.2002, 14:40
Отправитель: Konstantin

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

Отвечает masquer

Здравствуйте, Konstantin!
Если не заморачиваться, то используй wsprintf.

Ответ отправлен: 25.11.2002, 14:52
Отправитель: masquer


Отвечает Bob Johnson

Добрый день, Konstantin!
Такую функцию для тебя FPU выполнит!
fild dword ptr [_integer_]
fstp qword ptr [_double_] или
fstp dword ptr [_float_]


Ответ отправлен: 26.11.2002, 15:11
Отправитель: Bob Johnson


 Вопрос № 1941

Наваял тут прогу (по поиску бинарных отношений перебором, если кому интересно). Она просчитывает 2^27 вариантов + 8 проверок на каждыю в течение 1мин.07 сек. на моем Celeron 1400. Хотелось бы это дело ускорить, т.к. без вывода найденых вариантов перебор занимает 39 секунд. Может быть у кого-нибудь есть какие идеи по этому поводу? Как вы могли понять из вопроса, необходима оптимизация по скорости, а не по размеру...
PS: Просьба не ругать за корявость проги, писал поздней ночью...


Приложение:


Вопрос отправлен: 25.11.2002, 18:04
Отправитель: Дмитрий

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

Отвечает masquer

Доброе время суток, Дмитрий!
Самое первое - забудь про дос и 16-бит. Только 32-бита. Алгоритм не разбирал, но если есть возможность - переведи все на MMX (SSE). Как можно меньше переходов. Выравнивай данные и код по границе 8 или 16 байт. Рассчитай так обработку, чтобы данные в кеш попадали сразу. Распарируй команды (pairing), если есть возможность - избегай циклов (loop unrolling).
У интела есть документация по оптимизации кода, подробности там ищи. Ну, вкратце так...

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


 Вопрос № 1942

>Насколько я понял, есть адрес (A), записанный по адресу cs:DataOffs.
>А тебе нужно обратиться по адресу fs:(A+2)?
>Одной командой фиг получится. Надо вот так:
>mov bx, cs:[DataOffs]
>mov ax, fs:[bx+2]
>Или я неправильно тебя понял?
Правильно. Программа BC+Tasm (на СИ интерфейсная часть), ассемблерная часть оптимизирована под операции с регистрами, поэтому чтобы не менять постоянно DS я хочу заменить DS на FS, а SI(значение смещения DS +0,20,40,80) заменить на смещение сегмента (вот это самое cs:[DataOffs]).
Таких замен добрая сотня, некоторые обращения были типа [si+bx], а есть и [si+bx+const], регистры использованы под завязку. Поэтому либо добавлять push-pop (разбухнет код), либо что-то придумывать.
Вот смотрю, может di получится под это дело освободить... Освободил, вроде без особого ущерба, теперь новая болячка: при вызове СИ функции из ассемблерной части CS не меняется, в результате попадаю не туда. Как развязать вызовы туда-обратно?
И еще: у одного из экспертов увидел "благодарностей 0" (я за него огорчился). А куда их вообще отправлять? В рассылку как-то неудобно.



Вопрос отправлен: 25.11.2002, 18:40
Отправитель: Vladimir

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

Отвечает Ayl

Приветствую Вас, Vladimir!
При взаимодействии Си-Ассемблер необходимо придерживаться следующих правил обращения с регистрами:
- при входе в процедуру обязательно (!) сохранение регистров bx, bp, si, di, sp, ds, ss (ebx, ebp, esi, edi, esp) при их использовании
- при выходе - восстанавливать
Дело в том, что эти регистры жизненно важны для Си, т.к. регистры si и di используются для хранения регистровых переменных, bp - и так понятно, кадр стека, sp - без комментариев, bx - не помню, возможно, тоже регистровый. Кстати, в книжках написано, что bx можно использовать, но я на этом уже однажды погорел. Возможно, правда, что это была особенность компилятора.
Вызов сишной функции из асма должен быть FAR. Для этого в ассемблерном блоке должна быть директива
extrn _C_Func:PROC (обрати внимание на ведущий знак подчеркивания). Проверь соответствия моделей памяти в Си-программе и в ассемблерном модуле. Возможно, вместо PROC надо будет явно прописать FAR.
Параметры помещаются в стек в обратном порядке (с конца, то есть если прототип выглядит как c_func (int a, b, c), то помещать их надо так: push c b a).
Очистку стека при возврате делает вызывающая процедура. Например, командой add sp, n (в предыдущем примере add sp, 6).
Насчет благодарностей - пока это не реализовано, но вроде Олег Калашников обещает, что скоро сделает форму для этого.

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


 Вопрос № 1943

Хай, эксперты. Вопрос: как в WinAPI создать регион
произвольной формы, например, под готовый jpg - чёрные
точки в регион не включаются. Интересно просто - овальные
или многоугольниковые(неужели В НИХ решение?) а по картинке - нет!



Вопрос отправлен: 25.11.2002, 21:54
Отправитель: Yury Lunev (koolkhel@mail.ru)

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

Отвечает St

Привет, Yury Lunev!
Просто отвечаю.
Наверное можно, но только если вы сами сделаете такую процедуру. И интересно как это всё при значительных неровностях картинки будет тормозить.
St

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


Отвечает masquer

Доброе время суток, Yury Lunev!
Дырявая у тебя картинка получится. Если знаешь как хранится изображение в jpg, поймешь - почему. Теоретически - возможно, а практически прийдется преобразовывать и дополнительно фильтровать полученное изображение.

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


Отвечает Bob Johnson

Здравствуйте, Yury Lunev!
Можно использовать функции CreatePolygonRgn, CreatePolyPolygonRgn и все остальные, а потом - CombineRgn. Под готовый jpeg ты так создашь его сам - можешь по строке проходить файл и создавать прямоугольные регионы.


Ответ отправлен: 27.11.2002, 15:09
Отправитель: Bob Johnson


 Вопрос № 1944


вопрос к Ayl
привет. получил твою программу , но она постоянно выдаёт ошибки и не работает. В какой версии ассемблера ты её компилил и напиши, пожалуйста, версию твоего ассемблера. Ив какой системе ты ее делал. Заранее спасибо.



Вопрос отправлен: 25.11.2002, 23:03
Отправитель: evgen

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

Отвечает Ayl

Здравствуйте, evgen!
Какие ошибки? Хоть бы пример привел. У меня работает.
Пользуюсь:
TASM 3.2i, TLINK 5.1
Компилю с ключами:
tasm prog /m2 /la
tlink prog /m /t /s
Режим компиляции MASM (установка по умолчанию).

Ответ отправлен: 26.11.2002, 13:04
Отправитель: Ayl


Отвечает Bob Johnson

Приветствую Вас, evgen!
Скорее всего нет нужных include файлов.


Ответ отправлен: 27.11.2002, 15:10
Отправитель: Bob Johnson


 Вопрос № 1945

Большое спасибо всем кто ответил на мой вопрос.У меня есть еше один.Мне нужно написать прогу которая будет подщитывать мой текущий трафик в инете тоесть простой счетчик.Я незнаю как мне сделать так чтобы она загружалась сразуже как я выхожу в сеть.
И еще если конечго такое возможно я хочу чтобы в иконке возле часов куда будет сворачиваться окошко бежали цифры отображающие мой текущий счет.



Вопрос отправлен: 25.11.2002, 23:08
Отправитель: WiX (www.rasdv@mail.ru)

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

Отвечает St

Привет, WiX!
Сорри, как сделать не знаю.
Но такая программа уже есть - называется Tick. Это не звонилка а именно счетчик времени, денег, Мб и тд. Грузится с виндами и при соединении показывает небольшое окошко с информацией.
St

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


Отвечает Bob Johnson

Доброе время суток, WiX!
По поводу счетчика - есть такая функция Shell_NotifyMessage - она позволяет добовлять и изменять иконки в systemtray. Вот ее и используй, только предварительно ты эту иконку сам рисуешь в памяти как тебе нужно.


Ответ отправлен: 27.11.2002, 15:10
Отправитель: Bob Johnson



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (41)
C / C++ (29)
Perl (9)
Delphi (15)
Pascal (23)
Basic / VBA (10)
Java / JavaScript (15)
PHP (10)
MySQL / MSSQL (9)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (22)
"Железо" (27)
Поиск информации (16)
Администратору
Windows NT/2000/XP (12)
Linux / Unix (17)
Юристу
Гражданское право (9)
Семейное право (3)
Трудовое право (5)
КоАП (3)

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




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

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


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

В избранное