ряд вопросов по FASM

Assembler programming questions
  • Mario wrote:scuter
    Так не катит?

    Code: Select all

    align 4
    vesa_block VESAInfoBlock
    ;-----------------------------------------------------------------------------
    mov eax, [vesa_block.VESASignature]
    
    или
    
    mov eax, vesa_block.VESASignature
    cmp [eax],byte 'V'
    и не забываем про нужные include
    такое дело не срабатывает,
    пишет ундефайнд симбол(Undefined symbol)
    может дело в это инклюде(include) который
    Mario wrote:и не забываем про нужные include
  • scuter, ты вообще читаешь, что тебе пишут? Фигурные скобки нужны.
  • SoUrcerer wrote:scuter, ты вообще читаешь, что тебе пишут? Фигурные скобки нужны.
    ты про какие скобки говоришь,
    все посты несколько раз прочитал
  • Блин, туплю. Наоборот. Либо убирать фигурные скобки, либо ставить точки перед именами в определении структуры.
  • Insolor wrote:Вообще не стоит начинать изучение с flat assembler programmer's manual, это скорее справочник, а не учебник. Там все написано максимально полно (про те же форматы файлов), а не упрощенно для понимания.
    flat assembler programmer's manual
    это не мануал, это просто приписка(типа мы ето умеем)

    и в принципе не стоит говорить такие фразы как (почетай учебник, посмотри мануал и т.п.)
    вопросы были заданы максимально конкретным образом, и не относятся к мануалу

    я в дейтсмительности очень благодарен Mario IgorA за ихние ответы, они очень помогли,
    а вот посты от mike.dld только раздражать могут.
    SoUrcerer wrote:Блин, туплю. Наоборот. Либо убирать фигурные скобки, либо ставить точки перед именами в определении структуры.
    то есть мне надо писать структуру без скобок что бы использовать переменные через точку
    то есть так

    Code: Select all

    struct SIZE
      cx dd ?
      cy dd ?
    ends
      mov eax, SIZE.cx
    
    оно не работает
    Last edited by scuter on Mon Dec 19, 2011 11:54 pm, edited 1 time in total.
  • Я знаю таких людей как ты. Пока не напишешь им решение, не отстанут. А попытки заставить поработать головой ни к чему не приводят, не смотря на уверения в том, что это таки обязательно условие.

    Вот тебе два примера, которые "работае":

    Code: Select all

    include 'struct.inc'
    
    ; ...
    
    struct SIZE
      cx dd ?
      cy dd ?
    ends
    
    ; ...
    
            mov     eax, SIZE.cx

    Code: Select all

    ; ...
    
    struc SIZE
    {
      .cx dd ?
      .cy dd ?
    }
    
    virtual at 0
      SIZE SIZE
    end virtual 
    
    ; ...
    
            mov     eax, SIZE.cx
    in code we trust
  • Code: Select all

    struc rsn
      {
        s db 'practes'
        r db 'video'
        rl = $-r
      }
      struc rsr
      {
        zs db 256 dup (?)
        zr db 256 dup (?)
      }
      virtual at 0
        rn rsn
        rz rsr
      end virtual
      mov si, rn.s
    
    это не работает,
    ни тот ни другой пример.
  • Code: Select all

    struc VESAInfoBlock
    {
      VESASignature     db 'VESA'       ;VESA сигнатура
      VESAVersion       dw ?            ;версия VESA (0100h, 0102h или 0200h)
      OemStringPtr      dd ?            ;указатель на строку с именем производителя (заканчивается "0")
      Capabilities      db 4 dup (?)    ;флаги графических возможностей
      VideoModePtr      dd ?            ;указатель на список видеорежимов
      TotalMemory       dw ?            ;размер видеопамяти в 64-Кбайт блоках
      ; Дополнительно в VBE 2.0 добавлены поля:
      OemSoftwareRev    dw ?            ;номер версии реализации VBE
      OemVendorNamePtr  dd ?            ;указатель на строку с именем поставщика
      OemProductNamePtr dd ?            ;указатель на строку с названием продукта
      OemProductRevPtr  dd ?            ;указатель на строку с версией продукта
      Reserved          db 222 dup (?)  ;зарезервировано; область расширения блока
      OemData           db 256 dup (?)  ;область данных для строк производителя
    }
    virtual at 0
      VESA VESAInfoBlock
    end virtual
    
    mov eax, VESAVersion
    
    вот это работает
  • Ты когда пишешь что не работает - пиши на что тебе FASM ругается. Скриншот сделай в крайнем уж случае. Все-же ситуации разные бывают.
  • Я человек терпеливый (иногда), даже когда меня пытаются сравнивать с дебилом, но это уже переходит границы. Объясняю последний раз то, что должно было бы уже быть давно понято.
    `struc` - это ключевое слово ассемблера. При объявлении структур с его использованием, необходимо предварять имя каждого члена структуры точкой (`.`) и обрамлять список членов фигурными скобками (`{` и `}`).
    `struct` - это макрос, объявленный в файле struct.inc из стандартной поставки ассемблера. При объявлении структур с его использованием, имя каждого члена структуры предварять точкой (`.`) не нужно, а заканчивать список членов нужно ещё одним макросом, `ends`.
    Что из этого тебе непонятно? Внимательно ли ты прочитал мой предыдущий пост, чтобы заметить в примерах то, что я сейчас объясняю на пальцах?
    in code we trust
  • Mario wrote:Ты когда пишешь что не работает - пиши на что тебе FASM ругается. Скриншот сделай в крайнем уж случае. Все-же ситуации разные бывают.
    scuter wrote:пишет ундефайнд симбол(Undefined symbol)
    в ином случае пишет

    include 'struct.inc'
    error:file not found.

    или

    error: unexpected characters.
  • mike.dld wrote:Я человек терпеливый (иногда), даже когда меня пытаются сравнивать с дебилом, но это уже переходит границы. Объясняю последний раз то, что должно было бы уже быть давно понято.
    `struc` - это ключевое слово ассемблера. При объявлении структур с его использованием, необходимо предварять имя каждого члена структуры точкой (`.`) и обрамлять список членов фигурными скобками (`{` и `}`).
    `struct` - это макрос, объявленный в файле struct.inc из стандартной поставки ассемблера. При объявлении структур с его использованием, имя каждого члена структуры предварять точкой (`.`) не нужно, а заканчивать список членов нужно ещё одним макросом, `ends`.
    Что из этого тебе непонятно? Внимательно ли ты прочитал мой предыдущий пост, чтобы заметить в примерах то, что я сейчас объясняю на пальцах?
    спасибо теперь понял.
    mike.dld wrote:Я человек терпеливый (иногда), даже когда меня пытаются сравнивать с дебилом.
    прошу прощение за аскарбление,

    просто уже много времени просидел за этим делом, а результата так и не добился
    спрашиваю на форуме и тут мне говорят что в мануале всё написано, а я на него уже 3-й месяц смотрю
    скоро буду знать эго как "отче наш".
    Last edited by scuter on Tue Dec 20, 2011 12:18 am, edited 1 time in total.
  • scuter wrote:пишет ундефайнд симбол(Undefined symbol)
    в ином случае пишет

    include 'struct.inc'
    error:file not found.
    Nuff said.
    Spoiler:Всем добра в этом треде.
    Image
  • Что касается ошибки "file not found", то на русский язык она переводится как "файл не найден", что в пояснении не нуждается. FASM ожидает обнаружить в кавычках полный путь к файлу ("C\abc\def.inc" или "/abc/def.inc") или же относительный путь (который не начинается со спецификации диска или символа "/"). В последнем случае, FASM пытается найти файл относительно расположения исходного файла, содержащего директиву `include`, или же, если не получилось, относительно директории, в которой был запущен сам ассемблер (то есть, рабочей директории на момент его запуска).
    in code we trust
  • Who is online

    Users browsing this forum: No registered users and 24 guests