Вопросы знатокам GAS

Тема в разделе "WASM.ASSEMBLER", создана пользователем SadKo, 28 май 2009.

  1. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Приветствую!

    Я плохо разбираюсь в синтаксисе команд GNU Assembler, но недавно возникла необходимость сделать компиляцию асма, изначально заточенного под WASM, с помощью GAS (но при этом сохранить совместимость с WASM).

    Значит, прежде всего я врубил опцию:
    Код (Text):
    1. .intel_syntax noprefix
    Вопрос 1:
    Есть команды:
    Код (Text):
    1.         mov esi, IDTRMRegister
    2.         lidt fword ptr [esi]
    Компилер говорит:
    <i>Error: suffix or operands invalid for `lidt'</i>
    Как нужно исправить команду <b>lidt</b>? Мне нужно загрузить именно из адреса, указанного в регистре.

    Вопрос 2:
    Как на GAS написать следующее (?):
    Код (Text):
    1. data: db 0x800 dup(0) // 0x800 байт, заполненных нулём
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    1) db 0Fh, 01h 1Eh
    2) db 0,0,...,0
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Это не есть решение, хотя бы потому, что директивы 'db' в gas нет, а используется директива '.byte'.
    Ну а написание 0x800 нулей подряд - это мазохизм.
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    да но если хочешь сохранить совместимость, то:
    - надо попытаться приводить синтаксис с помощью макросов
    - не прокатило с макросами - используй уже ассемблированные команды (но лучше первое)
    А ты попробуй. хочешь даже могу новую дурь посоветовать. называется Ctrl+V
     
  5. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Синтаксис приводится при помощи сишных макросов и сишного препроцессора. Другое дело, я не могу написать сишный макрос до тех пор, пока не узнаю, как должна выглядеть эта команда для GAS.

    Первое действительно лучше.
    Спасибо, но мы лучше воспользуемся штатными средствами по сокращению кода и улучшению его читабельности.
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    из http://www.delorie.com/djgpp/doc/gas-docs.txt:
    гуглится в полпинка
     
  7. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    thx, с этим уже успел разобраться.
    Остался вопрос насчёт lidt/lgdt с регистрами. Это сейчас единственная проблема, которая мешает нормальной компиляции :). Можно как-нибудь обойтись без опкодов?
     
  8. ConstZ

    ConstZ New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2008
    Сообщения:
    42
    Вроде так получается:
    Код (Text):
    1. lidt (%esi)
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    SadKo
    только учти что порядок там обратный, вместо:
    mov esi, IDTRMRegister
    не <-
    а ->
    movl IDTRMRegister, %esi

    не знаю правда что у тебя IDTRMRegister . Но идею понял.
    В общем синтаксис советую покурить немного )
     
  10. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Советую покурить посты прежде чем отвечать ;)
    Он в GAS включает интеловский синтаксис:
    Код (Text):
    1. .intel_syntax noprefix
    SadKo - попробуй без "fword ptr"
     
  11. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Не, если поставить ".intel_syntax noprefix", то порядок аргументов в инструкции такой же, как у интела.
    IDTRMRegister - это IDTR реального режима (гружу для перехода из защищённого в реальный и обратно).
    Проблема сейчас именно с синтаксисом, а не логикой :). Потому что программа, скомпилированная wasm, работает.
     
  12. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Да, пробовал:
    Код (Text):
    1. lidt [esi]
    Ругается.
    Попробую как мне посоветовали сделать - взять в круглые скобки, но чуть позже.
     
  13. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    А не, с lidt [esi] получилось.
    Дома ещё раз проверю.
    Всем спасибо за помощь!