Page 1 of 3

помогите новичку FASM syntax

Posted: Fri Jul 30, 2010 5:29 am
by scuter
только начал изучать FASM,
посмотрел несколько статей, самоучителей и ничего не понял,
тут http://allasm.ru/lang.php написано что,
Единого стандарта для синтаксиса языков ассемблера не существует
в принципе на C++ тоже самое,
но всётаки хотелось бы узнать то что относится к FASM, ихний мануал очень мало чего даёт,
памогите пожалуйста найти хорошую доку,
если поточнее,
1) Основной синтаксис
2) Простые логические действия
3) Операторы(+, -, <<, ==, end, or)
4) Конструкции(if else elseif while do-while for)
5) Переменные
6) Функции
7) Объекты(если такое есть)


и если у кого есть, дайте пожалуйста исходники простого маленького графического редактора,
так чтоб только pixelmap и карандашик был с выботом цвета.

Re: помогите новичку FASM syntax

Posted: Fri Jul 30, 2010 7:04 am
by Mario
Здесь Руководство к FASM 1.64 - в моих постах.
Здесь Юров и Зубков.
и если у кого есть, дайте пожалуйста исходники простого маленького графического редактора,
так чтоб только pixelmap и карандашик был с выботом цвета.
Все исходники на SVN - Работа с SVN сервером kolibrios

Re: помогите новичку FASM syntax

Posted: Fri Jul 30, 2010 12:04 pm
by SII
scuter

Судя по Вашему списку, Вы пока не поняли, что язык ассемблера -- язык _низкого_ уровня, в отличие от Паскаля/Си/(далее список можно продолжать чуть ли не до бесконечности). Никаких операторов (присваивание, цикл, ветвление), никаких процедур-функций в том смысле, как в языках высокого уровня, здесь нет и быть не может, а имеются лишь директивы транслятора (которые указывают ему, как транслировать программу, как распределять память под переменные и т.д.) и машинные инструкции (команды, которые будут выполняться процессором при запуске программы). Очень редко когда один оператор языка высокого уровня транслируется в одну машинную инструкцию, обычно их получается несколько (иногда -- несколько десятков; всё зависит от сложности исходного оператора). Так что читайте учебники для начинающих ассемблерщиков и не пытайтесь покуситься на что-то сложное -- даже пресловутый ХеллоВорлд на ассемблере выглядит не так-то уж и просто (хотя, если разобраться, ничего сложного в нём нет).

Re: помогите новичку FASM syntax

Posted: Fri Jul 30, 2010 2:08 pm
by IgorA
scuter wrote:2) Простые логические действия
3) Операторы(+, -, <<, ==, end, or)
4) Конструкции(if else elseif while do-while for)
5) Переменные
6) Функции
Краткая подсказка, что надо знать для программирования названных тобою пунктов:
2)
or; and; not; xor
3)
+ : add
- : sub
<< : shl
== : cmp; je
or : or
4)
if : cmp; je; jne; jl; jg; jle; jge
else : jmp
while : cld; mov ecx,...; loop ...; loope ...
5)
db; dw; dd; dq; dt - переменные по 1,2,4,8,10 байт
6)
call ...; ret - это в самом простом случае, когда функция не принимает параметров и не использует локальных переменных

Re: помогите новичку FASM syntax

Posted: Fri Jul 30, 2010 4:16 pm
by art_zh
scuter

Человеку, не овладевшему минимальным математическим аппаратом, строго противопоказано самостоятельно изучать квантовую механику.
Дело даже не в том, что он ничего не поймёт.
Гораздо хуже: у него возникнет стойкая идиосинкразия к точным наукам, - всю жизнь его будет мутить от этой бредятины.

Точно так же бесполезно (и вредно!) браться за ассемблер (любой) с нуля.
Для начала надо познакомиться с архитектурой ЦП - тогда и дело пойдет интересно и весело. Рекомендую найти книгу Григорьева:

Григорьев В.Л. - Микропроцессор i486. Архитектура и программирование // М.: Гранал 1993
(библиотечный индекс: ISBN 5-900676-01-3)

Re: помогите новичку FASM syntax

Posted: Sat Jul 31, 2010 3:57 am
by scuter
Mario
спасибо за документацию,
у Зубкова замечательная документация только ни один пример кода не работает под FASM,
в остальных доках только элементарные примеры,
но всё таки понимание постепенно появляется,
одно непонятно зачем в ASM перебрали почти все 2-х значные комбинации букв,
неудивительно что у людей крыша едет от просмотра ASM кода.


кстати графический редактор в KoOS срабатывает с 5-го, 6-го раза,
а когда срабатывает работать с ним невозможно курсор постоянно исчезает,
меню не работает,
и иногда получается что нибудь карандашиком нарисовать.

поэтому нужно что нибудь другое,
лучше на С++ так как кода там должно быть меньше и логика лучше просматривается.

на javascript такое можно сделать так,

Code: Select all

win=new win();
pm=new pixelmap(480, 320);
win.add(pm);
pm.onmousedown(function(e)
{
	c='#00FF00';
	x = e.pageX;
	y = e.pageY;
	pm.set_pix(x-1, y-1, c);
	pm.set_pix(x, y-1, c);
	pm.set_pix(x+1, y-1, c);
	pm.set_pix(x-1, y, c);
	pm.set_pix(x, y, c);
	pm.set_pix(x+1, y, c);
	pm.set_pix(x-1, y+1, c);
	pm.set_pix(x, y+1, c);
	pm.set_pix(x+1, y+1, c);
});
правда тут ещё фреймворк используется.

Re: помогите новичку FASM syntax

Posted: Sat Jul 31, 2010 6:04 am
by Андрей Михайлович
scuter,

Важно понять разницу между языками высокого уровня и низкоуровневым программированием, "близким к железу".

Напрямую сравнивать C/C++ и Assembler нельзя - это принципиально разные инструменты.

Re: помогите новичку FASM syntax

Posted: Sat Jul 31, 2010 11:10 am
by scuter
Андрей Михайлович wrote:scuter,

Важно понять разницу между языками высокого уровня и низкоуровневым программированием, "близким к железу".

Напрямую сравнивать C/C++ и Assembler нельзя - это принципиально разные инструменты.
фактически любая программа, любой драйвер, любой бинарный файл можно преобразовать в ASM код
фактически получается что C/C++, Delphi, Basic это тот же самый ASM только модернизированный,
и некоторые компиляторы переводят код с начало в ASM а потом компилирует
соответственно достичь того же результата возможно,

честно говоря суть то уже давно понял,
не понял глупость реализации языка,
SII wrote:db; dw; dd; dq; dt - переменные по 1,2,4,8,10 байт
если это переменные по 1,2,4,8,10 байт, их можно было назвать d1, d2, d4, d8, d10,
так хотя бы понятней, но язык программирования мне не переделать поэтому проехали.

Re: помогите новичку FASM syntax

Posted: Sat Jul 31, 2010 11:34 am
by IgorA
scuter wrote:но всё таки понимание постепенно появляется,
одно непонятно зачем в ASM перебрали почти все 2-х значные комбинации букв,
неудивительно что у людей крыша едет от просмотра ASM кода.
почти все эти комбинации букв есть сокращения английских слов, только нужно знать каких именно, например:
jge - Jump if Greater or Equal (переход если больше или равно)
df - Direction Flag (флаг направления)
cld - CLear Df (приравнивает df к 0)
Андрей Михайлович wrote:SII писал(а):
db; dw; dd; dq; dt - переменные по 1,2,4,8,10 байт

если это переменные по 1,2,4,8,10 байт, их можно было назвать d1, d2, d4, d8, d10,
так хотя бы понятней, но язык программирования мне не переделать поэтому проехали.
db; dw; dd; dq; dt - эти слова расшифровываются так:
db - Data Byte (данные размером в байт)
dw - Data Word (данные размером в слово, слово раньше было 2 байта, т.к. компьютера были 16 разрядные)
dd - Data Double word (данные размером в двойное слово)
dq - Data Q... (данные размером в 4-ре слова, не помню как пишется квадрат по латыни)
dt - Data Ten (данные размером в десять байт)

Re: помогите новичку FASM syntax

Posted: Sat Jul 31, 2010 1:08 pm
by IgorA
scuter wrote:и если у кого есть, дайте пожалуйста исходники простого маленького графического редактора,
так чтоб только pixelmap и карандашик был с выбором цвета.
Вот решил написать подобную простенькую программу, только без выбора цвета. Файлы с рисунками сохранять нельзя, так что особо вырисовывать смысла нет.

Re: помогите новичку FASM syntax

Posted: Sat Jul 31, 2010 1:39 pm
by Андрей Михайлович
честно говоря суть то уже давно понял
scturer, судя по тому, что ты говоришь, сути ты далеко не понял...
фактически получается что C/C++, Delphi, Basic это тот же самый ASM только модернизированный
Ничего подобного не "получается". C/C++, Delphi, Basic - это языки высокого уровня, это принципиально другой инструментарий. В каком-то смысле это результат эволюции программирования. Однако существование ЯВУ (языков высокого уровня) не отменяет необходимости в ассемблере.
и некоторые компиляторы переводят код с начало в ASM а потом компилирует
соответственно достичь того же результата возможно,
Неожиданный вывод :mrgreen:
Во-первых, язык высокого уровня не так близок к железу, как ассемблер (мнемокоды ассемблера - это, по сути, машинные команды, представленные в удобочитаемом для человека виде), и, следовательно, ЯВУ не позволяет задействовать потенциальные возможности аппаратного обеспечения на 100%. Пример: время доступа к данным в регистрах процессора гораздо меньше, чем время доступа к оперативной памяти. Когда ты пишешь программу на ассемблере, то можешь хранить некую наиболее часто используемую "переменную" в регистре, и только по завершении всех необходимых операций поместить значение переменной в оперативную память. Расскажи мне, как ты это сделашь, используя ЯВУ. Следовательно, программа, написанная на ассемблере, может работать значительно быстрее, чем программа на ЯВУ (хотя очень многое здесь зависит от программиста).

Во-вторых, программа на ассемблере компактнее (имеется в виду размер получаемого исполняемого файла), поскольку:
1) Одну и ту же операцию можно реализовать несколькими способами. Так, например, например, в eax у нас находится некое число. Нам нужно поместить в eax единицу. Сделать это можно двумя путями. Так:

Code: Select all

mov eax, 0x00000001
либо так

Code: Select all

xor eax, eax
inc eax
Так вот, получившийся машинный код второго варианта короче на один байт.
Ассемблер позволяет оптимизировать всю программу требуемым образом, ориентируясь на скорость, размер или компромиссное решение между ними.
Ни один компилятор не сможет оптимизировать программу так, как сделает это опытный программист, пишуший программу на ассемблере.
2) В двоичный файл не "попадает" ничего лишнего

В-третьих, интересно было бы посмотреть, как ты на ЯВУ напишешь загрузчик ОС :mrgreen: .

Так что, думаю, тебе стоит почитать соответствующую литературу, прежде чем вести подобные разговоры и делать какие-то выводы.

Помимо уже порекомендованных Маратом материалов, советую почитать книгу Олега Калашникова "Ассемблер? Это просто!" - написана очень увлекательно, - и книгу Рудольфа Марека "Ассемблер на примерах" (там много примеров, приведены некоторые часто используемые фрагменты кода, а также изложены основы программирования на ассемблере под DOS и под Linux).

Удачи!

Re: помогите новичку FASM syntax

Posted: Wed Aug 04, 2010 3:26 am
by Leency
scuter
Что-то вроде учебника для начинающего ассемблерщика. Но вместо теории идёт вначале пример кода на Паскале, а потом пример того же кода, но на Ассемблере: http://kolibri-os.narod.ru/inf/other/pascal_to_asm.htm

Re: помогите новичку FASM syntax

Posted: Wed Aug 04, 2010 2:30 pm
by Rock_maniak_forever
Вот позавчера лазал по сетке, и случайно наткнулся на статейку, похожую на ту что у Leency, но немного более развёрнутую и с картинками, авось пригодится. :D ------> Алгоритмическая структура "Цикл" в языке Ассемблер. <------

Re: помогите новичку FASM syntax

Posted: Wed Aug 04, 2010 4:25 pm
by Андрей Михайлович
О. Калашников, кстати сказать, есть вот здесь:http://www.sysbin.com/files/asm/

Re: помогите новичку FASM syntax

Posted: Wed Aug 04, 2010 5:04 pm
by Nasarus
Нужное искать лучше здесь:
viewtopic.php?f=6&t=830
А чтобы долго не искать, ...:
viewtopic.php?f=6&t=830#p23135
Дублирование ссылок на форуме никчему.