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

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


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

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

Выпуск № 628
от 13.12.2006, 17:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 373, Экспертов: 30
В номере:Вопросов: 3, Ответов: 6


Вопрос № 66029: изучаю ассемблер по книге Олега Калашникова "Ассемблер? Это просто".Проблема:не могу могу ассемблировать примеры. Я установил и TASM и MASM .Открываю TASM.EXE или MASM.EXE -они сразу закрываются. Что делать?...
Вопрос № 66113: Добрый день. У еня возникла проблема с перерисовкой при изменении размеров окна. Все что было нарисовано исчезает :(. В приложении часть кода который рисует круги. если можно, укажите что нужно дописать чтобы небыло этой проблемы. Зарание всем спасиб...
Вопрос № 66122: Уважаемые экперты!! Мне потребоваль реализовать скоростное копирование значений (тип WORD) из одного массива в другой, кроме тех значений что совпадают с exclude. Вот так выглядит реализация на си. Но мне нужно ещё больше скорости, подскажит...

Вопрос № 66.029
изучаю ассемблер по книге Олега Калашникова "Ассемблер? Это просто".Проблема:не могу могу ассемблировать примеры.
Я установил и TASM и MASM .Открываю TASM.EXE или MASM.EXE -они сразу закрываются.
Что делать?
Отправлен: 07.12.2006, 23:49
Вопрос задал: Andrej11 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

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

Набери так TASM /? >help_me.txt
потом читай его до посинения.

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

Отвечает: Волков Павел Юрьевич
Здравствуйте, Andrej11!
Их надо запускать в консоли, зайдите в Пуск-Выполнить и введите "cmd" (без кавычек), перейдите в папку (команда "cd <путь>") с компилятором (TASM,MASM) и текстом программы(*.asm) и вызывайте компилятор/линковщик.
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 10-ый класс)
Ответ отправлен: 08.12.2006, 06:37


Вопрос № 66.113
Добрый день. У еня возникла проблема с перерисовкой при изменении размеров окна. Все что было нарисовано исчезает :(. В приложении часть кода который рисует круги. если можно, укажите что нужно дописать чтобы небыло этой проблемы. Зарание всем спасибо.

Приложение:

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

Отвечает: ADSota
Здравствуйте, Nickolai!

При изменении размеров centerset остается в значении false.
Добавь примерно такое:
ELSEIF uMsg==WM_SIZE
mov centreset,TRUE
Виндовс и сама хорошо решает, когда нужно перерисовать окно, а когда нет. Поэтому при обработке сообщения WM_PAINT можно смело убрать проверку на значение centreset.
---------
Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Профессионал)
Тел.: 8-916-53-43-916
ICQ: 84611301
----
Ответ отправлен: 08.12.2006, 15:29

Отвечает: Евгений Иванов
Здравствуйте, Nickolai!
Сделай перехват на WM_ERASEBACKGND
и там рисуй
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 08.12.2006, 15:30


Вопрос № 66.122
Уважаемые экперты!!

Мне потребоваль реализовать скоростное копирование значений (тип WORD) из одного массива в другой, кроме тех значений что совпадают с exclude. Вот так выглядит реализация на си. Но мне нужно ещё больше скорости, подскажите реализацию данного алгоритма на ассемблере.

ЗЫ Требуется интеграция в си.

Приложение:

Отправлен: 08.12.2006, 16:35
Вопрос задал: Golden Spider (статус: 6-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: ADSota
Здравствуйте, Golden Spider!

Смело можете писать:
void CopyArrayExclude(WORD * to, WORD * from, int size, WORD exclude){
int i,j=0;
for(i=0;i }
}
На самом деле Си такие конструкции очень сильно оптимизирует в зависимости от контекста в котором используется данная функция - выйгрыша может не получится вообще...

Если очень хочется на ассемблере, то это будет выглядеть примерно так (для массивов средних размеров):
void CopyArrayExclude(WORD * to, WORD * from, int size, WORD exclude){
asm
{
mov bx,exclude
mov di,to;//для 32-х бит: mov edi,to
mov si,from;//для 32-х бит: mov esi,from
xor ecx,ecx
mov cx,size
cld
}
mv:
asm
{
lodsw
or ax,bx
jz mve
stosw
}
mve:
asm loop mv;
}

---------
Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Профессионал)
Тел.: 8-916-53-43-916
ICQ: 84611301
----
Ответ отправлен: 08.12.2006, 17:08
Оценка за ответ: 5
Комментарий оценки:
Понятно

Отвечает: Bob Johnson
Здравствуйте, Golden Spider!
из твоего кода становится понятно, что если исходное значение равно исключаемому, то значение в целевой массив не переписывается, а просто пропускается?
вообще, современные компиляторы С++ действительно хорошо оптимизируют код, так что прежде всего нужно посмотреть, что сгенерит тут компилятор.
на мой взгляд, место для улучшения - это условные переходы. процессор сильно тормозит, если не угадывает условный переход, поэтому условные переходы лучше исключать. предлагаю код в приложении. он не изменяет содержимое ячеек памяти целевого массива, если в исходном на соотв. месте стоит код исключения. если туда можно записывать, например, 0 на это место, код упрощается.
в коде использован метод cmp + sbb для избежания условного перехода.
также можно попробовать реализовать данную задачу с помощью ММХ (оно как раз заточено под 16-ти разрядные числа).

Приложение:

Ответ отправил: Bob Johnson (статус: Академик)
Россия, Калуга
WWW: Программирование
----
Ответ отправлен: 08.12.2006, 19:55
Оценка за ответ: 5
Комментарий оценки:
приму во внимание


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

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

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

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

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


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


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

В избранное