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

Assembler programming questions
  • Здесь Руководство к FASM 1.64 - в моих постах.
    Здесь Юров и Зубков.
    и если у кого есть, дайте пожалуйста исходники простого маленького графического редактора,
    так чтоб только pixelmap и карандашик был с выботом цвета.
    Все исходники на SVN - Работа с SVN сервером kolibrios
  • scuter

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

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

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

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

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • 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);
    });
    правда тут ещё фреймворк используется.
  • scuter,

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

    Напрямую сравнивать C/C++ и Assembler нельзя - это принципиально разные инструменты.
  • Андрей Михайлович 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,
    так хотя бы понятней, но язык программирования мне не переделать поэтому проехали.
  • 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 (данные размером в десять байт)
  • scuter wrote:и если у кого есть, дайте пожалуйста исходники простого маленького графического редактора,
    так чтоб только pixelmap и карандашик был с выбором цвета.
    Вот решил написать подобную простенькую программу, только без выбора цвета. Файлы с рисунками сохранять нельзя, так что особо вырисовывать смысла нет.
    Attachments
    graf_ed.7z (6.02 KiB)
    простенький редактор
    Downloaded 565 times
  • честно говоря суть то уже давно понял
    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).

    Удачи!
  • scuter
    Что-то вроде учебника для начинающего ассемблерщика. Но вместо теории идёт вначале пример кода на Паскале, а потом пример того же кода, но на Ассемблере: http://kolibri-os.narod.ru/inf/other/pascal_to_asm.htm
    Из хаоса в космос
  • Вот позавчера лазал по сетке, и случайно наткнулся на статейку, похожую на ту что у Leency, но немного более развёрнутую и с картинками, авось пригодится. :D ------> Алгоритмическая структура "Цикл" в языке Ассемблер. <------
  • О. Калашников, кстати сказать, есть вот здесь:http://www.sysbin.com/files/asm/
  • Нужное искать лучше здесь:
    viewtopic.php?f=6&t=830
    А чтобы долго не искать, ...:
    viewtopic.php?f=6&t=830#p23135
    Дублирование ссылок на форуме никчему.
    ушёл...
  • Who is online

    Users browsing this forum: No registered users and 4 guests