scuter, по поводу форматов файлов, сначала определись под какую платформу ты будешь писать?
Если под дос, то это MZ для экзешников или с org 100h в начале если для ком-файлов, если под виндовс, то это PE, если под Linux - то ELF, если под KolibriOS, то скачиваешь колибри сдк с официального сайта и смотришь как выглядят примеры программ.
Форматы NE, LE, LX тебе скорее всего не понадобятся, COFF может понадобиться для написания динамических библиотек под Колибри.
Далее ищешь учебник по ассемблеру и примеры конкретно под выбранную платформу. Обычно изучение начинают с доса, хотя можно и с колибри, тогда опять же в сдк есть примеры и мануалы.
Вообще не стоит начинать изучение с flat assembler programmer's manual, это скорее справочник, а не учебник. Там все написано максимально полно (про те же форматы файлов), а не упрощенно для понимания.
ряд вопросов по FASM
такое дело не срабатывает,Mario wrote:scuter
Так не катит?и не забываем про нужные includeCode: Select all
align 4 vesa_block VESAInfoBlock ;----------------------------------------------------------------------------- mov eax, [vesa_block.VESASignature] или mov eax, vesa_block.VESASignature cmp [eax],byte 'V'
пишет ундефайнд симбол(Undefined symbol)
может дело в это инклюде(include) который
Mario wrote:и не забываем про нужные include
scuter, ты вообще читаешь, что тебе пишут? Фигурные скобки нужны.
ты про какие скобки говоришь,SoUrcerer wrote:scuter, ты вообще читаешь, что тебе пишут? Фигурные скобки нужны.
все посты несколько раз прочитал
Блин, туплю. Наоборот. Либо убирать фигурные скобки, либо ставить точки перед именами в определении структуры.
flat assembler programmer's manualInsolor wrote:Вообще не стоит начинать изучение с 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`.
Что из этого тебе непонятно? Внимательно ли ты прочитал мой предыдущий пост, чтобы заметить в примерах то, что я сейчас объясняю на пальцах?
`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.
Nuff said.scuter wrote:пишет ундефайнд симбол(Undefined symbol)
в ином случае пишет
include 'struct.inc'
error:file not found.
Spoiler:
Всем добра в этом треде.Что касается ошибки "file not found", то на русский язык она переводится как "файл не найден", что в пояснении не нуждается. FASM ожидает обнаружить в кавычках полный путь к файлу ("C\abc\def.inc" или "/abc/def.inc") или же относительный путь (который не начинается со спецификации диска или символа "/"). В последнем случае, FASM пытается найти файл относительно расположения исходного файла, содержащего директиву `include`, или же, если не получилось, относительно директории, в которой был запущен сам ассемблер (то есть, рабочей директории на момент его запуска).
in code we trust
Who is online
Users browsing this forum: Bing [Bot] and 0 guests