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

    +229

    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
    ;uint64_t foo(uint32_t x, uint64_t y) { return x*y; }
    
    sub esp, 0×8
    mov edx, [esp+0x14]
    mov ecx, [esp+0xc]
    mov eax, [esp+0x10]
    mov [esp+0x4], esi
    mov esi, edx
    imul esi, ecx
    mul ecx
    mov [esp], ebx
    mov ebx, [esp]
    add esi, edx
    mov edx, esi
    mov esi, [esp+0x4]
    add esp, 0×8
    ret

    оптимизированое умножение - gcc 4.2.4

    3.14159265, 17 Июня 2010

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

    +208

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    XOR  EBX,EBX
    MOV ECX,DWORD PTR SS:[EBP-168]
    MOV DWORD PTR SS:[EBP-168],ECX
    CMP EBX,DWORD PTR SS:[EBP-168]
    JG    ...

    govnokod3r, 19 Мая 2010

    Комментарии (156)
  3. Assembler / Говнокод #3194

    +225

    1. 1
    2. 2
    fstp qword [tmp]
    fild qword [tmp]

    суровое округление через память

    3.14159265, 11 Мая 2010

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

    +217

    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
    mov ebx, [sKey]
                                  mov ecx, 31
    
                                  l9:
                                  ;----------loop------------
                                  	fprem
    	                        shr ebx,1
                                  	jnc if9
    			.......
                                  	if9:
                                  	fmul st0,st0
                                  ;----------loop------------              
                                  loop l9

    реабилитируюсь за пост несвежего, но смешного говна немного раньше

    3.14159265, 07 Мая 2010

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

    +260.9

    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
    7855BD60 55               push        ebp  
    7855BD61 8B EC            mov         ebp,esp 
    7855BD63 56               push        esi  
    7855BD64 33 C0            xor         eax,eax 
    7855BD66 50               push        eax  
    7855BD67 50               push        eax  
    7855BD68 50               push        eax  
    7855BD69 50               push        eax  
    7855BD6A 50               push        eax  
    7855BD6B 50               push        eax  
    7855BD6C 50               push        eax  
    7855BD6D 50               push        eax  
    7855BD6E 8B 55 0C         mov         edx,dword ptr [ebp+0Ch] 
    7855BD71 8D 49 00         lea         ecx,[ecx] 
    7855BD74 8A 02            mov         al,byte ptr [edx] 
    7855BD76 0A C0            or          al,al 
    7855BD78 74 09            je          7855BD83 
    7855BD7A 83 C2 01         add         edx,1 
    7855BD7D 0F AB 04 24      bts         dword ptr [esp],eax 
    7855BD81 EB F1            jmp         7855BD74 
    7855BD83 8B 75 08         mov         esi,dword ptr [ebp+8] 
    7855BD86 8B FF            mov         edi,edi 
    7855BD88 8A 06            mov         al,byte ptr [esi] 
    7855BD8A 0A C0            or          al,al 
    7855BD8C 74 0C            je          7855BD9A 
    7855BD8E 83 C6 01         add         esi,1 
    7855BD91 0F A3 04 24      bt          dword ptr [esp],eax 
    7855BD95 73 F1            jae         7855BD88 
    7855BD97 8D 46 FF         lea         eax,[esi-1] 
    7855BD9A 83 C4 20         add         esp,20h 
    7855BD9D 5E               pop         esi  
    7855BD9E C9               leave            
    7855BD9F C3               ret

    чудеса оптимизации

    GovnocoderJr, 14 Февраля 2010

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

    +246.7

    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
    proc mltcoef
              push ecx
              xor ecx,ecx
              xor edx,edx
              xor ebx,ebx
              mov eax,dword[coef+edx]
              _b:
              add [coef+edx],eax
              jc _c
              _e:
              cmp ecx,9
              jne _b
              inc ecx
    
              _c
              push edx
              _d
              add edx,4
              add [coef+edx],1
              jc _d
              pop edx
              jmp _e
              pop ecx
              ret
              endp

    Пока я писалвысирал эту НЁБ, я уже забыл, зачем оно было нужно.

    Leo_ня, 18 Января 2010

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

    +243.6

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    format ELF
    
    
    include 'macros.inc'
    
    
    public main
    
    
    extrn printf
    extrn puts
    extrn exit
    extrn strtok
    extrn getenv
    extrn strcmp
    extrn strtol
    extrn strcpy
    ; Функции для общения с БД
    extrn get_version ; ремейк на mysql_get_client_info()
    extrn get_product_by_single_name_ex
    
    CGI_HEADER db "Content-Type: text/html", 13,10, "X-Powered-by: FASM (Flat Assembler 1.68)",13,10,0
    QUERY_STRING db ?
    REQUEST_METHOD db ?
    
    	query_str_env_req	db	"QUERY_STRING", 0
    	request_method_env_req	db	"REQUEST_METHOD", 0	
    	RM_GET db "GET", 0
    	RM_POST db "POST",0
    
    NO_ACTION_ERROR_MSG db "No action", 0
    
    
    
    q_token db "="
    r_token db "&"
    
    
    ; Константы ACTION
    	AC_VERSION equ 0; Инфа о версии и копирайте
    
    	AC_PRODUCT_ID_BY_SINGLE_NAME equ 1; ID продукта по полному совпадению имени
    	
    
    section '.text' executable
    _start:
    
    	main:
    	ccall puts, CGI_HEADER
    	ccall getenv, request_method_env_req
    	push eax
    	;c
    	xor eax, eax
    	pop eax
    	ccall strcmp, eax, RM_GET ; TODO: ЗМЕНИТЬ НА POST!!!1111
    	cmp eax, 0
    	jne quit
    	
    	;Что прислали в Action. ( ТОЛЬКО GET )
    	
    	ccall getenv, query_str_env_req
    	ccall strcpy, QUERY_STRING, eax
    	ccall strtok, QUERY_STRING, q_token
    	push eax
    	ccall strcmp, eax, "act"
    	cmp eax, 0
    	jne no_act
    	je act
    no_act:
    	ccall puts, NO_ACTION_ERROR_MSG
    	jmp quit
    act:
    	
    	
    	; Узнаём, что за опция в act
    	pop eax;
    	ccall strtok, 0, q_token
    	ccall strtol, eax, 0, 10
    	cmp eax, AC_VERSION
    	je version_put
    	cmp eax, AC_PRODUCT_ID_BY_SINGLE_NAME
    	je product_id_by_single_name
    	jne quit
    
    version_put:
    	; версия - из mysql
    	ccall puts, "Web kernel v0.1. (c) 2009 by Sergei V. Adoniew ( [email protected] ) with MySQL: "
    	ccall get_version
    	ccall puts, eax
    	jmp quit
    
    product_id_by_single_name:
    
    	
    	;НА Входе: name=%docname%
    	;НА Выходе id
    	
    	; дробим строку на a=b разделителем &
     	ccall getenv, "QUERY_STRING"
    	;у нас в eax вся строка

    Собственный пьяный высер на фасме ( FASM ).

    Обратить внимание на ветвление:)

    AlDjabad, 09 Декабря 2009

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

    +175.1

    Розовый пони

    Возвращение розового пони

    pinkpony, 04 Декабря 2009

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

    +240.1

    1. 1
    2. 2
    fld qword ptr [d]
    call @ROUND

    Это творчество дельфийского компилятора на тему i := round(d);
    Он делает вызов функции ради одной пустяковой команды, что очень влияет на скорость.

    TarasB, 24 Ноября 2009

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

    +129.5

    1. 1
    2. 2
    call LABEL
    LABEL: pop eax

    Получение адреса текущей инструкции убийственным для производительности методом.

    OlegD, 11 Августа 2009

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