OSDev
http://osdev.su/

какой ассемблер выбрать - NASM или FASM?
http://osdev.su/viewtopic.php?f=6&t=556
Страница 3 из 4

Автор:  phantom-84 [ 25 май 2012, 14:53 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

Мне вообще пофиг, на чем писать - на Си или на ассемблере. Просто ассемблер позволяет непосредственно контролировать создаваемый код, а соответствующие компиляторы (в особенности fasm) дают значительно больше гибкости в плане формирования результирующих файлов. К примеру какой еще компилятор даст возможность сформировать бинарный файл, походу подсчитав его контрольную сумму и сохранив ее в этом же файле?

Автор:  Yoda [ 25 май 2012, 15:13 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

Мои предпочтенья в данном вопросе таковы:
Всё, что зависит от используемой платформы и не требует реализации сложных алгоритмов, я пишу на ассемблере.
Всё остальное я пишу на С.

Автор:  valeri [ 25 май 2012, 15:20 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

Yoda писал(а):
Не знаю, с чего такое мнение. По моему личному опыту переписывание фрагментов кода с нуля на ассемблере даёт выигрыш как в размере, так и в быстродействии в несколько раз, вплоть до десятка. Сравнивал с GCC и с MS VS.


Разумеется, если перечитать кучу инфы по оптимизации под процессоры, стать гуру в этом вопросе, вылизывать до изнеможения код, то конечно можно в отдельных задачах получить значительный выигрыш. Об этом никто не спорит. И безусловно в идеале хороший кодер должен этим владеть, но это бывает далеко не всегда. Компиляторы С/С++ тоже людьми написаны, которые как раз знают толк в оптимизации.

Плюс если даже выиграем в 10 раз, это с 10 сек до 1, или с 0,001 до 0,0001?

Yoda писал(а):
Одна целиком вместе с данными занимает 1Мб, другая 10Мб. Вопрос: какая из них с большей вероятностью будет работать быстрей?
А если у нас 1Гб ОЗУ в системе и две ОС, - одна расходует 512Мб, а другая 2Гб?


Ну с первым понятно, но актуально ли это сейчас на современном ПК до такой степени?
Ну а второрое к экстремальным оптимизациям явно не отнесешь, тут для оптимизации не обязательно на ассемблер переходить. :)

Автор:  phantom-84 [ 25 май 2012, 15:54 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

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

valeri писал(а):
Плюс если даже выиграем в 10 раз, это с 10 сек до 1, или с 0,001 до 0,0001?
Могу продолжить: с часа до 6 мин., с 10 часов до часа и т.д. Какие мелочи! :D

Автор:  valeri [ 25 май 2012, 16:02 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

phantom-84 писал(а):
Могу продолжить: с часа до 6 мин., с 10 часов до часа и т.д. Какие мелочи! :D


Это на каких задачах такой выигрыш?
Если писать, например, memcpy (ну я про функционал - все знают что она делает), то вероятно ее стоит написать на ассемблере, но не всю же ось на нем писать. Да и то, если писать туже функцию на С и учитывать выравнивание - не особо мы разницу заметим, тут дело в алгоритме больше, сравните полученный ассемблерный листинг при включенном оптимизаторе.

Автор:  scuter [ 25 май 2012, 16:48 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

я выбрал FASM потому что это единственный компиль который работает,
MASM постоянно ругается на что то,
TASM за него надо платить,
NASM работает только через командную строку а это не удобно, да и синтаксис мне там не понравится
YASM новый компиль использует несколько синтаксисов, но он тоже консольный.
GAS вообще в глаза не видел хрен его знает где его достать для виндовса.

Автор:  Yoda [ 25 май 2012, 17:18 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

Чем это синтаксис NASM не понравился??

Автор:  phantom-84 [ 25 май 2012, 17:26 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

valeri, из того, что я написал выше, можно понять, что для меня фактор времени далеко не основной при выборе в пользу ассемблера. Хотя некоторые Си-компиляторы порой так соптимизируют, что потом приходится "разоптимизировать" для достижения наилучшего результата - иногда это раздражает. На переносимость я плевал. Во-первых, я не планирую писать ось под какую-либо другую платформу. А во-вторых, мне объективно будет проще переписать к примеру 64-разрядное ядро, чем изначально писать ядро с расчетом на переносимость, а потом еще и выполнять перенос. С драйверами и приложениями дела обстоят несколько иначе.

Автор:  pavia [ 25 май 2012, 17:34 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

В целом все ассемблеры одинаковы в чём-то получше в чём то похуже.

Теперь подробнее.
MASM
TASM
FASM
GAS
Встроенный ассемблер.

MASM 6.11 и TASM 5+ идентичные компиляторы (Цифры означают версию). Исключение мелкие отличия.
Имеют встроенную проверку типов. Декларацию сегментов.
Что помогает избежать ошибок и приручает к правильному стилю написания.
Синтаксис Intel.
Из недостатков устарели.

FASM - не имеет всего этого. Зато он современный и поэтому поддерживает все современные расширения процессора. Синтаксис Intel.

GAS - Синтаксис AT&T. Имеет отличный синтаксис от принятого Intel, чту требует для изучения удвоенных затрат.


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

Вначале обучаться советую со встроенного ассемблера потом перейдя на MASM 6.11.

Автор:  scuter [ 25 май 2012, 17:55 ]
Заголовок сообщения:  Re: какой ассемблер выбрать - NASM или FASM?

Yoda писал(а):
Чем это синтаксис NASM не понравился??

чесно говоря очень сильно раздражают всякие конделябры в сиснтаксисе
Код:
    BITS 32
 
    %define @ARG EBP + 8
    %define PTR &
    %define OFFSET DWORD
 
    %macro Procedure 1-2
    %push _Procedure_
        %if %0 = 2
            %{2} %{1}
        %endif
        %{1}:
        %define __%{1}__
    %pop
    %endm
 
    %macro StdCall 1-*
    %push _StdCall_
        %ifndef __%{1}__
        %define __%{1}__
            EXTERN %1
        %endif
        %define %%proc %1
        %rep %0-1
            %rotate -1
            PUSH DWORD %1
        %endrep
        CALL %%proc
    %pop
    %endm
 
    %macro Report 1-2
    %push _Report_
        %ifstr %1
            [SECTION .data]
                %%msg DB %1, 0
                %%len EQU ($-%%msg)
            __SECT__
            MOV ECX, %%msg
            MOV EDX, %%len
        %else
            %if %0 = 2
                MOV ECX, %1
                MOV EDX, %2
            %else
                %error "string length not specified."
            %endif
        %endif
        MOV EBX, 1
        MOV EAX, 04h
        INT 80h
    %pop
    %endm
 
    %macro Die 0-1
    %push _Die_
        %if %0 = 1
            Report %1
        %endif
        XOR EAX, EAX
        INC EAX
        INT 80h
    %pop
    %endm
 
    %define IPPROTO_TCP 6
    %define SOCK_STREAM 1
    %define PF_INET 2
    %define AF_INET 2
 
    %define SRV_PORT 8023
 
    %define sys.linux 80h
    %define sys.socketcall 66h
    %define sys.exit 01h
    %define sys.fork 02h
    %define sys.close 06h
    %define sys.dup2 3Fh
    %define sys.write 04h
 
    %define net.socket 1
    %define net.bind 2
    %define net.listen 4
    %define net.accept 5


Цитата:
Встроенные ассемблер. Имеют ряд ограничений по синтаксису. Так как их много, то все рассматривать не буду.
Из плюса можно назвать удобство отладки.

где это ты нашёл встроеный ассемблер я такого ещё не видел.

Страница 3 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/