Gодскажите, откуда берутся nop, если, как вы видите, я их ни где не писал, а только jz CostOvr0 компилятор tasm, модель памяти для .386 с сегментацией по 64 Кбайта
idsp Это просто компилятор зарезервировал место на случай, если смещение перехода не влезет в один байт, тогда он поставит jz с двухбайтовым опкодом(цифирки не помню) и двумя байтами смещения.
Black_mirror Посмотрите внимательно, там 16-битные команды, а для 16 бит длинного jcc нет, это, скорее всего, какое-то хитрое выравнивание
На оптимизацию совсем не похоже. При оптимизации возможно выравнивание переходов на 8-байт, особенно если их подряд очень много. Можно попробовать short приписать может и сделает так как надо. jz short CostOvr0
Для 386+ вообще-то есть. max7C4 же указал его ранее. Конечно, сделает. Однако короткий jz тут на пределе (rel8==0x7F), так что при небольшом шевелении, буквально в плюс три байта, перестанет компилироваться. ----8<---- idsp, Я думаю, нужно увеличить число проходов ассемблера (ключик /m). По умолчанию TASM однопроходной, уже при двух он соображает лучше.
И всё же (хотя ТС написал "модель памяти для .386 с сегментацией по 64 Кбайта") код 16-разрядный, иначе бы везде стояли префиксы 66h, 67h. Для тех случаев когда требуется jz за пределом ±127 байт вместо jz a0 пишут Код (Text): jnz a1 jmp a0 a1: ...
Это ещё зачем? На .386 в 16-битном коде есть near переходы, и прыгай себе за 128 байт. Он же не на 8086-286 запускать собирается... Код (Text): .386 code segment para public 'code' use16 assume cs:code, ds:code start: jmp entry db 256 dup('!') entry: dec ax jnz start ret code ends end start Код (Text): Module: test.asm Segment: code PARA USE16 00000109 bytes 0000 L$1: 0000 E9 00 01 JMP L$2 0003 21 21 AND word ptr [BX+DI],SP ; ............................................................................... 0101 21 21 AND word ptr [BX+DI],SP 0103 L$2: 0103 48 DEC AX 0104 0F 85 F8 FE JNE L$1 0108 C3 RET Routine Size: 265 bytes, Routine Base: code + 0000 No disassembly errors
Задавать какие-либо ключи в ком. стр. не получится - т.к. весь разговор идет о некой оболочке (для предмета "Микропроцессорные системы"), написанной у нас в универе - в которую входит тасм. Все параметры, видимо, заданы уже где-то внутри...
idsp, Хм. Создай tasm.cfg с этой опцией в каталоге с исходником, TASM должен подхватить (если он оттуда запускается).