Используя ".intel_syntax noprefix", как я могу получить адрес памяти метки?
Я учусь создавать программы в реальном режиме, собранные и связанные с:
- GCC Assembler версия 2.25
- Binutils версия 2.25
- GCC версия 5.2.0
Я использую синтаксис Intel без префиксов, указанных с .intel_syntax noprefix
Я хочу загрузить адрес строки в регистр СИ. Я знаю, как обращаться к области памяти в NASM, но когда я делаю то же самое в коде GNU Assembler, он только перемещает WORD строки в регистр, а не адрес метки.
Мой код:
.code16
.intel_syntax noprefix
mov cx, 11
mov si, name
mov di, 0x7E00
push di
rep cmpsb
pop di
je LOAD
Когда я компилирую его с помощью GCC, я вижу в отладчике, что делает процессор:
mov si, WORD ptr ds:0x7d2d
но я хочу, чтобы адрес строки перемещался в регистр, а не данные, на которые он указывает.
Я также попытался заключить квадратные скобки вокруг имени, как это:
.code16
.intel_syntax noprefix
mov cx, 11
mov si, [name]
mov di, 0x7E00
push di
rep cmpsb
pop di
je LOAD
Это не имеет значения.
Из NASM я знаю, что этот ассемблерный код работает:
mov si, name
NASM сгенерирует инструкцию, которая перемещает адрес name
в регистр СИ.
Мой вопрос: есть ли способ заставить GCC использовать синтаксис Intel без префикса для загрузки адреса символа в регистр?
1 ответ
Если вы используете код ассемблера GNU (через GCC) с директивой:
.intel_syntax noprefix
Тогда синтаксис может показаться немного необычным и плохо документированным в канонических источниках. Этот код:
mov si, name
Перемещает 16-битное слово в область памяти, указанную меткой name
в СИ. Следующие инструкции делают то же самое, хотя я предпочитаю квадратные скобки [
а также ]
потому что цель кода яснее:
mov si, name
mov si, [name]
mov si, word ptr [name] # This is the same as two above in long form
# The use of "word ptr" here is similar to MASM
Чтобы получить адрес name
и поместите его в реестр, который нужно использовать offset
как это:
mov si, offset name
Если у кого-то есть канонический источник, который фактически описывает синтаксис, который можно использовать с .intel_syntax noprefix
пожалуйста, дайте мне знать в комментариях. Мне известны блоги о синтаксисе, вместе с некоторым презрением, но ничего официального.