1. Assembler / Говнокод #23014

    0

    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
    #define SPLICE(a,b) SPLICE_1(a,b)
    #define SPLICE_1(a,b) SPLICE_2(a,b)
    #define SPLICE_2(a,b) a##b
    #define LL(a,b) SPLICE_2(a,b)
    #define L(a) LL(a,LOC)
    
    
    #define LOC sub1
    .func sub1
    sub1:
        ljmp L(L1)
    
    L(L1):
        nop
    .endfunc
    
    #define LOC sub2
    .func sub2
    sub2:
        ljmp L(L1)
    
    L(L1):
        nop
    .endfunc

    Когда захотел сделать local labels в ассемблере через сишный препроцессор

    Запостил: j123123, 12 Мая 2017

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

    • показать все, что скрытохотя вот эти определения не нужны
      #define SPLICE(a,b) SPLICE_1(a,b)
      #define SPLICE_1(a,b) SPLICE_2(a,b)

      А еще оно пишет ворнинг
      test.s:15:0: warning: "LOC" redefined
       #define LOC sub2
       ^
      test.s:6:0: note: this is the location of the previous definition
       #define LOC sub1
       ^

      но это отрубается если препроцессору флаг -w добавить
      Не буду ж я писать undef каждый раз, правильно?

      Можно еще сюда как-нибудь http://govnokod.ru/20958 приспособить попробовать, чтоб уникальный идентификатор сам создавася, через это вложенное ifdef-говно инкрементировало
      Ответить
      • показать все, что скрытоСпустил тебе в глотку конскую порцию спермы.
        Ответить
      • показать все, что скрытоА это вызов - ГПСЧ на препроцессоре. Реально?
        Ответить
        • показать все, что скрытоВообще-то не совсем. Та хренота это битовая считалочка на препроцессоре
          shit.h:
          #if BIT0 == 0
            #undef  BIT0
            #define BIT0 1
          #else
            #undef  BIT0
            #define BIT0 0
            #if BIT1 == 0
              #undef  BIT1
              #define BIT1 1
            #else
              #undef  BIT1
              #define BIT1 0
              #if BIT2 == 0
                #undef  BIT2
                #define BIT2 1
              #else
                #undef  BIT0
                #undef  BIT1
                #undef  BIT2
                #define END_SHIT 1
              #endif
            #endif
          #endif


          shit.c:
          #define SPLICE3(a,b,c) SPLICE3_1(a,b,c)
          #define SPLICE3_1(a,b,c) SPLICE3_2(a,b,c)
          #define SPLICE3_2(a,b,c) a##b##c
          
           
          #define BIT0 0
          #define BIT1 0
          #define BIT2 0
          
          SPLICE3(BIT0,BIT1,BIT2)
          #include "shit.h"
          SPLICE3(BIT0,BIT1,BIT2)
          #include "shit.h"
          SPLICE3(BIT0,BIT1,BIT2)
          #include "shit.h"
          SPLICE3(BIT0,BIT1,BIT2)
          #include "shit.h"
          SPLICE3(BIT0,BIT1,BIT2)
          #include "shit.h"
          SPLICE3(BIT0,BIT1,BIT2)
          #include "shit.h"
          SPLICE3(BIT0,BIT1,BIT2)
          #include "shit.h"
          SPLICE3(BIT0,BIT1,BIT2)


          даст
          000
          100
          010
          110
          001
          101
          011
          111
          Ответить
    • показать все, что скрыто#define SPLICE(a,b) SPLICE_1(a,b)
      #define SPLICE_1(a,b) SPLICE_2(a,b)
      #define SPLICE_2(a,b) a##b

      Сколько вижу подобный код, понять не могу, почему не просто #define SPLICE(a,b) a##b
      Ответить
    • а что локальные N/F/B метки уже отменили? или чем то неугодили?
      Ответить
      • показать все, что скрытоТам же только цифры можно
        Ответить
        • Для мелких фрагментов сойдёт тащемта. Тебе же на асме не портянки в 100500 ветвлений и на тыщу строк писать.
          Ответить
          • с другой стороны, я не уловил: а зачем ему ц препроцессор? асмовы препроцессоры - какой flavor не возьми - на порядок мощнее.

            https://sourceware.org/binutils/docs/as/Macro.html#Macro
            Ответить
            • показать все, что скрытоЯ просто уже привык писать всякую херню на Си препроцессоре, зачем мне на другие переучиваться?

              А вообще можно даже свой препроцесор сделать
              Ответить
              • дурак. в асмах человеческий препроц. ц препроц в сравнении учить не надо. или правильней сказать: надо учить, потому что умеет мало, и много граблей. у асмов человеческий препроц который делает то что ты от него ожидаешь, и без извратов.

                или тебе так важно не потерять это ценное знание - сколько SPLICE'ов надо что бы то говно сверху работало как надо???
                Ответить
                • показать все, что скрытоТак этих асмов вообще дохрена и у каждого разный синтаксис макросов, а сишный препроцессор один на все случаи. Я уж лучше M4 осилю какой-нибудь, или свой наколенный препроцессор на питоне напишу за 10 минут
                  Ответить
                • показать все, что скрытоИ кстати заметь - я нигде не утверждал, что препроцессоры в ассемблерах хуже и менее функциональные, чем сишный.
                  Ответить
                  • Когда же ты наконец поксоришь себя на ноль?
                    Ответить
                    • показать все, что скрытоЕсли что-то поксорить на ноль, нихрена не изменится, анскилябра ты заедушная
                      https://en.wikipedia.org/wiki/Exclusive_or
                      Ответить
                    • Вжух! Поксорил всех на ноль.
                      Ответить
                      • показать все, что скрытоНа ноль эндят, а ксорят на самого себя
                        Ответить
                        • Вжух! Поксорил TeaBag на TeaBag, остальных поорил на ноль.
                          Ответить
                          • показать все, что скрытоВозвел вас всех в минус бесконечную степень, проверьте
                            Ответить
                            • Что ты хотел сказать этим? Для чисел > 1 получится ноль, для < 1 и > 0 - бесконечность, 1 в минус бесконечной степени - та же самая 1, 0 - oops, devided by zero, для чисел меньше 0 предела не будет. А для каких-нибудь конечных колец вообще хуй знает, что получится.
                              Ответить
                              • показать все, что скрыто> 1 в минус бесконечной степени - та же самая 1
                                Нет, будет неопределенность
                                > 0 - oops, devided by zero
                                Нет, будет complex infinity. Но вообще деление на 0 это и есть complex infinity. Т.е. или +inf или -inf смотря с какой стороны предел считать
                                > для чисел меньше 0 предела не будет
                                Нет, для -1 будет неопределенность. Для "от 0 до -1" будет complex infinity (какая-то бесконечность, но не ясно, с плюсом или минусом. Это зависит от того, четная или нечетная у нас бесконечность). Для отрицательных меньше -1 будет ноль
                                Ответить
                                • > Нет, будет неопределенность
                                  Пруфанешь? Предел последовательности 1 / 1^N (N -> +inf) существует и равен 1.

                                  > complex infinity
                                  Мне не нравится, что ты так лихо взял и перевел мой пост в поле комплексных чисел, да еще и бесконечностью его расширил. Нет, так не пойдет.

                                  > complex infinity. Т.е. или +inf или -inf смотря с какой стороны предел считать
                                  Это бред. Знак имеет смысл только на вещественной прямой. Бесконечность на расширенной комплексной плоскости одна и та же по всем направлениям. Более того, у бесконечностей, о которых говорят в вещественном анализе, и у комплексной бесконечности совершенно разная суть. Не надо их смешивать.

                                  > Для отрицательных меньше -1 будет ноль
                                  Согласен, ошибся.
                                  Ответить
                                  • > Мне не нравится, что ты так лихо взял и перевел мой пост в поле комплексных чисел
                                    Хотя можно сказать, что это я перевел твой пост в поле вещественных чисел, а ты-то имел в виду комплексные, просто не уточнил. Ладно, похуй.
                                    Ответить
                                  • показать все, что скрыто> Пруфанешь?
                                    1^(-x) = 1/(1^x)

                                    1^x где x - бесконечность -- неопределенность. Пруфов полно в интернете http://ru.scienceparadoxes.wikia.com/wiki/1_в_степени_бесконечность
                                    Ответить
                                    • > 1^x где x - бесконечность -- неопределенность
                                      Потому что ты эту операцию не определил? Я не совсем понимаю, про какие математические объекты и операции ты говоришь. Может дашь ссылку на учебник? Формально фраза "1 в степени минус бесконечность" - бессмыслица, т.к. объекта "минус бесконечность" не существует и про операцию возведения числа в такую степень я не слышал. Эту фразу можно неформально понимать, как lim 1 ^ N при N -> -inf, по аналогии с другими похожими определениями из анализа. С таким определением результат операции - 1. А какой смысл ты вкладываешь в свои слова?
                                      Ты говоришь про поле комплексных чисел и комплексную бесконечность. Комплексная бесконечность - это точка расширенной комплексной плоскости, а не копмлексное число, и операцию возведения в степень для нее никто не определял. Для нее вообще полторы операции определенно, и зачем ее вводят - не понятно.

                                      Короче, ты жонглируешь терминами непонятным мне образом. Можешь выписать свои определения, если хочешь. Очевидно, у тебя какая-то не такая математика, которая была у меня в университете.

                                      По твоей ссылке написана хуйня полнейшая.
                                      Ответить
                                      • показать все, что скрытоХуйню полнейшую в зеркале над умывальником ищи.
                                        Ответить
                                      • показать все, что скрыто> По твоей ссылке написана хуйня полнейшая.

                                        Багрепорт в wolframalpha отправь тогда
                                        https://www.wolframalpha.com/input/?i=1^inf
                                        Ответить
                                        • Лолблядь, я даже заскринил этот твой вольфрам http://i.imgur.com/XKjc2pW.png

                                          Я так понимаю, объяснять свои утверждения ты не будешь? Ссылки на вольфрам и сомнительные вики вместо формального пруфа или хотя бы ссылки на формальный пруф - это не математика.
                                          Ответить
                                          • показать все, что скрытоТы понимаешь что это ПРЕДЕЛ уже. Если через предел делать, то и 1/0 можно посчитать. Или например x/x при x -> inf

                                            https://i.imgur.com/CymVnOc.png
                                            Ответить
                                            • > Ты понимаешь что это ПРЕДЕЛ уже.
                                              В анализе бесконечность - это просто символика для какого-либо предела. Бесконечность, как самостоятельный объект, не определяют, и никаких операций с ней выполнять нельзя. Я уже спрашивал у тебя определения или учебник, в котором ты их вычитал, но ты продолжаешь вилять жопой.

                                              > 1/0 можно посчитать
                                              Нельзя.

                                              > x/x при x -> inf
                                              Равно одному. Я уже устал повторять то, что каждый первокурсник знает после первого семестра.
                                              Ответить
                                          • показать все, что скрытоhttps://en.wikipedia.org/wiki/Indeterminate_form

                                            Какие тебе объяснения нужны? Книжку по математике дать?
                                            Ответить
                                    • > 1^x где x - бесконечность -- неопределенность. Пруфов полно в интернете

                                      Это не пруфы, а какое-то говно. В твоей вики лопиталят функцию, к которой не применима теорема Лопиталя.

                                      "Парадокс" (который никакой не парадокс, разумеется), о котором идёт речь, случается для пределов вида
                                      lim ((x, y) -> (1, inf)) x^y.
                                      Предел может быть разным в зависимости от траектории на плоскости.

                                      Если x константа, равная единице, то предел существует и равен единице.
                                      Ответить

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