Я учусь создавать программы в реальном режиме, собранные и связанные с:
- GCC Assembler версии 2.25
- Binutils версии 2.25
- GCC версии 5.2.0
Я использую синтаксис Intel без префиксов, указанных с помощью .intel_syntax noprefix
Я хочу загрузить адрес строки в регистр SI. Я знаю, как ссылаться на ячейку памяти в NASM, но когда я делаю то же самое внутри кода GNU Assembler, он перемещает в регистр только СЛОВО строки, а не адрес метки. .
Мой код:
.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
в регистр SI.
Мой вопрос: есть ли способ заставить GCC использовать синтаксис Intel без префикса для загрузки адреса символа в регистр?