Advertisement
Guest User

Untitled

a guest
Nov 12th, 2018
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. .MODEL flat, STDCALL
  3.  
  4.  
  5. includelib masm32.lib
  6. WriteConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
  7. ReadConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
  8. GetStdHandle PROTO :DWORD
  9. ExitProcess PROTO :DWORD
  10. GetTickCount PROTO
  11. nseed PROTO :DWORD
  12. nrandom PROTO :DWORD
  13. CharToOemA PROTO :DWORD,:DWORD
  14. wsprintfA PROTO C :VARARG
  15.  
  16. .data
  17.  
  18.     dest BYTE 10 dup(0)
  19.     dest2 BYTE 10 dup(0)
  20.     hout DWORD 0
  21.     zach1 BYTE "Wprowadz liczbe: "
  22.     za DWORD 0
  23.     zach2 BYTE "Wprowadz liczbe: "
  24.     zach3 BYTE "Wprowadz zakres: "
  25.     zach4 BYTE "Zgadnij liczbe: "
  26.     zb DWORD 0
  27.     wyn1 BYTE "Są równe"
  28.     wyn2 BYTE "Nie są równe"
  29.     wyn3 BYTE "Liczba pierwsza jest większa"
  30.     wyn4 BYTE "Liczba pierwsza jest mniejsza"
  31.     wynik2 BYTE "Nie trafiłeś. Podaj większą liczbę"
  32.     wynik3 BYTE "Nie trafiłeś. Podaj mniejszą liczbę"
  33.     counter DWORD 0
  34.     trafiona BYTE "Trafiłeś za %i razem", 0
  35.     trafionaBuffer BYTE 255 dup(0)
  36.     trinp DWORD 0
  37.     range DWORD 100
  38.     ranger DWORD 100
  39.     pytaj DWORD 100
  40.     wylosowanaLiczba DWORD 0
  41.     wylosowanyTekst BYTE "Wylosowana liczba to: %i", 0
  42.     wylosowanyTekstBuffer BYTE 255 dup(0)
  43.     rinp DWORD 0
  44.     rout dd 0
  45.     licz DWORD 0
  46.     hin DWORD 0
  47.  
  48. .code
  49.  
  50.     main proc
  51.        
  52.         ;pobranie uchwytów do okna
  53.             push -10
  54.             call GetStdHandle
  55.             mov hin, eax
  56.    
  57.             push -11
  58.             call GetStdHandle
  59.             mov hout, eax
  60.         ;konieć pobierania uchwytów
  61.  
  62.         ;wyswietlanie zachety
  63.             push 0
  64.             push offset rout
  65.             push 17
  66.             push offset zach1
  67.             push hout
  68.             call WriteConsoleA
  69.  
  70.         ;czytanie a
  71.             push 0
  72.             push offset rout
  73.             push 5
  74.             push offset za
  75.             push hin
  76.             call ReadConsoleA
  77.  
  78.         mov EDX, OFFSET za
  79.         add EDX, rout
  80.  
  81.         mov [EDX-2],BYTE PTR 0
  82.         push OFFSET za      ;adres poczatku ciagu znakow przekazywany na stos
  83.         call atoi           ;wywolanie procedury atoi
  84.         mov  za, EAX        ;przeniesienie wyniku procedury atoi z rejestru EAX do zmiennej za
  85.  
  86.         ;zacheta b
  87.             push 0
  88.             push offset rout
  89.             push 17
  90.             push offset zach2
  91.             push hout
  92.             call WriteConsoleA
  93.  
  94.         ;czytanie b
  95.             push 0
  96.             push offset rout
  97.             push 5
  98.             push offset zb
  99.             push hin
  100.             call ReadConsoleA
  101.  
  102.         mov EDX, OFFSET zb
  103.         add EDX, rout
  104.  
  105.         mov [EDX-2],BYTE PTR 0
  106.         push offset zb      ;adres poczatku ciagu znakow przekazywany na stos
  107.         call atoi           ;wywolanie procedury atoi
  108.         mov  zb, EAX        ;przeniesienie wyniku procedury atoi z rejestru EAX do zmiennej zb
  109.  
  110.         MOV EAX, za
  111.         MOV EDX, zb
  112.         CMP EAX, EDX
  113.  
  114.         ;jne nierowne
  115.         je rowne
  116.         ja wieksza
  117.         jmp mniejsza
  118.        
  119.     wieksza:
  120.         push    OFFSET wyn3
  121.         push    OFFSET wyn3
  122.         call    CharToOemA  ; konwersja polskich znaków
  123.         push 0
  124.         push offset rout
  125.         push 28
  126.         push offset wyn3
  127.         push hout
  128.         call WriteConsoleA
  129.         jmp dalej
  130.  
  131.     mniejsza:
  132.         push    OFFSET wyn4
  133.         push    OFFSET wyn4
  134.         call    CharToOemA  ; konwersja polskich znaków
  135.         push 0
  136.         push offset rout
  137.         push 29
  138.         push offset wyn4
  139.         push hout
  140.         call WriteConsoleA
  141.         jmp dalej
  142.  
  143.     rowne:
  144.         push    OFFSET wyn1
  145.         push    OFFSET wyn1
  146.         call    CharToOemA  ; konwersja polskich znaków
  147.         push 0
  148.         push offset rout
  149.         push 8
  150.         push offset wyn1
  151.         push hout
  152.         call WriteConsoleA
  153.         jmp dalej
  154.  
  155.     nierowne:
  156.         push    OFFSET wyn2
  157.         push    OFFSET wyn2
  158.         call    CharToOemA  ; konwersja polskich znaków
  159.         push 0
  160.         push offset rout
  161.         push 12
  162.         push offset wyn2
  163.         push hout
  164.         call WriteConsoleA
  165.         jmp dalej
  166.  
  167.     dalej:
  168.  
  169.         ;zacheta 3
  170.             push 0
  171.             push offset rout
  172.             push 17
  173.             push offset zach3
  174.             push hout
  175.             call WriteConsoleA
  176.  
  177.         ;czytanie 3
  178.             push 0
  179.             push offset rout
  180.             push 1
  181.             push offset range
  182.             push hin
  183.             call ReadConsoleA
  184.  
  185.         mov EDX, OFFSET range
  186.         add EDX, rout
  187.         mov [EDX-2],BYTE PTR 0
  188.  
  189.         push offset range       ;adres poczatku ciagu znakow przekazywany na stos
  190.         call atoi               ;wywolanie procedury atoi
  191.         mov range, EAX      ;przeniesienie wyniku procedury atoi z rejestru EAX do zmiennej zb
  192.  
  193.         mov licz, 0
  194.         .WHILE licz < 10
  195.         call GetTickCount
  196.         push eax
  197.         call nseed
  198.         push range
  199.         call nrandom
  200.         mov wylosowanaLiczba, EAX
  201.  
  202.         ;zamiana liczby na znaki
  203.         push wylosowanaLiczba
  204.         push OFFSET wylosowanyTekst
  205.         push OFFSET wylosowanyTekstBuffer
  206.         call wsprintfA
  207.         add ESP, 12
  208.         mov rinp, EAX
  209.         inc rinp
  210.  
  211.         push 0
  212.         push offset rout
  213.         push rinp
  214.         push offset wylosowanyTekstBuffer
  215.         push hout
  216.         call WriteConsoleA
  217.  
  218.         inc licz
  219.         .ENDW
  220.  
  221.         ;gierka
  222.  
  223.         ;zacheta 3
  224.             push 0
  225.             push offset rout
  226.             push 17
  227.             push offset zach3
  228.             push hout
  229.             call WriteConsoleA
  230.  
  231.         ;czytanie 3
  232.             push 0
  233.             push offset rout
  234.             push 5
  235.             push offset ranger
  236.             push hin
  237.             call ReadConsoleA ;NIE POZWALA MI NIC WPISAC !!
  238.  
  239.         mov EDX, OFFSET ranger
  240.         add EDX, rout
  241.         mov [EDX-2],BYTE PTR 0
  242.        
  243.         push offset ranger      ;adres poczatku ciagu znakow przekazywany na stos
  244.         call atoi               ;wywolanie procedury atoi
  245.         mov range, EAX          ;przeniesienie wyniku procedury atoi z rejestru EAX do zmiennej zb
  246.  
  247.         call GetTickCount
  248.         push eax
  249.         call nseed
  250.         push ranger
  251.         call nrandom
  252.         mov wylosowanaLiczba, EAX
  253.  
  254.         mov licz, 0
  255.         lpytaj:
  256.         inc licz
  257.         ;zacheta 4
  258.             push 0
  259.             push offset rout
  260.             push 16
  261.             push offset zach4
  262.             push hout
  263.             call WriteConsoleA
  264.  
  265.         ;czytanie 3
  266.             push 0
  267.             push offset rout
  268.             push 2
  269.             push offset pytaj
  270.             push hin
  271.             call ReadConsoleA
  272.  
  273.         mov EDX, OFFSET pytaj
  274.         add EDX, rout
  275.         mov [EDX-2],BYTE PTR 0
  276.  
  277.         push offset pytaj       ;adres poczatku ciagu znakow przekazywany na stos
  278.         call atoi               ;wywolanie procedury atoi
  279.         mov pytaj, EAX      ;przeniesienie wyniku procedury atoi z rejestru EAX do zmiennej zb
  280.  
  281.  
  282.         cmp EAX, wylosowanaLiczba
  283.         je lrowne
  284.         ja lwieksza
  285.         jmp lmniejsza
  286.  
  287.     lwieksza:
  288.         push    OFFSET wynik2
  289.         push    OFFSET wynik2
  290.         call    CharToOemA  ; konwersja polskich znaków
  291.         push 0
  292.         push offset rout
  293.         push 34
  294.         push offset wynik2
  295.         push hout
  296.         call WriteConsoleA
  297.         jmp lpytaj
  298.  
  299.     lmniejsza:
  300.         push    OFFSET wynik3
  301.         push    OFFSET wynik3
  302.         call    CharToOemA  ; konwersja polskich znaków
  303.         push 0
  304.         push offset rout
  305.         push 35
  306.         push offset wynik3
  307.         push hout
  308.         call WriteConsoleA
  309.         jmp lpytaj
  310.  
  311.     lrowne:
  312.         push licz
  313.         push OFFSET trafiona
  314.         push OFFSET trafionaBuffer
  315.         call wsprintfA
  316.         add ESP, 12
  317.         mov trinp, EAX
  318.         inc trinp
  319.  
  320.         push 0
  321.         push offset rout
  322.         push trinp
  323.         push offset trafionaBuffer
  324.         push hout
  325.         call WriteConsoleA
  326.         jmp koniec
  327.  
  328.     koniec:
  329.         push 0
  330.         call ExitProcess
  331.     main endp
  332.  
  333.     ;funkcja atoi
  334.     atoi proc uses esi edx inputBuffAddr:DWORD
  335.         mov esi, inputBuffAddr
  336.         xor edx, edx
  337.         xor EAX, EAX
  338.         mov AL, BYTE PTR [esi]
  339.         cmp eax, 2dh
  340.         je parseNegative
  341.  
  342.         .Repeat
  343.             lodsb
  344.             .Break .if !eax
  345.             imul edx, edx, 10
  346.             sub eax, "0"
  347.             add edx, eax
  348.         .Until 0
  349.         mov EAX, EDX
  350.         jmp endatoi
  351.  
  352.         parseNegative:
  353.         inc esi
  354.         .Repeat
  355.             lodsb
  356.             .Break .if !eax
  357.             imul edx, edx, 10
  358.             sub eax, "0"
  359.             add edx, eax
  360.         .Until 0
  361.  
  362.         xor EAX,EAX
  363.         sub EAX, EDX
  364.         jmp endatoi
  365.  
  366.         endatoi:
  367.         ret
  368.     atoi endp
  369. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement