Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Apr 24, 2019 1:45 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 45 posts ]  Go to page 1 2 3 Next
Author Message
PostPosted: Fri Jul 30, 2010 5:29 am 
Offline

Joined: Mon Jul 12, 2010 7:03 am
Posts: 43
только начал изучать 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 и карандашик был с выботом цвета.


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

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


Top
   
PostPosted: Fri Jul 30, 2010 12:04 pm 
Offline

Joined: Wed Dec 26, 2007 5:09 am
Posts: 214
scuter

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


Top
   
PostPosted: Fri Jul 30, 2010 2:08 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
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 - это в самом простом случае, когда функция не принимает параметров и не использует локальных переменных


Top
   
PostPosted: Fri Jul 30, 2010 4:16 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1304
scuter

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

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

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

_________________
Узкий специалист подобен флюсу: полнота его - односторонняя.
Козьма Прутков


Top
   
PostPosted: Sat Jul 31, 2010 3:57 am 
Offline

Joined: Mon Jul 12, 2010 7:03 am
Posts: 43
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);
});

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


Top
   
PostPosted: Sat Jul 31, 2010 6:04 am 
Offline
ex Dron2004
User avatar

Joined: Sun Jul 18, 2010 12:44 pm
Posts: 67
scuter,

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

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


Top
   
PostPosted: Sat Jul 31, 2010 11:10 am 
Offline

Joined: Mon Jul 12, 2010 7:03 am
Posts: 43
Андрей Михайлович 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,
так хотя бы понятней, но язык программирования мне не переделать поэтому проехали.


Top
   
PostPosted: Sat Jul 31, 2010 11:34 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
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 (данные размером в десять байт)


Top
   
PostPosted: Sat Jul 31, 2010 1:08 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
scuter wrote:
и если у кого есть, дайте пожалуйста исходники простого маленького графического редактора,
так чтоб только pixelmap и карандашик был с выбором цвета.

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


Attachments:
File comment: простенький редактор
graf_ed.7z [6.02 KiB]
Downloaded 219 times
Top
   
PostPosted: Sat Jul 31, 2010 1:39 pm 
Offline
ex Dron2004
User avatar

Joined: Sun Jul 18, 2010 12:44 pm
Posts: 67
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).

Удачи!


Top
   
PostPosted: Wed Aug 04, 2010 3:26 am 
Offline
Designer
User avatar

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

_________________
Через тернии к звездам


Top
   
PostPosted: Wed Aug 04, 2010 2:30 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
Вот позавчера лазал по сетке, и случайно наткнулся на статейку, похожую на ту что у Leency, но немного более развёрнутую и с картинками, авось пригодится. :D ------> Алгоритмическая структура "Цикл" в языке Ассемблер. <------

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
PostPosted: Wed Aug 04, 2010 4:25 pm 
Offline
ex Dron2004
User avatar

Joined: Sun Jul 18, 2010 12:44 pm
Posts: 67
О. Калашников, кстати сказать, есть вот здесь:http://www.sysbin.com/files/asm/


Top
   
PostPosted: Wed Aug 04, 2010 5:04 pm 
Offline
User avatar

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

_________________
ушёл...


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 45 posts ]  Go to page 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited