Приветствую! Я плохо разбираюсь в синтаксисе команд GNU Assembler, но недавно возникла необходимость сделать компиляцию асма, изначально заточенного под WASM, с помощью GAS (но при этом сохранить совместимость с WASM). Значит, прежде всего я врубил опцию: Code (Text): .intel_syntax noprefix Вопрос 1: Есть команды: Code (Text): mov esi, IDTRMRegister lidt fword ptr [esi] Компилер говорит: <i>Error: suffix or operands invalid for `lidt'</i> Как нужно исправить команду <b>lidt</b>? Мне нужно загрузить именно из адреса, указанного в регистре. Вопрос 2: Как на GAS написать следующее (?): Code (Text): data: db 0x800 dup(0) // 0x800 байт, заполненных нулём
Это не есть решение, хотя бы потому, что директивы 'db' в gas нет, а используется директива '.byte'. Ну а написание 0x800 нулей подряд - это мазохизм.
да но если хочешь сохранить совместимость, то: - надо попытаться приводить синтаксис с помощью макросов - не прокатило с макросами - используй уже ассемблированные команды (но лучше первое) А ты попробуй. хочешь даже могу новую дурь посоветовать. называется Ctrl+V
Синтаксис приводится при помощи сишных макросов и сишного препроцессора. Другое дело, я не могу написать сишный макрос до тех пор, пока не узнаю, как должна выглядеть эта команда для GAS. Первое действительно лучше. Спасибо, но мы лучше воспользуемся штатными средствами по сокращению кода и улучшению его читабельности.
thx, с этим уже успел разобраться. Остался вопрос насчёт lidt/lgdt с регистрами. Это сейчас единственная проблема, которая мешает нормальной компиляции . Можно как-нибудь обойтись без опкодов?
SadKo только учти что порядок там обратный, вместо: mov esi, IDTRMRegister не <- а -> movl IDTRMRegister, %esi не знаю правда что у тебя IDTRMRegister . Но идею понял. В общем синтаксис советую покурить немного )
Советую покурить посты прежде чем отвечать Он в GAS включает интеловский синтаксис: Code (Text): .intel_syntax noprefix SadKo - попробуй без "fword ptr"
Не, если поставить ".intel_syntax noprefix", то порядок аргументов в инструкции такой же, как у интела. IDTRMRegister - это IDTR реального режима (гружу для перехода из защищённого в реальный и обратно). Проблема сейчас именно с синтаксисом, а не логикой . Потому что программа, скомпилированная wasm, работает.
Да, пробовал: Code (Text): lidt [esi] Ругается. Попробую как мне посоветовали сделать - взять в круглые скобки, но чуть позже.