Board.KolibriOS.org
http://board.kolibrios.org/

помогите новичку FASM syntax
http://board.kolibrios.org/viewtopic.php?f=32&t=1471
Page 1 of 3

Author:  scuter [ Fri Jul 30, 2010 5:29 am ]
Post subject:  помогите новичку FASM syntax

только начал изучать FASM,
посмотрел несколько статей, самоучителей и ничего не понял,
тут http://allasm.ru/lang.php написано что,
Quote:
Единого стандарта для синтаксиса языков ассемблера не существует

в принципе на C++ тоже самое,
но всётаки хотелось бы узнать то что относится к FASM, ихний мануал очень мало чего даёт,
памогите пожалуйста найти хорошую доку,
если поточнее,
1) Основной синтаксис
2) Простые логические действия
3) Операторы(+, -, <<, ==, end, or)
4) Конструкции(if else elseif while do-while for)
5) Переменные
6) Функции
7) Объекты(если такое есть)


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

Author:  Mario [ Fri Jul 30, 2010 7:04 am ]
Post subject:  Re: помогите новичку FASM syntax

Здесь Руководство к FASM 1.64 - в моих постах.
Здесь Юров и Зубков.
Quote:
и если у кого есть, дайте пожалуйста исходники простого маленького графического редактора,
так чтоб только pixelmap и карандашик был с выботом цвета.

Все исходники на SVN - Работа с SVN сервером kolibrios

Author:  SII [ Fri Jul 30, 2010 12:04 pm ]
Post subject:  Re: помогите новичку FASM syntax

scuter

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

Author:  IgorA [ Fri Jul 30, 2010 2:08 pm ]
Post subject:  Re: помогите новичку FASM syntax

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 - это в самом простом случае, когда функция не принимает параметров и не использует локальных переменных

Author:  art_zh [ Fri Jul 30, 2010 4:16 pm ]
Post subject:  Re: помогите новичку FASM syntax

scuter

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

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

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

Author:  scuter [ Sat Jul 31, 2010 3:57 am ]
Post subject:  Re: помогите новичку FASM syntax

Mario
спасибо за документацию,
у Зубкова замечательная документация только ни один пример кода не работает под FASM,
в остальных доках только элементарные примеры,
но всё таки понимание постепенно появляется,
одно непонятно зачем в ASM перебрали почти все 2-х значные комбинации букв,
неудивительно что у людей крыша едет от просмотра ASM кода.


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

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

на javascript такое можно сделать так,
Code:
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);
});

правда тут ещё фреймворк используется.

Author:  Андрей Михайлович [ Sat Jul 31, 2010 6:04 am ]
Post subject:  Re: помогите новичку FASM syntax

scuter,

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

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

Author:  scuter [ Sat Jul 31, 2010 11:10 am ]
Post subject:  Re: помогите новичку FASM syntax

Андрей Михайлович 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,
так хотя бы понятней, но язык программирования мне не переделать поэтому проехали.

Author:  IgorA [ Sat Jul 31, 2010 11:34 am ]
Post subject:  Re: помогите новичку FASM syntax

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 (данные размером в десять байт)

Author:  IgorA [ Sat Jul 31, 2010 1:08 pm ]
Post subject:  Re: помогите новичку FASM syntax

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

Вот решил написать подобную простенькую программу, только без выбора цвета. Файлы с рисунками сохранять нельзя, так что особо вырисовывать смысла нет.

Attachments:
File comment: простенький редактор
graf_ed.7z [6.02 KiB]
Downloaded 313 times

Author:  Андрей Михайлович [ Sat Jul 31, 2010 1:39 pm ]
Post subject:  Re: помогите новичку FASM syntax

Quote:
честно говоря суть то уже давно понял

scturer, судя по тому, что ты говоришь, сути ты далеко не понял...

Quote:
фактически получается что C/C++, Delphi, Basic это тот же самый ASM только модернизированный

Ничего подобного не "получается". C/C++, Delphi, Basic - это языки высокого уровня, это принципиально другой инструментарий. В каком-то смысле это результат эволюции программирования. Однако существование ЯВУ (языков высокого уровня) не отменяет необходимости в ассемблере.

Quote:
и некоторые компиляторы переводят код с начало в ASM а потом компилирует
соответственно достичь того же результата возможно,

Неожиданный вывод :mrgreen:
Во-первых, язык высокого уровня не так близок к железу, как ассемблер (мнемокоды ассемблера - это, по сути, машинные команды, представленные в удобочитаемом для человека виде), и, следовательно, ЯВУ не позволяет задействовать потенциальные возможности аппаратного обеспечения на 100%. Пример: время доступа к данным в регистрах процессора гораздо меньше, чем время доступа к оперативной памяти. Когда ты пишешь программу на ассемблере, то можешь хранить некую наиболее часто используемую "переменную" в регистре, и только по завершении всех необходимых операций поместить значение переменной в оперативную память. Расскажи мне, как ты это сделашь, используя ЯВУ. Следовательно, программа, написанная на ассемблере, может работать значительно быстрее, чем программа на ЯВУ (хотя очень многое здесь зависит от программиста).

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

либо так
Code:
xor eax, eax
inc eax

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

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

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

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

Удачи!

Author:  Leency [ Wed Aug 04, 2010 3:26 am ]
Post subject:  Re: помогите новичку FASM syntax

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

Author:  Rock_maniak_forever [ Wed Aug 04, 2010 2:30 pm ]
Post subject:  Re: помогите новичку FASM syntax

Вот позавчера лазал по сетке, и случайно наткнулся на статейку, похожую на ту что у Leency, но немного более развёрнутую и с картинками, авось пригодится. :D ------> Алгоритмическая структура "Цикл" в языке Ассемблер. <------

Author:  Андрей Михайлович [ Wed Aug 04, 2010 4:25 pm ]
Post subject:  Re: помогите новичку FASM syntax

О. Калашников, кстати сказать, есть вот здесь:http://www.sysbin.com/files/asm/

Author:  Nasarus [ Wed Aug 04, 2010 5:04 pm ]
Post subject:  Re: помогите новичку FASM syntax

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

Page 1 of 3 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/