Сборный / Говнокод #27216 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
format pe console
   include 'win32ax.inc'
macro call1 f,p1{
   mov    ebx,p1
   call   f}
macro call2 f,p1,p2{
   mov    ecx,p2
   call1  f,p1}
macro call3 f,p1,p2,p3{
   mov    edx,p3
   call2  f,p1,p2}
.data
   lead_time dd ?
   handle_input dd ?
   handle_output dd ?
   byte_read_write dd ?
.code
   string db 'govnokod.ru ',13,10,0
   array_procs dd __strlen,_strlen,strlen,0
putdword:;ebx-handle,ecx-byte
   mov    eax,esp
   mov    esi,eax
   sub    esp,16
   xchg   eax,ecx
   mov    edi,10
@@:xor    edx,edx
   div    edi
   add    dl,'0'
   dec    ecx
   mov    [ecx],dl
   test   eax,eax
   jnz    @b
   sub    esi,ecx
   mov    edx,esi
   invoke WriteFile,ebx,ecx,edx,byte_read_write,0
   add    esp,16
   ret
align 4
strlen:;ebx-array of char
   mov    eax,12
   ret
align 4
_strlen:;ebx-array of char
   clc
   xor    ecx,ecx
   dec    ecx
   mov    edi,ebx
   xor    al,al
   repne  scasb
   not    ecx
   dec    ecx
   mov    eax,ecx
   ret
align 4
__strlen:;ebx-array of char
   xor    eax,eax
   dec    eax
@@:inc    eax
   cmp    byte[ebx+eax],0
   jne    @b
   ret
start:
   invoke GetStdHandle,STD_INPUT_HANDLE
   mov    [handle_input],eax
   invoke GetStdHandle,STD_OUTPUT_HANDLE
   mov    [handle_output],eax
   mov    ebp,array_procs
next_step:
   call   [GetTickCount]
   mov    [lead_time],eax
   xor    ecx,
@@:push   ecx
   mov    ebx,string
   call   dword[ebp]
   pop    ecx
   loop   @b
   push   eax
   call   [GetTickCount]
   sub    eax,[lead_time]
   mov    ecx,1000
   xor    edx,edx
   div    ecx
   push   edx
   call2  putdword,[handle_output],eax
   invoke WriteFile,ebx,string+8,1,byte_read_write,0
   pop    ecx
   call2  putdword,[handle_output],ecx
   invoke WriteFile,ebx,string+11,1,byte_read_write,0
   pop    ecx
   call2  putdword,[handle_output],ecx
   invoke WriteFile,[handle_output],string+12,2,byte_read_write,0
   add    ebp,4
   cmp    dword[ebp],0
   jne    next_step
   call   [GetTickCount]
   mov    [lead_time],eax
   invoke SetConsoleMode,[handle_input],0
   invoke ReadFile,[handle_input],byte_read_write,1,byte_read_write,0
   invoke ExitProcess,0
.end start

Поговнокодим однако.
Зачем в процессоре занимают место команды типа repne scasb и прочее, если простые аналоги быстрее компактнее и проще встраивать в алгоритм без отдельной подпрограммы да и регистров в разы меньше требуется. Пустая подпрограмма для понимания сколько времени занимает лишний код. Есть предположение что раньше на заре развития они работали шустрее, но это только предположение.

chiacorp chiacorp, (Updated )

Комментарии (11, +11)

Сборный / Говнокод #27205 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
includelib  C:\Irvine\User32.Lib
includelib  C:\Irvine\Kernel32.Lib
includelib  D:\masm32\lib\Irvine32.lib
include     \masm32\include\Irvine32.inc

; D:/masm32/bin/ml.exe /c  /coff  "D:\asm\rcl.asm"
; D:/masm32\bin\link.exe /subsystem:console  "D:\asm\rcl.obj"

.data

  
.code
main PROC
  xor eax, eax
  xor edx , edx
  
  mov al , 10101010b
  
  cmp al,80h
  jns just
  shr al,1
  jmp print
  
  just:
 
  shr al,1
  or ax,80h
 
  print:
  call WriteBin
		
	exit
	main ENDP
END main

Дай бог здоровья товарищу Ирвину.

Madhouse_camomile Madhouse_camomile, (Updated )

Комментарии (16, +16)

Сборный / Говнокод #26904 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
lea esi, cpu_name
    mov eax, 0
    mov mreg, eax

    ;[04/12] G
    mov eax, 0ffh
    and eax, ebx
    mov mreg, eax
    mov al, byte ptr [mreg]
    mov [esi], al
    inc esi

    ;[03/12] e
    mov eax, 0ff00h
    and eax, ebx
    mov mreg, eax
    mov al, byte ptr [mreg + 1]
    mov [esi], al
    inc esi

    ;[02/12] n
    mov eax, 0ff0000h
    and eax, ebx
    mov mreg, eax
    mov al, byte ptr [mreg + 2]
    mov [esi], al
    inc esi

    ;[01/12] u
    mov eax, 0ff000000h
    and eax, ebx
    mov mreg, eax
    mov al, byte ptr [mreg + 3]
    mov [esi], al
    inc esi

    ;[08/12] i
    mov eax, 0ffh
    and eax, edx
    mov mreg, eax
    mov al, byte ptr [mreg]
    mov [esi], al
    inc esi

    ;[07/12] n
    mov eax, 0ff00h
    and eax, edx
    mov mreg, eax
    mov al, byte ptr [mreg + 1]
    mov [esi], al
    inc esi

    ;[06/12] e
    mov eax, 0ff0000h
    and eax, edx
    mov mreg, eax
    mov al, byte ptr [mreg + 2]
    mov [esi], al
    inc esi

    ;[05/12] I
    mov eax, 0ff000000h
    and eax, edx
    mov mreg, eax
    mov al, byte ptr [mreg + 3]
    mov [esi], al
    inc esi

    ;[12/12] n
    mov eax, 0ffh
    and eax, ecx
    mov mreg, eax
    mov al, byte ptr [mreg]
    mov [esi], al
    inc esi

    ;[11/12] t
    mov eax, 0ff00h
    and eax, ecx
    mov mreg, eax
    mov al, byte ptr [mreg + 1]
    mov [esi], al
    inc esi

    ;[10/12] e
    mov eax, 0ff0000h
    and eax, ecx
    mov mreg, eax
    mov al, byte ptr [mreg + 2]
    mov [esi], al
    inc esi

    ;[09/12] l
    mov eax, 0ff000000h
    and eax, ecx
    mov mreg, eax
    mov al, byte ptr [mreg + 3]
    mov [esi], al
    inc esi

oaoaoammm oaoaoammm, (Updated )

Комментарии (224, +224)

Сборный / Говнокод #26232 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ

СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ
СТРАЙКЕР СОСЁТ МОЙ ХУЙ

xyu_100cm xyu_100cm, (Updated )

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

Сборный / Говнокод #25867 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
#include <stdbool.h>

bool impl(bool a, bool b) // ->
{
    return (!a || b);
}

bool always_true(bool a, bool b)
{
    return (impl(a,b) == impl(b,a)) == (a == b); // ( (a -> b) = (b -> a) ) = (a = b) tautology
}

/*
GCC не хочет мне тавтологию оптимизировать!
https://godbolt.org/z/kgFMpR
always_true:
        movl    %esi, %eax
        xorl    %edi, %eax
        cmpb    %dil, %sil
        sete    %dl
        xorl    %edx, %eax
        ret
Но Clang может
https://godbolt.org/z/YcOat-
always_true:                            # @always_true
        movb    $1, %al
        retq
*/

ГОВНО!

j123123 j123123, (Updated )

Комментарии (46, +46)

Сборный / Говнокод #25491 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
Решил я значит от нехуй делать нарисовать свой пиксельный шрифт
(кому интересно - вот промежуточный результат https://i.imgur.com/2vIJoio.png)
и решил посмотреть, какие там вообще бывают под GNU/Linux редакторы для
шрифтов, и какие вообще шрифты бывают
Так вот, нашел я вот такую хрень http://mensis.sourceforge.net/overview.html
Вижу, что там какой-то ассемблер http://mensis.sourceforge.net/ttfcv-all.png или
байткод ебаный. Погуглил по этим говноинструкциям со скриншота:
Оказывается в TTF шрифтах есть встроенный тьюринг-полный ЯП, используемый
для всяких там подсказок, типа "куда дорисовать пиксель вот при таком-то условии"
и прочая подобная херота
А еще в шиндошс (до Windows 10) этот шрифтоговнобайткод интерпретировался в
пространстве ядра (ну тупыыые..) и разумеется таким образом удалось винду хакнуть
https://security.stackexchange.com/a/91395 (разве могло быть иначе?)

про шрифтоговнобайткод можно почитать например тут
https://docs.microsoft.com/en-us/typography/opentype/spec/tt_instructions
https://developer.apple.com/fonts/TrueType-Reference-Manual/RM05/Chap5.html#instructions

На кой вообще хер делать тьюринг-полный язык для отрисовки глифов? Ну и раз вы его уже
делаете, то заебошьте там что-нибудь на основе LLVM байткода, чтоб JIT, или вообще все глифы
сразу компилировать в натив, или даже (чего мелочиться) под GPU. Типа мы хотим
нарисовать какую-то букву с размером 10 - вызываем функцию
drawA(10, bufptr, x, y); - рисуется десятого размера буква в буфер. И никаких непонятных
говнобайткодов. Четко и дерзко!

j123123 j123123, (Updated )

Комментарии (30, +30)