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

    +146

    1. 1
    huiX5uiPH5;;P5;@@5HH4XPPDXDPhuiX5fiTГ

    Было запощено в 11315, но, мне кажется, что этот ГК заслуживает отдельного топика.

    Когда-то давно пытался на ассемблере включить видеорежим 320x200x256 (13h) и порисовать. Но XP сменив режим потеряла управление. Помог только ребут. В тот день, матерясь на MS, я и решил написать эту строчку так, чтобы ее можно было вводить с помощью обычного блокнота на любой машине...

    Системные требования: Windows XP
    Текст набирается в кодировке CP1251. Файл должен иметь расширение COM.

    bormand, 29 Июня 2012

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

    +184

    1. 1
    CD20

    первая программа на асм

    nefedoff-96, 29 Июня 2012

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

    +199

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    sum proc ; ax=ax+bx
            push dx
    m1:     mov dx, ax
            xor ax, bx
            and bx, dx
            shl bx, 01h
            cmp bx, 00h
            jnz m1
            pop dx
            ret
    sum endp

    Навеяно http://govnokod.ru/11311

    movaxbx, 28 Июня 2012

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

    +184

    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
    __declspec (naked) INT16U getWordOfCPUFlags(void)
    {
    	_asm
    	{
    		pushf;
    		xor eax, eax;
    		pop ax;
    		ret;
    	}
    }
    
    void setWordOfCPUFlags(const INT16U WordOfCPUFlag)
    {
    	_asm
    	{
    		push WordOfCPUFlag;
    		popf;
    	}
    }
    
    bool getCPUTraceFlag(void)
    {
    	return 0 != (getWordOfCPUFlags() & 0x100);
    }
    
    void setCPUTraceFlag(const bool CPUTraceFlag)
    {
    	const INT16U MaskOfTraceFlag=((INT16U)CPUTraceFlag)<<8;
    	//setWordOfCPUFlags( (getWordOfCPUFlags() and ~MaskOfTraceFlag) ^ MaskOfTraceFlag);
    	if(CPUTraceFlag)
    		setWordOfCPUFlags( getWordOfCPUFlags() | MaskOfTraceFlag);
    	else
    		setWordOfCPUFlags( getWordOfCPUFlags() & ~MaskOfTraceFlag);
    }

    Видимо автору кода строка 29 показалась слишком сложной.

    HaskellGovno, 26 Июня 2012

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

    +238

    1. 1
    JMP $END

    Copy-Paste, 04 Июня 2012

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

    +265

    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
    00410803  PUSH OFFSET 004FC0C8                     ASCII "AnVir Task Manager Pro"
    0041189D  PUSH OFFSET 004FC0A4                     ASCII "data Task Manager Pro"
    0041A074  PUSH OFFSET 00500120                     ASCII "%sAnVir Task Manager Pro"
    0042F9CE  PUSH OFFSET 005012A4                     ASCII "AnVir Task Manager Pro %s %s!"
    00410803  PUSH OFFSET 006AC6E8                     ASCII "AnVir Task Manager Pro"
    004479E9  PUSH EDI                                 ASCII "AnVir Task Manager Pro"
    0044FE01  PUSH OFFSET 00502C34                     ASCII "AnVir Task Manager Pro "
    00463DC9  PUSH OFFSET 00503708                     ASCII "AnVir Task Manager Pro folder selection"
    004606BE  MOV DWORD PTR SS:[EBP-130],OFFSET 005035>ASCII "AnVir Task Manager Pro file selection"
    00490CE9  PUSH OFFSET 00507E5C                     ASCII "AnVir Task Manager Pro. "
    00495441  PUSH OFFSET 00508450                     ASCII "AnVir Task Manager Pro, 6.7.1"
    00497858  PUSH OFFSET 0050866C                     ASCII "Logfile of AnVir Task Manager Pro v6.7.1 "
    004A3DE6  PUSH OFFSET 00509B54                     ASCII "AnVir Task Manager"

    Вывод ольки по поиску всех строк. (лишнее порезал)
    Надо напомнить сотню раз пользователю имя программы, а то вдруг он забудет что он запустил!
    Немного удивляет такой маразм.

    ReckO, 19 Мая 2012

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

    +149

    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
    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
    org 100h
    Begin:
    call FPU_init
    fild [Number]	   ;сложение
    fidiv [Number2]    ;деление
    frndint 	   ;округление (в сторону нуля-
    call Ar_prog	   ;т. к. регистр RC установлен в 11)
    fimul [Number2]
    fild [Number]
    fisub [Number10]
    fidiv [Number3]
    frndint
    call Ar_prog
    fimul [Number3]
    fild [Number]
    fidiv [Number4]
    frndint
    call Ar_prog
    fimul [Number4]
    fincstp
    fincstp
    fadd st0, st2
    fsub st0, st6
    fist [Number9]
    call FPU_init
    fild [Number5]
    xor cx,cx
    Out1:
    fild [Number9]	   ;помещаем значение, полученное после вычитания
    inc cx		   ;увеличиваем cx
    fcom st1	   ;сравниваем значение с 10
    fstsw [Number14]
    mov ax, [Number14]
    sahf
    jb Out2 	   ;если меньше 10, перейти к Out2
    fdiv st0,st1	   ;делим на 10
    frndint 	   ;округляем
    fistp [Number12]   ;результат - в Number12
    fild [Number9]	   ;снова загружаем
    fprem		   ;остаток от деления на 10
    fiadd [Number15]   ;прибавляем 30h
    fistp [Number13]   ;выгружаем в память
    push [Number13]    ;толкаем в стек
    fild [Number12]    ;результат деления - в Number9
    fistp [Number9]
    jmp Out1	   ;цикл
    Out2:
    mov di, String	   ;записываем смещение строки
    fiadd [Number15]
    fist [Number13]
    push [Number13]
    Out3:
    pop dx		   ;выталкиваем коды цифр, начиная с конца
    mov [di],dl	   ;записываем их в строку
    inc di		   ;увеличиваем смещение
    loop Out3	   ;повторяем это
    mov [di], byte 24h ;записываем код конца строки для вывода
    mov dx, String	   ;записываем смещение строки в
    mov ah, 09h	   ;вызываем прерывание
    int 21h
    int 20h
    Ar_prog:
    fist [Number9]
    fimul [Number9]
    fild [Number9]
    fadd st0,st1
    fidiv [Number8]
    frndint
    ret
    FPU_init:
    finit		   ;инициализация сопроцессора
    fstcw [Number6]    ;получение контрольного слова
    mov ax, [Number7]  ;установка десятого и одиннадцатого
    or [Number6], ax   ;битов слова в 11 (можно две команды bts)
    fldcw [Number6]    ;загрузка контрольного слова в FPU
    ret
    Number dw 1000d
    Number2 dd 3d
    Number3 dw 5d
    Number4 dw 15d
    Number5 dw 10d
    Number6 dw ?
    Number7 dw 0c00h
    Number8 dw 2d
    Number9 dd ?
    Number10 dw 1d
    Number11 db 30h
    Number12 dd ?
    Number13 dw ?
    Number14 dw ?
    Number15 dd 0030h
    String db ?

    Первый в жизни осмысленный код. Я нормален?

    evgraf-klimov, 09 Января 2012

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

    +248

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    Актуальна задача о двух стеках
    
    push esp1
    push esp2
    
    Требуется реализация забывчивого стека
    
    push 1 [1,2,3] -> [1,1,2]

    alexoy, 19 Октября 2011

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

    +131

    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
    ThreadStarter stru
      this dd ?
      ...
    ends
    
    
    
    ThreadStarter::MoveToArmy near proc
      in ax, 0x40 // initial time
    
      xor cx, cx
      mov dx, ax
    __repeat:
      in ax, 0x40
      lea cx, [ax - dx]
      mov dx, ax
    
      cmp cx, 60 * 60 * 24 * 365
        jl short __repeat
    
      pop ax
      ret
    endp
    
    
    start:
     sub sp, sizeof ThreadStarter
     assume [sp]: stru ThreadStarter
    
     mov ax, sp 
     invoke Thread_Starter::MoveToArmy, ax
    
     ...

    http://www.gamedev.ru/flame/forum/?id=152390#m6

    >14 сен. 2011 17:38
    Машинный код для шестнадцати битного режима
    Все привет. С началом учебы полнейший завал, времени нет вообще. Если вы знаете ссылки на сабж (прерывания, всякие mov, cmp, jmp и т.д.) поделитесь пожалуйста.
    Очень важно, что бы он был для шестнадцати битного режима, для ДОСа, не для Вин32.

    CPPGovno, 22 Сентября 2011

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

    +242

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    proc HeapCompact(HANDLE hHeap, DWORD dwFlags)
    	mov     edi, edi
    	push    ebp
    	mov     ebp, esp
    	pop     ebp
    	jmp     RtlCompactHeap
    endp

    Код от Microsoft. Заглушка? А вот и нет! Для заглушки нужны 5 байтов, а pop ebp останется на месте, т.е. при вызове вершина стека нарушится. Вот не могли просто NOP написать...

    KIRK, 29 Июля 2011

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