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

    +225

    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
    .386
    .model flat,stdcall
     option  casemap:none
          include   c:\masm32\includes\windows.inc
          include   c:\masm32\includes\user32.inc
          include   c:\masm32\includes\kernel32.inc
          includelib c:\masm32\lib\user32.lib
          includelib c:\masm32\lib\kernel32.lib
     bufsize EQU 12
    .data
      a dd 300
      b dd 500
      d dd 300
      fmt db "Max = %2d",0
      buf db bufsize dup(0)
      ctrlf db 0dh,0ah
      stdout dd ?
      cWritten dd ?
      result dd ?
    .code
     start:
      invoke GetStdHandle,STD_OUTPUT_HANDLE
      mov stdout,eax
       mov eax,a            
       mov result,eax  ; изначально максимальный это a
       cmp eax,b       ; сравниваем со вторым числом
       jbe big1        ; если a<=b , значит b больше a
       ja min1         ; иначе a ещё максимальное
      big1:
        mov eax,b           
    	mov result,eax  ;теперь b максимальное
        cmp eax,d 
    	jbe big2   ; максимальное c 
    	jmp print
    	big2: 
    	  mov eax,d 
    	  mov result,eax ;максимальный c
    	  jmp print
      min1:
        mov eax,d
    	cmp eax,a
    	jbe big3
    	mov result,eax
    	jmp print
    	big3:
    	  mov eax,a
    	  mov result,eax
    	  jmp print
       print:
        mov edx,result
        invoke wsprintf, ADDR buf, ADDR fmt, edx
        invoke WriteConsoleA, stdout, ADDR buf, bufsize, ADDR cWritten, NULL
        invoke WriteConsoleA, stdout, ADDR ctrlf, 2, ADDR cWritten, NULL
     end start

    С ума сойти. И это сравнение трёх чисел, которое делается в два простейших условия...

    Запостил: Ymilij, 19 Апреля 2011

    Комментарии (12) RSS

    Добавить комментарий