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