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

    +123

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    xorl %eax, %eax                           # cx - source, ebx - result
        movw %cx, %ax
        andw $0x8000, %ax
        shrw $15, %ax
        movl $0xFFFFFFFF, %ebx
        addl %eax, %ebx
        notl %ebx
        andl $0xffff0000, %ebx
        addw %cx, %bx

    LispGovno, 10 Апреля 2013

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

    +109

    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
    GLOBAL _start
        SEGMENT .text
    _start:
         mov eax,4 ; N function=write
         mov ebx,1 ; N handle=1 (stdout)
         mov ecx, txt ; address of buf
         mov edx,16 ; number of byte
         int 80h
    
         mov eax,3 ; N function=read
         mov ebx,0 ; 0 handle=0 (stdin)
         mov ecx, buf ; address of buf
         mov edx,80 ; number of byte
         int 80h
    
         mov [len],eax ;save length buf
         mov byte [buf+1],'!'
    
         mov eax,4 ; N function=write
         mov ebx,1 ; N handle=1 (stdout)
         mov ecx, buf ; address of buf
         mov edx,[len] ; number of byte
         int 80h
    
         mov eax,1 ; function=exit
         int 80h 
         
    SEGMENT .data
    	buf times 80 db 0 ;
    	len dd 0
    	txt db 'Enter the text '

    dos_, 15 Ноября 2012

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

    +138

    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
    .text:00018584                 EXPORT get_msg_sequence
    .text:00018584 get_msg_sequence                        ; CODE XREF: IPC_send_singleIPC+6p
    .text:00018584                                         ; __IPC_send_singleIPC+6p
    .text:00018584                 LDR             R0, =0x7800C
    .text:00018586                 PUSH            {R4,LR}
    .text:00018588                 ADD             R0, PC
    .text:0001858A                 LDR             R0, [R0]
    .text:0001858C                 LDRB            R3, [R0]
    .text:0001858E                 CBZ             R3, loc_185A2
    .text:00018590                 LDR             R1, =(aRil - 0x1859C)
    .text:00018592                 MOVS            R0, #6
    .text:00018594                 LDR             R2, =(aS_0 - 0x1859E)
    .text:00018596                 LDR             R3, =(aGet_msg_sequen - 0x185A0)
    .text:00018598                 ADD             R1, PC  ; "RIL"
    .text:0001859A                 ADD             R2, PC  ; "%s()"
    .text:0001859C                 ADD             R3, PC  ; "get_msg_sequence"
    .text:0001859E                 BLX             __android_log_print
    .text:000185A2
    .text:000185A2 loc_185A2                               ; CODE XREF: get_msg_sequence+Aj
    .text:000185A2                 LDR             R3, =(unk_98E7E - 0x185A8)
    .text:000185A4                 ADD             R3, PC
    .text:000185A6                 LDRB            R2, [R3]
    .text:000185A8                 CMP             R2, #0xFD
    .text:000185AA                 BLS             loc_185B0
    .text:000185AC                 MOVS            R2, #0
    .text:000185AE                 B               loc_185B2
    .text:000185B0 ; ---------------------------------------------------------------------------
    .text:000185B0
    .text:000185B0 loc_185B0                               ; CODE XREF: get_msg_sequence+26j
    .text:000185B0                 ADDS            R2, #1
    .text:000185B2
    .text:000185B2 loc_185B2                               ; CODE XREF: get_msg_sequence+2Aj
    .text:000185B2                 LDR             R1, =(unk_98E7E - 0x185BA)
    .text:000185B4                 STRB            R2, [R3]
    .text:000185B6                 ADD             R1, PC
    .text:000185B8                 LDRB            R0, [R1]
    .text:000185BA                 POP             {R4,PC}
    .text:000185BA ; End of function get_msg_sequence

    Потрясающе эффективный выхлоп GCC. Компилировалось, вероятно, все-таки с включенной оптимизацией.

    Например, последовательность LDR R1/ADD R1,PC/LDRB R0, [R1] в конце вообще лишняя: достаточно было использовать R0 вместо R2.

    Grindars, 04 Августа 2012

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

    +146

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

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

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

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

    bormand, 29 Июня 2012

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

    +184

    1. 1
    CD20

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

    nefedoff-96, 29 Июня 2012

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

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

    +238

    1. 1
    JMP $END

    Copy-Paste, 04 Июня 2012

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

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