Сборка Intel для ATT для чтения данных сегмента BIOS
Каким будет эквивалентный код ATT для следующего кода Intel:
BIOS segment byte at 40h
org 13h
memory dw ?
BIOS ends
2 ответа
Это не вопрос синтаксиса at&t как такового. Вопрос в том, какой ассемблер и компоновщик вы используете. Кроме того, я полагаю, вам все еще нужно загрузить сегментный регистр вручную. Таким образом, самым простым случаем было бы избавиться от всего этого, а вместо этого сделать что-то вроде этого:
mov $0x40, %ax
mov %ax, %es
mov %es:0x13, %ax
В зависимости от ваших требований и доступных инструментов вы, конечно, можете создать более интересный код, но я не вижу особого смысла.
Там нет эквивалента для AT 40h
атрибут определения сегмента в синтаксисе AT&T, используемый ассемблером GNU. GAS на самом деле не понимает сегменты x86 и не имеет специальной поддержки для них. Также не поддерживаются форматы объектов, поддерживаемые GAS, PECOFF и ELF. Обратите внимание, что разделы (иногда называемые сегментами) - это не то же самое, что сегменты x86. Даже современные версии MASM больше не поддерживают атрибут AT.
Если ваш код MASM использует сегмент BIOS, как в следующем примере:
BIOS segment byte at 40h
org 13h
memory dw ?
BIOS ends
_TEXT SEGMENT USE16
mov bx, OFFSET memory
mov ax, SEG memory
mov es, eax
_TEXT ENDS
Затем вы можете сделать эквивалент в синтаксисе AT&T примерно так:
memory = 0x04
memory_seg = 0x40
.text:
mov $memory, %bx
mov $memory_seg, %ax
mov %ax, %es