Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2011, 16:43   #1
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию masm32 подменяет JZ на JE тогда, когда это совсем не нужно

Собственно сабж. Принципиальной разницы в этих переходах нет, если использовать CMP. CMP меня совсем не интересует, тк есть более кошерная TEST, но опять таки TEST влияет только на нульфлаг, так например :
Код:
	
;cae_descmngr_bCreated - флаг существования объекта 
TEST	cae_descmngr_bCreated, 	CAE_FALSE
JNZ 	if_object_created
MOV	eax, ERR_CAE_DESCMNGR_NOTCREATED
	RET
if_object_created :
;проверка на переполнение с помощью маски, аля если (0x0002FFFF & 0xFFFF0000) отличное от нуля, то курим и уходим
TEST	cae_descmngr_dwCountDesc, CAE_DESCMNGR_OVERFLOW_MASK
JZ	if_not_overflow
MOV	eax, ERR_CAE_DESCMNGR_OVERFLOW
	RET
if_not_overflow :
Только бида. Масма "потимизирует" код так
CPU Disasm
Address Hex dump Command Comments
004010A3 |. F705 00204000 TEST DWORD PTR DS:[402000],00000000
004010AD |. 75 09 JNE SHORT 004010B8
004010AF |. B8 00000080 MOV EAX,80000000
004010B4 |. C9 LEAVE
004010B5 |. C2 0400 RETN 4
004010B8 |> F705 44224000 TEST DWORD PTR DS:[402244],FFFF0000
004010C2 |. 74 09 JE SHORT 004010CD
004010C4 |. B8 00000040 MOV EAX,40000000
004010C9 |. C9 LEAVE
004010CA |. C2 0400 RETN 4


Вывод - JNE в топку.
Люди. Подскажите, есть ли в масмах директива откл оптимизации для куска кода?
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 12.07.2011, 17:10   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Да нет там никакой оптимизации.
Совершенно одинаковые команды.
Даже машинные коды одинаковые:

Цитата:
75 cb JNZ rel8 Jump short if not zero (ZF=0)
75 cb JNE rel8 Jump short if not equal (ZF=0)
В них вообще разгицы никакой нет, хоть с CMP, хоть без CMP. Тупо проверяют флаг Z, если не установлен, то переход.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 12.07.2011, 17:37   #3
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

хм. собственно всё нормально работает, если TEST заменить на CMP (не в случае с битовой маской). В чём цимес то? У меня уже привычка использовать TEST везде где можно, а тут вдруг проект по крупнее и масма в кармане и, внезапно, не работает.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 12.07.2011, 17:49   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цимес где-то с логикой.
Я гоню, или вот этот test:
Код:
TEST	cae_descmngr_bCreated, CAE_FALSE
;F705 00204000 TEST DWORD PTR DS:[402000],00000000
будет всегда 0 выдавать?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 12.07.2011, 17:57   #5
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Ух ты какое разжижение Логики действительно никакой. Надо на CAE_TRUE проверять. Запарился. И за мнемонику JE и JZ спасибо.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Похоже решение проблемы наступает тогда, когда об этом напрямую скажут Президенту grenles Свободное общение 10 21.12.2010 13:24
Как определить когда нажата кнопка мыши, если она нажата в совсем другой программе? Iceman Общие вопросы Delphi 2 19.10.2009 19:03
Не совсем понимаю, что нужно найти в задании. greenypeace Помощь студентам 2 08.06.2009 13:50