Page 2 of 10

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

Posted: Sat Dec 17, 2011 4:51 pm
by Insolor
scuter, по поводу форматов файлов, сначала определись под какую платформу ты будешь писать?

Если под дос, то это MZ для экзешников или с org 100h в начале если для ком-файлов, если под виндовс, то это PE, если под Linux - то ELF, если под KolibriOS, то скачиваешь колибри сдк с официального сайта и смотришь как выглядят примеры программ.

Форматы NE, LE, LX тебе скорее всего не понадобятся, COFF может понадобиться для написания динамических библиотек под Колибри.

Далее ищешь учебник по ассемблеру и примеры конкретно под выбранную платформу. Обычно изучение начинают с доса, хотя можно и с колибри, тогда опять же в сдк есть примеры и мануалы.

Вообще не стоит начинать изучение с flat assembler programmer's manual, это скорее справочник, а не учебник. Там все написано максимально полно (про те же форматы файлов), а не упрощенно для понимания.

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

Posted: Mon Dec 19, 2011 10:48 pm
by scuter
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

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

Posted: Mon Dec 19, 2011 10:52 pm
by SoUrcerer
scuter, ты вообще читаешь, что тебе пишут? Фигурные скобки нужны.

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

Posted: Mon Dec 19, 2011 11:00 pm
by scuter
SoUrcerer wrote:scuter, ты вообще читаешь, что тебе пишут? Фигурные скобки нужны.
ты про какие скобки говоришь,
все посты несколько раз прочитал

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

Posted: Mon Dec 19, 2011 11:08 pm
by SoUrcerer
Блин, туплю. Наоборот. Либо убирать фигурные скобки, либо ставить точки перед именами в определении структуры.

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

Posted: Mon Dec 19, 2011 11:26 pm
by 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
оно не работает

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

Posted: Mon Dec 19, 2011 11:33 pm
by mike.dld
Я знаю таких людей как ты. Пока не напишешь им решение, не отстанут. А попытки заставить поработать головой ни к чему не приводят, не смотря на уверения в том, что это таки обязательно условие.

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

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

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

Posted: Mon Dec 19, 2011 11:46 pm
by scuter

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
это не работает,
ни тот ни другой пример.

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

Posted: Mon Dec 19, 2011 11:53 pm
by scuter

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
вот это работает

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

Posted: Mon Dec 19, 2011 11:55 pm
by Mario
Ты когда пишешь что не работает - пиши на что тебе FASM ругается. Скриншот сделай в крайнем уж случае. Все-же ситуации разные бывают.

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

Posted: Mon Dec 19, 2011 11:59 pm
by mike.dld
Я человек терпеливый (иногда), даже когда меня пытаются сравнивать с дебилом, но это уже переходит границы. Объясняю последний раз то, что должно было бы уже быть давно понято.
`struc` - это ключевое слово ассемблера. При объявлении структур с его использованием, необходимо предварять имя каждого члена структуры точкой (`.`) и обрамлять список членов фигурными скобками (`{` и `}`).
`struct` - это макрос, объявленный в файле struct.inc из стандартной поставки ассемблера. При объявлении структур с его использованием, имя каждого члена структуры предварять точкой (`.`) не нужно, а заканчивать список членов нужно ещё одним макросом, `ends`.
Что из этого тебе непонятно? Внимательно ли ты прочитал мой предыдущий пост, чтобы заметить в примерах то, что я сейчас объясняю на пальцах?

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

Posted: Tue Dec 20, 2011 12:10 am
by scuter
Mario wrote:Ты когда пишешь что не работает - пиши на что тебе FASM ругается. Скриншот сделай в крайнем уж случае. Все-же ситуации разные бывают.
scuter wrote:пишет ундефайнд симбол(Undefined symbol)
в ином случае пишет

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

или

error: unexpected characters.

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

Posted: Tue Dec 20, 2011 12:13 am
by scuter
mike.dld wrote:Я человек терпеливый (иногда), даже когда меня пытаются сравнивать с дебилом, но это уже переходит границы. Объясняю последний раз то, что должно было бы уже быть давно понято.
`struc` - это ключевое слово ассемблера. При объявлении структур с его использованием, необходимо предварять имя каждого члена структуры точкой (`.`) и обрамлять список членов фигурными скобками (`{` и `}`).
`struct` - это макрос, объявленный в файле struct.inc из стандартной поставки ассемблера. При объявлении структур с его использованием, имя каждого члена структуры предварять точкой (`.`) не нужно, а заканчивать список членов нужно ещё одним макросом, `ends`.
Что из этого тебе непонятно? Внимательно ли ты прочитал мой предыдущий пост, чтобы заметить в примерах то, что я сейчас объясняю на пальцах?
спасибо теперь понял.
mike.dld wrote:Я человек терпеливый (иногда), даже когда меня пытаются сравнивать с дебилом.
прошу прощение за аскарбление,

просто уже много времени просидел за этим делом, а результата так и не добился
спрашиваю на форуме и тут мне говорят что в мануале всё написано, а я на него уже 3-й месяц смотрю
скоро буду знать эго как "отче наш".

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

Posted: Tue Dec 20, 2011 12:16 am
by SoUrcerer
scuter wrote:пишет ундефайнд симбол(Undefined symbol)
в ином случае пишет

include 'struct.inc'
error:file not found.
Nuff said.
Spoiler:Всем добра в этом треде.
Image

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

Posted: Tue Dec 20, 2011 12:20 am
by mike.dld
Что касается ошибки "file not found", то на русский язык она переводится как "файл не найден", что в пояснении не нуждается. FASM ожидает обнаружить в кавычках полный путь к файлу ("C\abc\def.inc" или "/abc/def.inc") или же относительный путь (который не начинается со спецификации диска или символа "/"). В последнем случае, FASM пытается найти файл относительно расположения исходного файла, содержащего директиву `include`, или же, если не получилось, относительно директории, в которой был запущен сам ассемблер (то есть, рабочей директории на момент его запуска).