Может быть, это прозвучит глупо, но как в fasm (в формате binary) выполнить прямой jmp far в тот же сегмент? И вообще, есть ли аналог масмовской директивы "seg"? Вот мой код (для примера) Код (Text): format binary org 100h xLabel103: ... jmp cs:xLabel103; на это компилер ругается jmp far xLabel103 ; это не работает, т. к. не указан сегмент Как это разрешить?
Тут же флат модель. Программа состоит из секций а не сегментов. а так через другой сегментный рег обращ как Вам выше сказали. К фасму куча туториала и там куча примеров и доки путные
И что сделает jmp far [cs:xLabel103]? Это же непрямой переход! Считает 4 байта начиная с адреса xLabel103, запишет их в CS:IP и программа порушится. это я уже экспериментално проверил Если бы я перемещал данные - другое дело, а мне переход нужен
t00x Это же то же самое))) Dr_Algorithm Код (Text): push es push cs pop es mov word [Labl-2],cs wbinvd ;или че-то другое, что позволит избежать проблем с кэшом ;Может быть, это: ;xor eax,eax ;cpuid pop es jmp far 0:xLabel103 Labl: Судя по всему, файл .com... Он может быть загружен по любому адресу и единственный способ для приложения (неважно, какой транслятор) узнать сегмент - смотреть значение в CS.
10110111 Если не ошибаюсь, leo уже не раз упоминал, что все современные процессоры (включая все P6 и выше) отслеживают запись в код, и никаких проблем быть не должно. И еще хотел спросить... а зачем вообще здесь все push/pop, если Вы все равно пишете из cs: "mov word [Labl-2],cs"?
Кажется, придумал: Код (Text): jmp short continue addr rd 1 continue: push cs pop word [addr+2] mov bx, target_label mov word [addr], bx jmp far [addr] ; получился всё равно непрямой переход ;-) Но это лучше, чем ничего А жаль, что нет аналога seg
Очепятка... Надо было Код (Text): mov word [es:Labl-2],cs Блин... совсем заглючило))) С учетом всех замечаний результат: Код (Text): mov word [cs:Labl-2],cs jmp far 0:xLabel103 Labl:
Dr_Algorithm А для чего вообще вся эта необходимость использовать именно дальний переход? Сегмент ведь остается одним и тем же.
А. понял, это самомодифицирующийся код, вместу нуля пишем cs, да? А вот насчёт mov ..., cs что-то сомневаюсь... Это какой-то макрос?