Использую в программе самомодифицирующийся код (не кидайти в меня тухлыми яйцами - работает все это в RealMode.
Вот такое дело: .byte 0x66 /* префикс изменения разрядности операнда */ .byte 0xea /* код команды ljmp */ .comm pmode32_entry_offset, 4 /* 32-битное смещение */ .word 0x08 /* селектор */
Это эквивалентно ljmpl $0x08, pmode32_entry_offset
Все это дело благополучно не работает. Долго думал в чем дело, потом догадался запустить biew. И что я вижу:
00000060: 66EA08000F20C024 jmpf32 24C0:+200F0008
То есть в целях оптимизации .word 0x08 и .comm pmode32_entry_offset, 4 были переставлены, чтобы обеспечить pmode32_entry_offset адрес, делящийся на 4.
Как отключить такую оптимизацию?
Спасибо.