Вопрос № 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. Вот так выглядит реализация на си. Но мне нужно ещё больше скорости, подскажите реализацию данного алгоритма на ассемблере.
Смело можете писать:
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 Комментарий оценки: приму во внимание