Компилятор не хочет генерировать относительный короткий джамп, даже когда ему явно указан постфикс short. Почему? Разные настройки оптимизации пробовал(хотя по-моему никакие оптимизации не должны влиять на ассемблерные процедуры). У меня процедура из 1.5 тыс строк кода на ассемблере, так в ней компилятор не сгенерировал ни одного короткого джампа, все с абсолютным адресом! Для меня это оч. важно, так как существенен размер кода(портирую с делфи). Я в панике.
Вот пример:
sub eax,dword ptr [esp]
add esp,04h
cmp eax,0FFFh
jbe short @not_traced // JBE 0xABSOLUTE_ADDRESS - WHY???!!!
popad
popad
retn
@not_traced:
Есть идеи, в чем может быть дело? Использую lazarus c fpc 2.2.2.
Спасибо.
Исправляюсь: на самом деле компилятор генерит ОТНОСИТЕЛЬНЫЕ джампы, но с 32ух-битным смещением.... т.е. не jmp short а jmp near. Тем не менее, проблема остается, нужен-то jmp short с 8-и битным смещением!