ряд вопросов по FASM

Assembler programming questions
  • Разобрался: по какой-то причине по этому адресу к моменту сравнения оказывается 00h.
    Вопрос почему, буду трассировать дальше.
  • За что я не люблю программы на ассемблере, так это за такие вот конструкции. (В ЯВУ тоже говна хватает, но сейчас не об этом (программирование вообще зло) )
    OU1hnI3kQYSipEhjVRK3Jg.png
    OU1hnI3kQYSipEhjVRK3Jg.png (11.35 KiB)
    Viewed 6776 times
    Вместо простой и понятной mov eax,4 стоит менее очевидная shr eax,1 (eax=8).
    Идеальным даже было бы mov eax,SF_DRAW_TEXT.

    Как я понимаю, автор наверно хотел оптимизировать код.

    А как вы читаете, оптимизация здесь уместна или нет?
    Есть смысл заменять shr на mov?
    Из хаоса в космос
  • Code: Select all

    mov eax, 4 ;гекс-код "B804000000"
    shr eax, 1 ;гекс-код "D1E8"
    
    Как видно, автор сэкономил 3 байта. Подобная ручная оптимизация ни к чему хорошему не приводит. На асме лучше писать предельно понятно. Ведь главная причина больших размеров современных ЯВУ-программ -- это не плохие компиляторы, а большие библиотеки и жирные рантаймы, чего нет в ассемблере. И уже поэтому небольшие программы на асме будут намного легче своих аналогов на ЯВУ. И без какой-либо ручной оптимизации...
    Ну, это чисто мое мнение, если три байта это важно -- оптимизируйте. :)
  • Leency, да тут почти во всём проекте так.

    Вот, например, из ядра(то, что прямо сейчас передо мной):

    Code: Select all

            mov     ecx, ebp
            shr     ecx, 2
            mov     [esp+36], eax
            sub     edi, eax
            mov     edx, eax
            mov     eax, [esp+24]
            cmp     eax, -1
            jnz     @f
            mov     [esp+28], edi
    почему shr 2? что за esp +36 +24 +28 ???

    Code: Select all

            not     ecx
            rol     ecx, 8
            mov     cl, [esp+32-8+3]
            ror     ecx, 8
            mov     [esp+32-8], ecx
    и тут не лучше.

    Для меня на первом месте всё же понятность кода. А то потом через месяц сам же и забудешь что там и для чего.

    Вполне возможно, что это одна из причин медленного развития. Кто-то новый приходит, открывает код, а там всё через одно место. Ну и закрывает и уходит соответственно.

    Некоторые участники вставляют ассемблерный код, полученный с помощью си-компилятора.
    И оставляют как есть всякие параметры функций и локальные переменные ([esp+8], [esp-8] и т.д.)
  • 0CodErr wrote: Вполне возможно, что это одна из причин медленного развития. Кто-то новый приходит, открывает код, а там всё через одно место. Ну и закрывает и уходит соответственно.
    Это, главным образом, касается разработки ядра. Разработка прикладных программ уже давно возможна на ЯВУ. Но особого развития не заметно. Я думаю, причина остановки развития -- это фактическая смерть десктопа. Резкое падение спроса на десктоп-компьютеры и снижение интереса разработки для них.
  • (оффтоп)
    Колибри ОС проиграла по многим причинам. Ассемблер сложно читать, сложнее писать понятные программы, в отличии от яву с human readable названиями функций.

    Десктоп полуживой. Мобильные устройства меняются каждые 2 года, дестктопы минимум раз в 5 лет. Сейчас уже подрастает поколение у которых дома нет компов, только мобильные телефоны.
    Интернет уже это самая настоящая часть жизни каждого из нас, не только гиков, почти каждого человека до 50 лет.

    Почему все так слабо сейчас, потому что в Колибри нет полноценного интернета.
    Дай wifi и современный браузер - можно будет жить.
    Из хаоса в космос
  • А при чём здесь ассемблер? Такие программисты. Можно mov al, 4
    Мне бы ваши проблемы, вон в драйвере FAT вообще куча [esp+16+8+12+8]. Причём, это Брыллиантовое наследство.

    Вообще-то, КОС не только для десктопов, но и для ноутбуков. И всё ещё немало людей с мобильным телефоном, а не смартфоном.
  • >И всё ещё немало людей с мобильным телефоном, а не смартфоном.
    Мало. :)
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 5 guests