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

    +1

    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
    tms     код DSP   пример MMACF32
    
          msubf32      MR1,MR1,MR2        ;
       || mmov32  @point14,mr0            ;
          mmov32  @point15,mr1            ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          mmov32       mr2,@point01         ;     01
          msubf32      mr2,mr2,mr1          ;     01-15
       || mmov32       mr1,@_cos2           ;           B
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          mmpyf32      mr2,mr2,mr1          ;mr2=(01-15)B
       || mmov32       mr1,@point02         ;     02
          msubf32      mr0,mr1,mr0          ;mr0=(02-14)
       || mmov32       mr1,@_cos4           ;           C
          mmov32       mr3,@point00         ;     00
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          mmacf32      mr3,mr2,mr2,mr1,mr0  ;mr3=00+(01-15)B mr2=(02-14)C
       || mmov32       mr0,@point03         ;
          mmov32       mr1,@point13         ;
          msubf32      mr0,mr0,mr1          ;
       || mmov32       mr1,@_cos6           ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          mmacf32      mr3,mr2,mr2,mr1,mr0  ;mr3=00+(01-15)B+(02-14)C mr2=(03-13)D
       || mmov32       mr0,@point05         ;
          mmov32       mr1,@point11         ;
          msubf32      mr0,mr0,mr1          ;
       || mmov32       mr1,@_cos10          ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ...............

    maxxx, 09 Октября 2017

    Комментарии (1)
  2. Assembler / Говнокод #23387

    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
    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
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    tms часть коррелятора
    
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
               movl          XAR6     ,#str_korel     ;
               movl          XAR7     ,#str_f1_faz    ;
               mov            AH      ,@@dlin_mass    ;
               dec            AH                      ;
               movb           AL      ,#0             ;
               movl          XAR1     ,ACC            ;
               movz           AR2     ,AH             ;
               mov     @@max_num      ,AL             ;
               mov   @@start_num      ,AR1            ;
               subb          XAR2     ,#1             ;
               mpy           ACC      ,@@index_f      ,#max_f__faz*dln_f__faz
               add           ACC      ,@@start_base   ;
               addl          XAR7     ,ACC            ;
               movb          XAR3     ,#0             ;
               movz           AR0     ,*+XAR6[AR1%++] ;
               mov             T      ,@@temp_R       ;
               movl            P      ,*+XAR7[AR0]    ;pl=alp ph=R
               mpyu          ACC      ,T     ,PH      ;R0
               mov    @@factor_R      ,AH             ;
    loopi_0:   movz           AR0     ,*+XAR6[AR1%++] ;
               mov             T      ,#0             ;
               movl          ACC      ,*+XAR7[AR0]    ;
               sub            AL      ,PL             ;alpa<0
               cmp            AL      ,@@factor_alp   ;
               movb            T      ,#1            ,LO
               sub            AH      ,PH             ;
               abs           ACC                      ;
               cmp            AH      ,@@factor_R     ;
               movb            T      ,#0            ,HI
               mov            AL      ,T              ;
               add     @@max_num      ,AL             ;
               banz       loopi_0     ,AR2--          ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
               movz           AR2     ,@@dlin_mass    ;
               subb          XAR2     ,#3             ;
    zabul:     movz           AR0     ,*+XAR6[AR1%++] ;
               push           AR3:AR2                 ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
               mov     @@start_n      ,AR1            ;
               movz           AR0     ,*+XAR6[AR1%++] ;
               mov             T      ,@@temp_R       ;
               movl            P      ,*+XAR7[AR0]    ;
               mpyu          ACC      ,T     ,PH      ;
               mov    @@factor_R      ,AH             ;
               movb       @@max_n     ,#0           ,UNC
    loopi_1:   movz           AR0     ,*+XAR6[AR1%++] ;
               mov             T      ,#0             ;
               movl          ACC      ,*+XAR7[AR0]    ;
               sub            AL      ,PL             ;alpa<0
               cmp            AL      ,@@factor_alp   ;
               movb            T      ,#1            ,LO
               sub            AH      ,PH             ;
               abs           ACC                      ;
               cmp            AH      ,@@factor_R     ;
               movb            T      ,#0            ,HI
               mov             AL     ,T              ;
               add       @@max_n      ,AL
               banz       loopi_1     ,AR2--
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    loopi_2:   movz           AR0     ,*+XAR6[AR1%++] ;
               mov             T      ,#0             ;
               movl          ACC      ,*+XAR7[AR0]    ;
               sub            AL      ,PL             ;alpa<0
               cmp            AL      ,@@factor_alp   ;
               movb            T      ,#1            ,LO
               sub            AH      ,PH             ;
               abs           ACC                      ;
               cmp            AH      ,@@factor_R     ;
               movb            T      ,#0            ,HI
               mov            AL      ,T              ;
               add       @@max_n      ,AL             ;
               banz       loopi_2     ,AR3--          ;
               pop            AR3:AR2                 ;

    maxxx, 06 Октября 2017

    Комментарии (36)
  3. 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

    Комментарии (55)
  4. Assembler / Говнокод #20423

    −715

    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
    return instruction emitted twice with branch target inbetween
    
    function
    
    unsigned int fact( unsigned int n) { return n < 1 ? 1 : n*fact(n-1); }
    
    produces
    
    fact:
    .LFB0:
            .cfi_startproc
            testl   %edi, %edi
            movl    $1, %eax
            je      .L4
            .p2align 4,,10
            .p2align 3
    .L3:
            imull   %edi, %eax
            subl    $1, %edi
            jne     .L3
            rep ret # <-- this instruction can be removed
    .L4:
            rep ret
            .cfi_endproc
    .LFE0:
            .size   fact, .-fact
            .section        .text.unlikely

    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71923 даже факториал не могут скомпилировать нормально

    j123123, 25 Июля 2016

    Комментарии (56)
  5. Assembler / Говнокод #20234

    +70

    1. 1
    https://youtu.be/hB6eY73sLV0?t=241

    Исполнение произвольного кода(в данном случае Flappy Bird) в Super Mario World. Запись инструкций в память происходит посредством прыжков в нужных координатах.

    j123123, 20 Июня 2016

    Комментарии (7)
  6. Assembler / Говнокод #19719

    +81

    1. 1
    mov podi,vilov

    d_fomenok, 29 Марта 2016

    Комментарии (12)
  7. Assembler / Говнокод #19395

    +76

    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
    .global	shit
    	.type	shit, @function
    shit:
    /* prologue: function */
    /* frame size = 0 */
    /* stack size = 0 */
    .L__stack_usage = 0
    	mov r30,r24
    	mov r31,r25
    	ldd r18,Z+1
    	ldd r22,Z+2
    	mov r24,r22
    	ldi r25,0
    	ldi r26,0
    	ldi r27,0
    	mov r26,r24
    	mov r27,r25
    	clr r25
    	clr r24
    	or r25,r18
    	ld r18,Z
    	or r24,r18
    	ldd r18,Z+3
    	mov r22,r24
    	mov r23,r25
    	mov r24,r26
    	mov r25,r27
    	or r25,r18
    	ret
    	.size	shit, .-shit

    Вот такое ГЛОБАЛЬНОЕ ГОВНО мне делает GCC под AVR
    Код разворота байтиков:

    unsigned long int shit(unsigned char *a)
    {
    return
    ( unsigned long int)a[0] << 0 |
    ((unsigned long int)a[1] << 8 ) |
    ((unsigned long int)a[2] << 16) |
    ((unsigned long int)a[3] << 24);
    }

    Вот другие попытки это сделать, чтоб компилятор сделал более оптимально http://goo.gl/3D2Lri - ссылка на gcc.godbolt.org

    У меня есть собранный через crosstools-ng более новый gcc под AVR, вот выхлоп с него для тех же примеров, что и в godbolt https://paste.debian.net/378491/

    Там __builtin_bswap32() становится rcall __bswapsi2, но этот __bswapsi2 состоит из двух сраных инструкций
    gcc/libgcc/config/avr/lib1funcs.S
    #if defined (L_bswapsi2)
    ;; swap bytes
    ;; r25:r22 = bswap32 (r25:r22)
    DEFUN __bswapsi2
    bswap r22, r25
    bswap r23, r24
    ret
    ENDF __bswapsi2
    #endif /* defined (L_bswapsi2) */

    ТАК ПОЧЕМУ Б ТУПО НЕ ЗАИНЛАЙНИТЬ ЭТО?

    j123123, 04 Февраля 2016

    Комментарии (38)
  8. Assembler / Говнокод #19223

    +106

    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
    < !DOCTYPE html >
    < html >
    < head >
    < title >Температура процессора< /title >
    < meta http-equiv="content-type" content="text/html; charset=windows-1251" / >
    < asm >
    mov dx, 295h
    mov al, 4Eh
    out dx, al
    inc dx
    in al, dx
    or al, 1
    out dx, al
    dec dx
    mov al, 50h
    out dx, al
    in al, dx
    mov #temperature, al
    < /asm >
    < /head >
    < body >
    < span id="temperature" >< /span >
    < /body >
    < /html >

    https://otvet.mail.ru/question/185609056

    3_dar, 23 Декабря 2015

    Комментарии (195)
  9. Assembler / Говнокод #19087

    +66

    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
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    .model small
    .data
    a dw 3
    b dw 2
    c dw 4
    d dw 5
    x dw 0
    y dw 0
    .code
    mov ax,@data
    mov ds,ax
    
    mov ax,a
    mul ax
    mul ax
    mov bx,ax
    mov ax,b
    mul ax
    cmp bx,ax
    jg firstelse
    
    mov ax,c
    mul d
    mov x,ax
    mov ax,a
    div b
    cmp ax,x
    jne secondelse
    mov ax, a
    mov bx, b
    and ax,bx
    jmp exit
    
    secondelse:
    mov ax,c
    jmp exit
    
    firstelse:
    mov ax,c
    mul d
    add ax,b
    
    exit:
    mov ah,04Ch
    int 21h
    
    end firstelse
    end secondelse

    Задача:
    Если a ^ 3 > b ^ 2 то
    Если c * d = a / b то
    Результат = a AND b
    Иначе
    Результат = с
    Иначе
    Результат = с * d + b
    Ответ поместить в AX

    Пишу в Tasm 1.4
    Подскажите в чем проблема, в ассемблере нуб, но сделать надо

    unoimen, 25 Ноября 2015

    Комментарии (109)
  10. Assembler / Говнокод #18603

    +74

    1. 1
    2. 2
    3. 3
    4. 4
    foobar:
        stmdb sp!, {r4-r11, lr}
        ...
        ldmia sp!, {r4-r11, pc}

    Ассемблер для ARM'а, оказывается, очень даже няшный.

    bormand, 15 Августа 2015

    Комментарии (17)