Мне нужно установить самый старший бит некоторого адреса/смещения метки.NASM - Расширение метки с помощью битового флага
Я пробовал:
test.nasm:
BITS 32
dw mylabel | 0x8000
mylabel:
dd 0
Но при попытке собрать это я получаю:
nasm -f bin test.nasm
test.nasm:3: error: `|' operator may only be applied to scalar values
Почему не видит MyLabel как скаляр стоимость? Я думал, что метки просто заменяются их адресом (скалярным значением) ассемблером.
Я использую nasm v 2.09.04, если это имеет значение.
Заранее благодарим за любую помощь.
EDIT: Я был в состоянии использовать + вместо |. Похоже, что побитовые операторы не работают с метками. Как вы думаете, это специально или ошибка?
Предполагается, что dw хранит смещение (как 16-битное значение) метки mylabel с начала файла, но оно должно быть расширено с помощью некоторого флага. Я пишу секцию .reloc файла/изображения win exe (PE) вручную. – masterxilo