Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; òèï ïðèëîæåíèÿ
- format PE console
- ; òî÷êà âõîäà
- entry start
- ; ïîäêëþ÷àåì ìàêðîáèáëèîòåêè
- include 'WIN32A.INC';'includes\win32ax.inc' äëÿ asp
- ;ñåêöèÿ äàííûõ
- section '.data' data readable writeable
- X dd ?
- Y dd ?
- result dd ?
- answer dd ?
- stdin dd ?
- stdout dd ?
- buffer db 13 dup(?) ; ðåçåðâàöèÿ 13 áàéò
- lenbuf = $ - buffer
- cntread dd ? ; êîëè÷åñòâî ïðî÷èòàííûõ ñèìâîëîâ
- ;ñåêöèÿ êîäà
- section '.code' code readable executable
- start:
- ; îëó÷åíèå äåñêðèïòîðîâ ïîòîêà ââîäà è âûâîäà
- invoke GetStdHandle, STD_INPUT_HANDLE
- mov [stdin], eax
- invoke GetStdHandle, STD_OUTPUT_HANDLE
- mov [stdout], eax
- ;ââîä ÷èñåë
- stdcall readInt, X, answer
- cmp [answer], 0
- jne exit
- ;âûâîä ÷èñëà
- stdcall writeInt, [X]
- ; âûõîä ñ çàäåðæêîé
- exit:
- invoke ReadConsole, [stdin], buffer, lenbuf, cntread, NULL
- invoke ExitProcess, 0
- ; ïîäïðîãðàììà âûâîäà öåëîãî ÷èñëà
- proc writeInt number
- ;ïðîëîã
- push eax
- push edx
- push ecx
- push ebp
- push esi
- push ebx
- ;íà÷àëüíûå óñòàíîâêè
- mov eax, [number]
- mov esi, buffer
- mov ebx, 10
- xor ecx, ecx;êîëè÷åñòâî öèôð
- xor ebp, ebp;ïîäñ÷åò êîëè÷åñòâà ñèìâîëîâ
- ;çíàê
- cmp eax, 0
- jge m1
- mov [esi], byte '-'
- inc esi
- inc ebp
- neg eax
- m1:
- ;ïîëó÷åíèå öèôð
- cdq
- div ebx
- push edx
- inc ecx
- cmp eax, 0
- jne m1
- ; ôîðìèðîâàíèå ñòðîêè
- add ebp, ecx
- m2: pop edx
- add dl, '0'
- mov [esi], dl
- inc esi
- loop m2 ;òàê êàê â ecx ÷òî-òî åñòü
- ; âûâîä
- invoke WriteConsole, [stdout], buffer, ebp, NULL, NULL
- ;ýïèëîã
- pop ebx
- pop esi
- pop ebp
- pop ecx
- pop edx
- pop eax
- ret
- endp
- ;ïîäïðîãðàììà ââîäà öåëîãî ÷èñëà
- proc readInt number, errorIn
- pusha
- invoke ReadConsole, [stdin], buffer, lenbuf, cntread, NULL
- mov ecx, [cntread]
- sub ecx, 2; -ïðîáåë è ïåðåõîä íà íîâóþ ñòðîêó
- mov esi, buffer
- xor eax, eax
- mov edi, 10
- xor ebx, ebx
- ;çíàê
- cmp [esi], byte '-'
- jne m3
- inc esi
- dec ecx
- m3: mov bl, [esi]
- sub bl, '0'
- cmp bl, 0
- jl er1
- cmp bl, 9
- jg er1
- imul edi
- jc er2
- add eax, ebx
- jc er2
- jo er2
- inc esi
- loop m3
- cmp [buffer], byte '-'
- jne m4
- neg eax
- m4: mov edi, [number]
- mov [edi], eax
- mov ebx, 0
- jmp m5
- er1: mov ebx, 1
- jmp m5
- er2: mov ebx, 2
- m5: mov edi, [errorIn]
- mov [edi], ebx
- popa
- ret
- endp
- ;ñåêöèÿ èìïîðòà
- section '.idata' import data readable writeable
- library kernel32, 'KERNEL32.DLL'
- import kernel32, \
- GetStdHandle, 'GetStdHandle', \
- WriteConsole, 'WriteConsoleA', \
- ReadConsole, 'ReadConsoleA', \
- ExitProcess, 'ExitProcess'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement