DIY рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди

рдХрднреА-рдХрднреА рдПрдХ рд╡рд┐рдЪрд╛рд░ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореЗрд░реЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реБрдЖред

рдореИрдВрдиреЗ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (рд╡реАрдПрдо) рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЙрд╕ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдерд╛, рдореБрдЭреЗ рдпрд╣ рдкреНрд░рддреАрдд рд╣реБрдЖ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдХрдЯ рдкрд░ рдЬрд╛рдПрдВ!

рд╕рд┐рджреНрдзрд╛рдВрдд


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

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЗрдВ рд╕реНрд╡рдпрдВ рдЕрд▓рдЧ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЪреБрдЕрд▓ рдмреЙрдХреНрд╕ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЗрд╡реАрдПрдо (рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди) рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред

VM рдХрд╛ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг JVM рд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рд╕рдорд╛рди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА VM рдмрдирд╛рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред

рд╕реНрдореГрддрд┐


рддреЛ, рдЕрдм рдЪрд▓реЛ рд╕реНрдореГрддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдореЗрдореЛрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЗрдВрдЯ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдореЗрдореЛрд░реА рдХрд╛ рдЖрдХрд╛рд░ 4096 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ (рд╕рд░рдгреА рдореЗрдВ 1024 рддрддреНрд╡ рд╣реИрдВ, рдФрд░ рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрдВрддрд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ 1024 * 4 = 4096), рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде, рд╣рдо 8 рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ 8 рд╕реЗрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 256 рдмрд╛рдЗрдЯреНрд╕ (8 * 8 * 4 = 256) рд╣реЛрдВрдЧреЗред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

#define MEMSIZE 1024 unsigned int memory[MEMSIZE]; unsigned int reg[8][8]; 

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ


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

 enum commands { /*   / List of commands */ CRG = 1, /* Change ReGister -   [1] */ CRC, /* Change Register Cell [2] */ PRG, /* Put in ReGister -       [3] */ PRC /* Put Register Cell     [4] */ }; 

рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдХрд╛ рдЕрдкрдирд╛ рдЭрдВрдбрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЭрдВрдбреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ:

 enum flags { /*   / List of flags */ STDI = 1, /*   / Standard flag */ STDA /*   / Address flag */ }; 

рдорд╛рдирдХ рдХрдорд╛рдВрдб рдХрд╛ рд░реВрдк рд╣реИ: [рдХрдорд╛рдВрдб] [рдлреНрд▓реИрдЧ] [рдбреЗрдЯрд╛] (рдХреБрдЫ рдХрдорд╛рдВрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ), рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ:

 if (memory[cell] == CRG && memory[cell + 1] == STDI) { indxX = memory[cell + 2]; cell++; } else if (memory[cell] == CRC && memory[cell + 1] == STDI) { indxY = memory[cell + 2]; cell++; } else if (memory[cell] == PRG && memory[cell + 1] == STDI) { reg[indxX][0] = memory[cell + 2]; cell++; } else if (memory[cell] == PRC && memory[cell + 1] == STDI) { reg[indxX][indxY] = memory[cell + 2]; cell++; } 

indxX рдФрд░ indxY рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИрдВ рдЬреЛ рд░реЗрдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдХрд░реНрд╕рд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред
рд╕реЗрд▓ рдПрдХ рдЪрд░ рд╣реИ рдЬреЛ рдореЗрдореЛрд░реА рдПрд░реЗ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдХрд░реНрд╕рд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЕрдкрдиреЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдХреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдПрд╕рдПрдо рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрд╕реНрдерд╛рдпреА рд╣реИред

рд╣рдорд╛рд░рд╛ asm рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 /*  */ #define $CRG {memory[memIndx++] = CRG;} #define $CRC {memory[memIndx++] = CRC;} #define $PRG {memory[memIndx++] = PRG;} #define $PRC {memory[memIndx++] = PRC;} /*  */ #define _$STDI {memory[memIndx++] = STDI;} #define _$STDA {memory[memIndx++] = STDA;} /*  */ #define _$DATA memory[memIndx++] = 

memIndx рдПрдХ рдЪрд░ рд╣реИ рдЬреЛ рдореЗрдореЛрд░реА рдПрд░реЗ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдХрд░реНрд╕рд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ asm рдкрд░ рдХреЛрдб рд╣реИ рдЬреЛ рдкрддреЗ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ 123 рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИ [1] [0] (рдкрд╣рд▓рд╛ рд░рдЬрд┐рд╕реНрдЯрд░, рд╢реВрдиреНрдп рд╕реЗрд▓):

 $CRG /*   */ _$STDI /*   STDI */ _$DATA 1; /*   */ $CRC /*   */ _$STDI _$DATA 0; $PRC /*   */ _$STDI _$DATA 123; 

рдмрдзрд╛рдИ рд╣реЛ, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдиреА рдХрд╛рд░ рдХреЗ рд▓рд┐рдП asm рдХреА рдПрдХ рдЭрд▓рдХ рд╣реИ!

рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд░реЗрдВ


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

рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ asm рдХреЛрдб рд╣реИ, рдЕрдм рд╣рдореЗрдВ рдЗрд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореА рдорд╢реАрди рдХреЛрдб рдХреЛ .ncp рдлрд╝рд╛рдЗрд▓ (рдиреНрдпреВрдореЗрд░рд┐рдХ рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо) рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрд╛рдХреА рд╕рдм рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛), рдЙрд╕рдХреЗ рдмрд╛рджред рд╣рдореЗрдВ .ncp рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЬреЛ рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓рд┐рдЦрд╛ рдерд╛, рд╡рд╣ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ; рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ atoi () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

рд╢рдмреНрджреЛрдВ рд╕реЗ рдХрд░реНрдореЛрдВ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ:

рдХреЛрдб рдкрдврд╝рдирд╛ рдФрд░ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдирд╛:

 if (memory[i] == CRG && memory[i + 1] == STDI) { fprintf(code, "%d %d ", CRG, STDI); i++; } else if (memory[i] == CRC && memory[i + 1] == STDI) { fprintf(code, "%d %d ", CRC, STDI); i++; } else if (memory[i] == PRG && memory[i + 1] == STDI) { fprintf(code, "%d %d ", PRG, STDI); i++; } else if (memory[i] == PRC && memory[i + 1] == STDI) { fprintf(code, "%d %d ", PRC, STDI); i++; } 

рдХреЛрдб ncpGen () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдЧ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди:

 if (prog != NULL) { fread(txt, 1, len, prog); tok = strtok(txt, " "); while (tok != NULL) { memory[i] = atoi(tok); tok = strtok(NULL, " "); if (argc == 3 && strcmp(argv[2], "-m") == 0) { printf("%d\n", memory[i]); } i++; } memInter(); } else { perror("Fail"); } 

рдЕрдм, рдПрдХ рдореИрдХреНрд░реЛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ asm рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреЛрдб .ncp рдореЗрдВ рдмрджрд▓ рдЬрд╛рдП:

 #define _toNCP(name) {strcpy(filename, name);} {ncpGen();} 

рдпрджрд┐ рдХреБрдЫ рднреА рд╣реИ, рддреЛ рд▓реЗрдЦ рд╕рднреА рдХреЛрдб рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ!

рдкреВрд░рд╛ рдХреЛрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ ред

рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

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


All Articles