Как закодировать абсолютную инструкцию JMP / CALL в MASM?

Как я могу написать далеко абсолютную инструкцию JMP или CALL, используя MASM? В частности, как мне заставить его отправлять эти инструкции с использованием кодов операций EA и CA, не отправляя их вручную с использованием DB или других директив данных?

Например, рассмотрим случай перехода к точке входа сброса BIOS в FFFF: 0000 в загрузочном секторе. Если бы я использовал NASM, я мог бы закодировать это в одной инструкции очевидным образом:

jmp 0xffff:0

С ассемблером GNU синтаксис менее очевиден, но следующее сделает работу:

jmp 0xffff, 0

Однако, когда я пробую очевидное решение с MASM:

jmp 0ffffh:0

Я получаю следующую ошибку:

t206b.asm(3) : error A2096:segment, group, or segment register expected
Обходных путей, которые я стараюсь избегать

В MASM я могу использовать несколько возможных обходных путей, например, любой из следующих:

Вручную соберите инструкцию, выдав машинный код вручную:

    DB 0EAh, 0, 0, 0FFh, 0FFh

Используйте далеко непрямой прыжок:

bios_reset DD 0ffff0000h
    ...
    jmp bios_reset   ; FF 2E opcode: indirect far jump

Или поместите адрес в стек и используйте команду RET для его «возврата»:

    push 0ffffh
    push 0
    retf

Но могу ли я в любом случае использовать реальную инструкцию JMP и заставить MASM сгенерировать правильный код операции (EA)?

Ответы на вопрос(3)

Ваш ответ на вопрос