OSDev

для всех
Текущее время: 27 апр 2024, 13:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: 25 май 2012, 14:53 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2012, 15:13 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Мои предпочтенья в данном вопросе таковы:
Всё, что зависит от используемой платформы и не требует реализации сложных алгоритмов, я пишу на ассемблере.
Всё остальное я пишу на С.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2012, 15:20 

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


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

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

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


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2012, 15:54 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2012, 16:02 

Зарегистрирован: 13 окт 2008, 17:38
Сообщения: 46
Откуда: Владимир
phantom-84 писал(а):
Могу продолжить: с часа до 6 мин., с 10 часов до часа и т.д. Какие мелочи! :D


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2012, 16:48 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2012, 17:18 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Чем это синтаксис NASM не понравился??

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2012, 17:26 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2012, 17:34 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
В целом все ассемблеры одинаковы в чём-то получше в чём то похуже.

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

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

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

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


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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 май 2012, 17:55 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
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


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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB