рд╕рд░рд▓ x86 рдХреЛрдбрд╛рдВрддрд░рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо: рдПрд░рд╛рдЯреЛрд╕реНрдердиреАрдЬ рдХреА рдЫрд▓рдиреА

рдЙрджреНрдШрд╛рдЯрди рдЯрд┐рдкреНрдкрдгреА


рдореЗрд░реЗ рдкреЗрд╢реЗ рдореЗрдВ, рдореИрдВ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛: рдореИрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЪреВрдБрдХрд┐ рдЖрддреНрдорд╛ рдХреЛ рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреНрдЮрд╛рди рдХреЗ рдХреНрд╖рд┐рддрд┐рдЬ рдХреЛ рд╡реНрдпрд╛рдкрдХ рдмрдирд╛рдирд╛ рдпрд╛ рдмрд╕ рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдорд╢реАрди рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдореИрдВ рдЙрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддрд╛ рд╣реВрдБ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдВ рдкреИрд╕рд╛ рдХрдорд╛рддрд╛ рд╣реВрдБ - рдпрд╣ рдореЗрд░рд╛ рд╢реМрдХ рд╣реИред

рдФрд░ рдЕрдм, рдореИрдВ x86 рдкрд░рд┐рд╡рд╛рд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рднрд╛рд╖рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдЖрдк рдЕрдкрдиреА рдпрд╛рддреНрд░рд╛ рдХреЛ рдЕрдореВрд░реНрдд рд╕реНрддрд░реЛрдВ рдХреЗ рддрд░рд╛рдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╡рд┐рдЬрдп рдореЗрдВ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛:

рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрд░рд╛рд╕реЛрд╕реНрдердиреАрдЬрд╝ рдХреА рдЫрд▓рдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд░рд╛рдзреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рдЪреБрдирд╛ред рдореИрдВрдиреЗ nasm рдХреЛ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ред

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╢реИрд▓реА рдФрд░ рд╕рдордЭ рдкрд░ рдЕрдзрд┐рдХ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рдХреЛрдб рд▓рд┐рдЦрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ xor eax, eax рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдирд┐рд░реНрджреЗрд╢ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдХрд╛рд░рдг mov eax, 0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЪреВрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢реИрдХреНрд╖рд┐рдХ рд▓рдХреНрд╖реНрдпреЛрдВ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рдХреЛрдб рд╢реИрд▓реА рдХреА рдЦреЛрдЬ рдореЗрдВ рдЕрд╡рд┐рд╢реНрд╡рд╛рд╕ рдФрд░ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред

рдХрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?


рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдХрдард┐рди рдмрд╛рдд рдЬреЛ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╣реЛрддреА рд╣реИ, рд╕реНрдореГрддрд┐ рдХрд╛ рд╕рдВрдЧрдарди рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣реИрдмреЗ рдкрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рдерд╛ред

рд╕рд╡рд╛рд▓ рдпрд╣ рднреА рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЖрдВрддрд░рд┐рдХ рджреБрдирд┐рдпрд╛ рдФрд░ рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреИрд╕реЗ рдЗрддрдиреЗ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдкреАрдЖрдИ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рдбреЙрд╕ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрдХреНрд░рдо "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛" рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рдерд╛:

 SECTION .text org 0x100 mov ah, 0x9 mov dx, hello int 0x21 mov ax, 0x4c00 int 0x21 SECTION .data hello: db "Hello, world!", 0xD, 0xA, '$' 


Windows рдореЗрдВ, Win32 API рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

 %include "win32n.inc" extern MessageBoxA import MessageBoxA user32.dll extern ExitProcess import ExitProcess kernel32.dll SECTION code use32 class=code ..start: push UINT MB_OK push LPCTSTR window_title push LPCTSTR banner push HWND NULL call [MessageBoxA] push UINT NULL call [ExitProcess] SECTION data use32 class=data banner: db "Hello, world!", 0xD, 0xA, 0 window_title: db "Hello", 0 


рдпрд╣рд╛рдВ рд╣рдо win32n.inc рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдореИрдХреНрд░реЛрдЬрд╝ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ рдХрд┐ Win32 API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдХрдо рдХрд░реЗрдВред

рдореИрдВрдиреЗ рд╕реАрдзреЗ рдУрдПрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЪреБрдирд╛ред рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рднреА рдЦреЛрд▓рддрд╛ рд╣реИ (рдФрд░, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛, рдЕрдиреНрдп рдУрдПрд╕ рдореЗрдВ) - рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрд▓рдмреНрдзрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реБрдЦрдж рдЙрдкрд▓рдмреНрдзрд┐ рд╣реИред

рд╕рдмрд░реВрдЯреАрди рдХреЙрд▓


рд╕рдмрдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдЬреЛрд░ рджреЗрддреА рд╣реИ: рд╕рдмрдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдХрд╛ рдЖрдпреЛрдЬрди, рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛, рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдмрдирд╛рдирд╛, рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред

рдЙрдкрдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд╣ рд▓реЗрдмрд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╕рдмрд░реВрдЯреАрди ret рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЙрд╕ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рдмрд░реБрдЯреА рдХрдВрд╕реЛрд▓ рдореЗрдВ "рд╣реЗрд▓реЛ, рд╡рд░реНрд▓реНрдб" рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ:

 print_hello: mov ah, 0x9 mov dx, hello int 0x21 ret 


рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ call рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 call print_hello 


рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЙрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд┐рдирдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреИрд╕реЗ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ printf рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд▓рд╛рддрд╛ рд╣реИ:

 push hello call _printf add esp, 4 


рддрд░реНрдХ рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдХ рдЭреВрда рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реАред

рд╕рдмрд░реВрдЯреАрди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 print_hello: push ebp ;       mov ebp, esp ;      


рддрджрдиреБрд╕рд╛рд░, рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рдХреА рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  mov esp, ebp pop ebp ret 


рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП , рдПрдХ рд╕реНрдЯреИрдХ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдПрдХ рдирдпрд╛ рдлреНрд░реЗрдо рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:

 print_hello: push ebp mov ebp, esp sub esp, 8 ;     8 ,    


X86 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рднреА рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдпреЗ рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ:

 print_hello: enter 8, 0 ;  ,  8     leave ;  ret 


enter рдмрдпрд╛рди рдХрд╛ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдмрд░реВрдЯреАрди рдХрд╛ рдШреЛрдВрд╕рд▓реЗ рдХрд╛ рд╕реНрддрд░ рд╣реИред рдпрд╣ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рддрдХрдиреАрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдорд╛рди рд╢реВрдиреНрдп рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реА


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ:

рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

main.asm
 %define SUCCESS 0 %define MIN_MAX_NUMBER 3 %define MAX_MAX_NUMBER 4294967294 global _main extern _printf extern _scanf extern _malloc extern _free SECTION .text _main: enter 0, 0 ;   call input_max_number cmp edx, SUCCESS jne .custom_exit mov [max_number], eax ;     mov eax, [max_number] call allocate_flags_memory cmp edx, SUCCESS jne .custom_exit mov [primes_pointer], eax ;   mov eax, [primes_pointer] mov ebx, [max_number] call find_primes_with_eratosthenes_sieve ;  mov eax, [primes_pointer] mov ebx, [max_number] call print_primes ;     mov eax, [primes_pointer] call free_flags_memory ; .success: push str_exit_success call _printf jmp .return .custom_exit: push edx call _printf .return: mov eax, SUCCESS leave ret %include "functions.asm" SECTION .data max_number: dd 0 primes_pointer: dd 0 %include "string_constants.asm" 


рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ 5 рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЙрдкрдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
  1. input_max_number - рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕рд░рд▓ рдЦреЛрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ; рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореВрд▓реНрдп рд╕реНрдерд┐рд░рд╛рдВрдХ MIN_MAX_NUMBER рдФрд░ MAX_MAX_NUMBER рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ
  2. allocate_flags_memory - рдУрдПрд╕ рдХреЛ рдвреЗрд░ рдкрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдирд┐рд╢рд╛рди (рд╕рд░рд▓ / рдпреМрдЧрд┐рдХ) рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ; рдпрджрд┐ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ eax рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
  3. find_primes_with_eratosthenes_sieve - find_primes_with_eratosthenes_sieve рдХреА рдХреНрд▓рд╛рд╕рд┐рдХ рдЫрд▓рдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдпреБрдХреНрдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛;
  4. print_primes - рдХрдВрд╕реЛрд▓ рдХреЛ primes рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ;
  5. free_flags_memory - рдЭрдВрдбреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореБрдлреНрдд рдореЗрдореЛрд░реА

рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдкрд░ рд╕рд╣рдорддрд┐ рджреА рдЧрдИ рдереА: рдорд╛рди рдХреЛ edx рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, edx рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╣реИред рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рдЗрд╕рдореЗрдВ SUCCESS рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐, 0 , рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдХрд╛ рдкрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

string_constants.asm рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЪрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рдирдХреЗ рдорд╛рди, рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХреЗрдд рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЗрди рдЪрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж "рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ" рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред I / O рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХрднреА рднреА рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ - рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╕реЛрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИред

string_constants.asm
 ; -,  str_max_number_label: db "Max number (>=3): ", 0 str_max_number_input_format: db "%u", 0 str_max_number_output_format: db "Using max number %u", 0xD, 0xA, 0 str_print_primes_label: db "Primes:", 0xD, 0xA, 0 str_prime: db "%u", 0x9, 0 str_cr_lf: db 0xD, 0xA, 0 ;  str_exit_success: db "Success!", 0xD, 0xA, 0 str_error_max_num_too_little: db "Max number is too little!", 0xD, 0xA, 0 str_error_max_num_too_big: db "Max number is too big!", 0xD, 0xA, 0 str_error_malloc_failed: db "Can't allocate memory!", 0xD, 0xA, 0 


рдирд┐рдореНрди рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

makefile
 ifdef SystemRoot format = win32 rm = del ext = .exe else format = elf rm = rm -f ext = endif all: primes.o gcc primes.o -o primes$(ext) $(rm) primes.o primes.o: nasm -f $(format) main.asm -o primes.o 



рдЙрдкрдкреНрд░реЛрдЧреНрд░рд╛рдо (рдХрд╛рд░реНрдп)


input_max_number

рд╕рдмрд░реВрдЯреАрди рдХреЛрдб
 ;    ; : EAX -   input_max_number: ; -, ;4     enter 4, 1 ;  push str_max_number_label ;. string_constants.asm call _printf add esp, 4 ; scanf mov eax, ebp sub eax, 4 push eax push str_max_number_input_format ;. string_constants.asm call _scanf add esp, 8 mov eax, [ebp-4] ; cmp eax, MIN_MAX_NUMBER jb .number_too_little cmp eax, MAX_MAX_NUMBER ja .number_too_big jmp .success ; .number_too_little: mov edx, str_error_max_num_too_little ;. string_constants.asm jmp .return .number_too_big: mov edx, str_error_max_num_too_big ;. string_constants.asm jmp .return .success: push eax push str_max_number_output_format ;. string_constants.asm call _printf add esp, 4 pop eax mov edx, SUCCESS .return: leave ret 


рдЙрдкрдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЦреЛрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ scanf рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╣реИ:

  mov eax, ebp sub eax, 4 push eax push str_max_number_input_format ;. string_constants.asm call _scanf add esp, 8 mov eax, [ebp-4] 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рдХреЛ рдкрд╣рд▓реЗ рдмреЗрд╕ рдореЗрдВ рд╕реНрдЯреИрдХ рдмреЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдиреАрдЪреЗ 4 рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЙрдкрдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╕реНрдерд╛рдиреАрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рдореЗрдореЛрд░реА рд╣реИред рдЗрд╕ рдореЗрдореЛрд░реА рдХреЗ рдкреЙрдЗрдВрдЯрд░ рдХреЛ scanf рдлрдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреАрдмреЛрд░реНрдб рд╕реЗ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдпред

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдореЗрдореЛрд░реА рд╕реЗ eax рддрдХ рдЪрд▓рддрд╛ рд╣реИред

рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ_рдлреНрд▓реИрдЧ_рдореЗрдореЛрд░реА рдФрд░ рдлреНрд░реА_рдлреНрд▓реИрдЧ_рдореИрдореЛрд░реА

рд░реВрдЯреАрди рдХреЛрдб
 ;      ; : EAX -   ; : EAX -    allocate_flags_memory: enter 8, 1 ; EAX+1  inc eax mov [ebp-4], eax push eax call _malloc add esp, 4 ; cmp eax, 0 je .fail mov [ebp-8], eax ; mov byte [eax], 0 cld mov edi, eax inc edi mov edx, [ebp-4] add edx, eax mov al, 1 .write_true: stosb cmp edi, edx jb .write_true ; mov eax, [ebp-8] jmp .success .fail: mov edx, str_error_malloc_failed ;. string_constants.asm jmp .return .success: mov edx, SUCCESS .return: leave ret ;      ; : EAX -    free_flags_memory: enter 0, 1 push eax call _free add esp, 4 leave ret 


рдЗрди рд░реВрдЯреАрдиреЛрдВ рдореЗрдВ рдкреНрд░рдореБрдЦ рд╕реНрдерд╛рди рдореЙрд▓реЛрдХ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдФрд░ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ free рдХрд╛рд░реНрдп рд╣реИрдВред

malloc рд╕рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, eax рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХрд╛ рдкрддрд╛ рджреЗрддрд╛ рд╣реИ, рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ 0 рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЕрдбрд╝рдЪрди рд╣реИред 32 рдмрд┐рдЯреНрд╕ 4,294,967,295 рддрдХ рдХреЗ рдЕрдкрд░рд╛рдзреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдмрд╛рд░ рдореЗрдВ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред

find_primes_with_eratosthenes_sieve

рд╕рдмрд░реВрдЯреАрди рдХреЛрдб
 ;       ;: EAX -    , EBX -   find_primes_with_eratosthenes_sieve: enter 8, 1 mov [ebp-4], eax add eax, ebx inc eax mov [ebp-8], eax ;   cld mov edx, 2 ;p = 2 mov ecx, 2 ;  = 2 .strike_out_cycle: ;x = c*p mov eax, edx push edx mul ecx pop edx cmp eax, ebx jbe .strike_out_number jmp .increase_p .strike_out_number: mov edi, [ebp-4] add edi, eax mov byte [edi], 0 inc ecx ;c = c + 1 jmp .strike_out_cycle .increase_p: mov esi, [ebp-4] add esi, edx inc esi mov ecx, edx inc ecx .check_current_number: mov eax, ecx mul eax cmp eax, ebx ja .return lodsb inc ecx cmp al, 0 jne .new_p_found jmp .check_current_number .new_p_found: mov edx, ecx dec edx mov ecx, 2 jmp .strike_out_cycle .return: leave ret 



рд╕рдмрд░реВрдЯреАрди рдПрдХреНрд╕рдПрдордПрд▓ рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдордЧреНрд░ рд╕рдВрдЦреНрдпрд╛, рдПрд░рд╛рдЯреЛрд╕реНрдердиреАрдЬ рдХреА рдЫрд▓рдиреА рдХреЗ рд▓рд┐рдП рд╢рд╛рд╕реНрддреНрд░реАрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдЦрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ :)

print_primes

рд╕рдмрд░реВрдЯреАрди рдХреЛрдб
 ;    ; : EAX -    , EBX -   print_primes: enter 12, 1 mov [ebp-4], eax mov [ebp-8], ebx push str_print_primes_label call _printf add esp, 4 cld mov esi, [ebp-4] mov edx, esi add edx, [ebp-8] inc edx mov [ebp-12], edx mov ecx, 0 .print_cycle: lodsb cmp al, 0 jne .print jmp .check_finish .print: push esi push ecx push str_prime ;. string_constants.asm call _printf add esp, 4 pop ecx pop esi mov edx, [ebp-12] .check_finish: inc ecx cmp esi, edx jb .print_cycle push str_cr_lf call _printf add esp, 4 leave ret 


рд░реБрдЯреАрди рдкреНрд░рд╛рдЗрдо рдирдВрдмрд░ рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдмрд┐рдВрджреБ C рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ printf рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЦреИрд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рднреА рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЖрд╢рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдФрд░ рд╡рд╣ рдЙрддрдирд╛ рд╣реА рдЖрдирдВрдж рд▓реЗрдЧрд╛ рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ред

рдореИрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рднреА рджреЗрддрд╛ рд╣реВрдВред

рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рднреА рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдмрдЪрдкрди рд╕реЗ рд╕рд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдХреЛрдбрд╛рдВрддрд░рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рддреЗрдЬреА рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдПрдЯрдХрд┐рди рд░реАрд╢реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд┐рдореНрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ /O2 рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдПрдХ C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЗ рдореЗрд░реА рдорд╢реАрди рдкрд░ рд▓рдЧрднрдЧ 25 рд╕реЗрдХрдВрдб рдореЗрдВ рдирдВрдмрд░ 2 30 рддрдХ рдЦреЛрдЬрд╛ред рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо 15 рд╕реЗрдХрдВрдб рдХреА рдЪрд▓рдиреА рдХреЗ рд╕рд╛рде Eratosthenes рджрд┐рдЦрд╛рдпрд╛ред

рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдПрдХ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рддрдереНрдп рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ рдЪрд╛рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЧрдВрднреАрд░ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдерд╛, рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдореБрдЭреЗ рд▓реЗрдЦ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


  1. рд▓рд░реНрдирд┐рдВрдЧ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕реВрдЪреА
  2. рдореЗрдореЛрд░реА рд╕рдВрдЧрдарди
  3. рдПрд░рд╛рдЯреЛрд╕реНрдердиреАрдЬ рдХреА рдЫрд▓рдиреА
  4. рдПрдЯрдХрд┐рди рдЫрд▓рдиреА
  5. рдЕрдиреЗрдХрддрд╛
  6. рдвреЗрд░ рдХрд╛ рдврд╛рдБрдЪрд╛

Source: https://habr.com/ru/post/In165397/


All Articles