1. C++ / Говнокод #23012

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    void __attribute__ ((naked)) c8_handler_i() {
        asm volatile (
            "push %%ebp             \n\
            mov %%esp, %%ebp        \n\
            sub $20, %%esp          \n\
            mov %%eax, -4(%%ebp)    \n\
            mov %%ebx, -8(%%ebp)    \n\
            mov %%edx, -12(%%ebp)   \n\
            mov %[tasks], %%ebx     \n\
            mov %[cur_task], %%eax  \n\
            mov %[t_sz], %%edx      \n\
            mov (%%eax), %%eax      \n\
            mul %%edx               \n\
            add %%eax, %%ebx        \n\
            mov -4(%%ebp), %%eax    \n\
            mov %%eax, (%%ebx)      \n\
            mov -8(%%ebp), %%eax    \n\
            mov %%eax, 4(%%ebx)     \n\
            mov %%ecx, 8(%%ebx)     \n\
            mov -12(%%ebp), %%eax   \n\
            mov %%eax, 12(%%ebx)    \n\
            mov %%esi, 16(%%ebx)    \n\
            mov %%edi, 20(%%ebx)    \n\
            mov %%ebp, 24(%%ebx)    \n\
            addl $4, 24(%%ebx)      \n\
            mov (%%ebp), %%eax      \n\
            mov %%eax, 28(%%ebx)    \n\
            mov -4(%%ebp), %%eax    \n\
            mov -8(%%ebp), %%ebx    \n\
            mov -12(%%ebp), %%edx   \n\
            add $20, %%esp          \n\
            pop %%ebp               \n\
            iret"
            :: [tasks] "i" (tasks), [cur_task] "i" (&cur_task),
               [t_sz] "i" (sizeof(task)), [t_eip] "i" (offsetof(task, eip)), 
               [t_ebx] "i" (offsetof(reg_values, ebx))
        );
    }

    Когда решился написать ОС на C++

    Запостил: cykablyad, 11 Мая 2017

    Комментарии (32) RSS

    • показать все, что скрытоГiмно
      Ответить
    • показать все, что скрыто# ОС
      # C++

      Скблд, т упрт?
      Ответить
    • когда не мог выбрать, писать ось на Си или С++, в итоге запутался и налабал на асме
      Ответить
    • "ОС" на "C++".
      Ответить
      • а что, собственно, мешает? Самые узкие места можно писать на общем подмножестве (только исключения с rtti надо будет выключить).
        Ответить
        • > rtti выключить
          Нафига? Оно же только объём увеличивает. На скорость не должно повлиять, особенно если всё это говно в отдельную секцию падает.

          > исключения
          А я бы оставил ради прикола. Хоть какая-то новизна у оси появится. Да и есть вероятность, что на позитивных кейсах даже быстрее будет работать.
          Ответить
          • Чтоб работало rtti и исключения, надо c++ abi реализовывать, или откуда-то пиздить, а так оно не будет работать
            Ответить
            • > откуда-то пиздить
              libsupc++. Там ему несколько сишных функций типа abort()', malloc()'а и т.п. нужно написать и указатель на секцию с экцепшонами передать.

              На осдеве где-то была статейка как это делается. Я сильно не тестил, но исключение кидалось и ловилось.
              Ответить
          • показать все, что скрытоrtti и исключения - говно и ненужно. Шаблоны и constexpr еще более-менее
            Ответить
            • Да ты же вообще фишку не просикаешь.
              Ответить
          • показать все, что скрытоlibkern c ++ как у ябла
            Ответить
    • Где здесь с++ cykablyad?
      template <typename InterruptTraits>
      void __attribute__ ((naked)) interrupt_handler() {
          ...
      }
      Ответить
    • Обработчик пока ничего не делает, просто сохраняет контекст?

      З.Ы. Чё-то магических оффсетов дохуя.
      Ответить
      • Да, хотя я уже его дописал до переключения. А оффсеты магические потому что я рот ебал на каждый оффсет писать offsetof или еще какую хуйню
        Ответить
        • Можешь звать меня шизиком, фазиком, папуасиком - но я бы с радостью поужинал с тобой при свечах.
          Ответить
          • хватит доебываться до 16-ти летних пацанов, сраный извращенец
            Ответить
            • @16-ти
              Такие мне больше всего и нравятся. Романтики из коробки. Ах, как классно гулять и общаться и ними!.. Потом они вырастают, уходят/приходят из армии - но уже обывателями с житейским умом, зацикленным на грубой развлекухе. Им со мной становится неинтересно. Как, впрочем, и мне с ними.
              Ответить
    • Тот факт, что асм-вставка взята в кавычки, уже о многом говорит, - глубокомысленно изрек я.
      Ответить
      • она говорит о том что у сукабляди gcc
        а еще об этом говорит at&t нотация
        кричит прямо
        Ответить
    • показать все, что скрытоУмница, а теперь тоже самое с fpo😎
      Ответить
    • При чем тут "OS"?
      Ответить

    Добавить комментарий