kolibrios-gitea/programs/develop/c--/trunk/readme_ru.txt
Yogev Ezra 02b76505a6 Add sources of "C--"'like compiler written in C--.
git-svn-id: svn://kolibrios.org@1846 a494cfbc-eb01-0410-851d-a64ba20cac60
2011-02-05 16:39:49 +00:00

530 lines
21 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"‘®¢¥àè¨â¥ ¢ë ¬ ááã ®âªàë⨩,
¨­®£¤  ­¥ ¦¥« ï ⮣®..."
<20>¥ ¯®¬­î  ¢â®à , ­® ¯¥«
€­¤à¥© Œ¨à®­®¢.
<20>।¨á«®¢¨¥.
ˆ¤¥ï ­ ¯¨á âì ª®¬¯¨«ïâ®à ¤«ï Win32 த¨« áì ¯à¨ ¬®¥¬ ¯¥à¢®¬
§­ ª®¬á⢥ á ª®¬¯¨«ïâ®à®¬ Sphinx C-- <20>¨â¥à  ‘¥««¨ª  (Peter Cellik)
¢ 1996 £®¤ã, ­® ॠ«¨§®¢ âì ¥¥ 㤠«®áì «¨èì ­¥¤ ¢­®, ª®£¤ 
¯®ï¢¨« áì ¢®§¬®¦­®áâì ç¥à¥§ ˆ­â¥à­¥â ­ ©â¨ ¨á室­ë¥ ⥪áâë ¤«ï C--,
¯®áª®«ìªã ­ ç¨­ âì á ­ã«ï ¦¥« ­¨ï ­¥ ¡ë«®.
ˆâ ª, ª®à®âª® ® £« ¢­®¬. Žá­®¢­®© ¯à¨­æ¨¯ ¯®áâ஥­¨ï ¯à¨«®¦¥­¨©
¤«ï 32-à §à來®© á¨á⥬ë, ¯à¥¤« £ ¥¬ë© ¢ à §«¨ç­ëå ª®¬¯¨«ïâ®à å,
§ ª«îç ¥âáï ¢ à §¤¥«¥­¨¨ ª®¤  ­  ­¥áª®«ìª® ᥪ権: .text, .data,
.idata, .reloc, .rsrc ¨ â.¤., ª®â®àë¥ áâà®ïâáï ¨§ á ¬¨å ¨á室­ëå
⥪á⮢ ¨ à §«¨ç­ëå ä ©«®¢ ®¯¨á ­¨© ¨ à¥áãàᮢ ­  áâ ¤¨¨ ᡮન
¯à®£à ¬¬®©-«¨­ª®¢é¨ª®¬ (link). <20>® áã⨠¤¥«  ®áâ « áì áâ à ï á奬 
¯®áâ஥­¨ï: compiler + linker -> exe-file. Šà®¬¥ ⮣®, ¡®«ì让 ­ ¡®à
à §«¨ç­ëå ¡¨¡«¨®â¥ª... ª®â®àë¥ ª ⮬㠦¥ áãé¥á⢥­­® ¬¥­ïîâáï ®â
¢¥àᨨ ª ¢¥àᨨ, ç⮠ᮢᥬ ­¥ à ¤ã¥â. ˆ ¥á«¨ ¢ë ¯¥à¥å®¤¨â¥ ­  ­®¢ãî,
¡®«¥¥ ¯à®¤¢¨­ãâãî ¢¥àá¨î ª®¬¯¨«ïâ®à , â® ­¥â ­¨ª ª®© £ à ­â¨¨, çâ®
¢ë ᬮ¦¥â¥ ­  ­¥¬ ¯¥à¥ª®¬¯¨«¨à®¢ âì ᢮¨ áâ àë¥ ¯à®£à ¬¬ë - ¯à¨¬¥à®¬
á«ã¦¨â DDK ®â MicroSoft.
Sphinx C-- ¨§­ ç «ì­® ¡ë« § ¤ã¬ ­ ¨ ॠ«¨§®¢ ­ ¤«ï ᮧ¤ ­¨ï
ª®¬¯ ªâ­ëå ¯® à §¬¥àã COM-ä ©«®¢ ¨ ¯®í⮬㠢¯®«­¥ ¯®¤å®¤¨â ¤«ï
£¥­¥à æ¨¨ 32-à §à來ëå ¯à¨«®¦¥­¨ï ¢ ¬®¤¥«¨ ¯«®áª®© (flat) ¯ ¬ïâ¨.
<EFBFBD>®¬¨¬® í⮣® ¡®«ì訬 ¯«îᮬ ï¥âáï ¨¤¥ï ®âªàë⮣® ª®¤  ¤«ï ¢á¥å
¢ë§ë¢ ¥¬ëå ¢ ¯à®£à ¬¬¥ ¡¨¡«¨®â¥ç­ëå ä㭪権, ॠ«¨§®¢ ­­ ï ¯®á।á⢮¬
*.h-- ä ©«®¢.
…é¥ ®¤­  ¨¤¥ï ¨§ ª®¬¯¨«ïâ®à  Sphinx C--, § á«ã¦¨¢ îé ï ¢­¨¬ ­¨ï, - íâ®
¤¨­ ¬¨ç¥áª¨¥ ¯à®æ¥¤ãàë, â.¥. ¯à®æ¥¤ãàë, ª®â®àë¥ ¬®£ãâ ¡ëâì ¯®¬¥é¥­ë ¢ ⥫®
ª®¬¯¨«¨à㥬®© ¯à®£à ¬¬ë ⮫쪮 ⮣¤ , ª®£¤  ª ­¨¬ ¥áâì ®¡à é¥­¨¥. ’ ª¨¬
®¡à §®¬, ¢ ¯à®æ¥áᥠ­ ¯¨á ­¨ï ¯à®£à ¬¬ë á ¨á¯®«ì§®¢ ­¨¥¬ ¤¨­ ¬¨ç¥áª¨å
¯à®æ¥¤ãà £ à ­â¨àã¥âáï ¢ª«î祭¨¥ ¢ ⥫® ¯à®£à ¬¬ë ⮫쪮 ⮣® ª®¤ ,
ª®â®àë© ¤¥©á⢨⥫쭮 ­¥®¡å®¤¨¬.
¯à®æ¥áᥠࠡ®âë ¯® ¯¥à¥¢®¤ã ª®¬¯¨«ïâ®à  Sphinx C-- ­  ¯« âä®à¬ã Win32
¯à®¨§¢¥¤¥­ë ¢¥á쬠 áãé¥á⢥­­ë¥ ¨§¬¥­¥­¨ï ª ª ¢ á ¬®¬ ª®¬¯¨«ïâ®à¥, â ª ¨ ¢
¨¤¥ïå, ­  ª®â®àëå ®­ ॠ«¨§®¢ ­. Ÿ ­¥ ¡ã¤ã §¤¥áì ¢ë¤¥«ïâì ¢á¥ ®â«¨ç¨ï
­ áâ®ï饣® ª®¬¯¨«ïâ®à  ®â ¥£® ¯à à®¤¨â¥«ï ¯® ⮩ ¯à®á⮩ ¯à¨ç¨­¥, çâ® â¥, ªâ®
á ­¨¬ §­ ª®¬, ¨å ᬮ£ãâ 㢨¤¥âì á ¬¨,   ⥬, ªâ® ­¥ ¨¬¥« ¤¥«  á --, ­¥â ­ã¦¤ë
¢­¨ª âì ¢ í⨠¤¥â «¨.
Žâ¬¥çã, ®¤­ ª®, çâ® ¯à¨­æ¨¯ £¥­¥à æ¨¨ ª®¤ , ¨á¯®«ì§®¢ ¢è¨©áï ¢ --, § ¬¥­¥­
­  ¯à¨­æ¨¯, ¨á¯®«ì§ã¥¬ë© ¢ ¬ ªà® áᥬ¡«¥à¥ TMA ‘¢¥­  Š«®§¥ (TMA macro assembler
Sven Klose), á ¯à®¢¥¤¥­¨¥¬ ¥£®  ¤ ¯â æ¨¨ ª ­ã¦¤ ¬ --.
१ã«ìâ â¥ ¯®ï¢¨«áï ¤ ­­ë© ª®¬¯¨«ïâ®à, 楫ìî ª®â®à®£® ï¥âáï § ¯®«­¥­¨¥
­¨è¨ ¬¥¦¤ã ï§ëª®¬  áᥬ¡«¥à  ¨ ï§ëª®¬ .
Ž¯¨á ­¨¥ ï§ëª .
ˆ¤¥­â¨ä¨ª â®àë.
ˆ¤¥­â¨ä¨ª â®àë ¤®«¦­ë ­ ç¨­ âìáï á ¡ãª¢ë ¨«¨ §­ ª  ¯®¤ç¥àª¨¢ ­¨ï, ¥á«¨
ïîâáï £«®¡ «ì­ë¬¨, ¨«¨ ¦¥ ¤®«¦­ë ­ ç¨­ âìáï á ᨬ¢®«  @, ¥á«¨ ®­¨ «®ª «ì­ë¥.
„ «¥¥ ¬®¦¥â ¨¤â¨ «î¡ ï ª®¬¡¨­ æ¨ï æ¨äà, ¡ãª¢ ¨«¨ §­ ª®¢ ¯®¤ç¥àª¨¢ ­¨ï ¤«¨­®©
­¥ ¡®«¥¥ 63 ᨬ¢®«®¢. <20>ãª¢ë ¬®£ãâ ¡ëâì ª ª ¨§ « â¨­áª®£®, â ª ¨ ¨§ ­ æ¨®­ «ì­®£®
 «ä ¢¨â . <20>¥áª®«ìª® ¯à¨¬¥à®¢:
GoHome
_1234
<20>ਬ¥àˆ¤¥­â¨ä¨ª â®à 
@LocalLabel2
‚ᥠ¨¤¥­â¨ä¨ª â®àë, ªà®¬¥ § à¥§¥à¢¨à®¢ ­­ëå, ïîâáï çã¢á⢨⥫ì­ë¬¨ ª
ॣ¨áâàã, â.¥. ¨¤¥­â¨ä¨ª â®àë: ToDo ¨ Todo ª®¬¯¨«ïâ®à ¢®á¯à¨¬¥â ª ª à §­ë¥.
‡ à¥§¥à¢¨à®¢ ­­ë¥ ¨¤¥­â¨ä¨ª â®àë
<20>¨¦¥ ¯à¨¢®¤¨âáï ᯨ᮪ § à¥§¥à¢¨à®¢ ­­ëå ¨¤¥­â¨ä¨ª â®à®¢ ï§ëª , ª®â®àë¥
­¥ ¬®£ãâ ¡ëâì ¨á¯®«ì§®¢ ­ë ¯à¨ ᮧ¤ ­¨¨ ¯à®£à ¬¬ë ¨­ ç¥, ª ª íâ® ®¯à¥¤¥«¥­®
¢ ï§ëª¥:
byte char word short dword int
if else cycle do while return
docase case continue break extract from
enum struct
carryflag overflow zeroflag
notcarryflag notoverflow notzeroflag
  â ª¦¥ ­ §¢ ­¨ï ॣ¨áâ஢ ¨ ¬­¥¬®­¨ª¨ ª®¬ ­¤  áᥬ¡«¥à .
…é¥ à § ¯®¤ç¥àª­ã, çâ® § à¥§¥à¢¨à® ­­ë¥ á«®¢  ­¥ § ¢¨áïâ ®â ॣ¨áâà , â.¥.
Enum ¨ eNuM ª®¬¯¨«ïâ®à ¢®á¯à¨¬¥â ¢ «î¡®¬ ¨§ ¢ à¨ ­â®¢, ª ª ­ ç «® ᯨ᪠
­ã¬¥à®¢ ­­ëå ª®­áâ ­â.
Š®­áâ ­âë
—¨á«®¢ë¥ ª®­áâ ­âë ¬®£ãâ ¡ëâì § ¤ ­ë ¢ ®¤­®© ¨§ ç¥âëà¥å á¨á⥬ áç¨á«¥­¨ï:
¤¥áïâ¨ç­®©, è¥áâ­ ¤æ â¨à¨ç­®©, ¢®á¬¥à¨ç­®© ¨«¨ ¤¢®¨ç­®©.
„¥áïâ¨ç­ë¥ ç¨á«®¢ë¥ ª®­áâ ­âë § ¤ îâáï ®¡ëç­ë¬ ®¡à §®¬: 444 ¨«¨ 007.
˜¥áâ­ ¤æ â¨à¨ç­®¥ ¯à¥¤áâ ¢«¥­¨¥ ª®­áâ ­â ­ ç¨­ ¥âáï á ª®¬¡¨­ æ¨¨ 0x: 0xFFF
¨«¨ 0x088.
‚®á¬¥à¨ç­®¥ ¯à¥¤áâ ¢«¥­¨¥ ª®­áâ ­â ­ ç¨­ ¥âáï á ª®¬¡¨­ æ¨¨ 0o: 0o777 ¨«¨
0o10.
„¢®¨ç­®¥ ¯à¥¤áâ ¢«¥­¨¥ ª®­áâ ­â ­ ç¨­ ¥âáï á ª®¬¡¨­ æ¨¨ 0b: 0b111101 ¨«¨
0b11101010.
‘¨¬¢®«ë ¢ ª®­áâ ­â å § ª«îç îâáï ¢ ®¤¨­®ç­ë¥ ª ¢ë窨 ('). ’ ª ¦¥ ª ª ¨ ¢
ᨬ¢®«ë ¬®£ãâ § ¤ ­ë á ¯®¬®éìî 㪠§ ­¨ï ¨å ª®¤  ¯®á«¥ ᨬ¢®«  '\'. ‘¯¨á®ª
ᯥæᨬ¢®«®¢:
'\a', '\b', '\f', '\l', '\n', '\r', '\t' - ¤«ï ä®à¬ â¨à®¢ ­¨ï ¢ë¢®¤ 
'\x??' ¨«¨ '\???' - ASCII-ᨬ¢®«. Š®¤ ᨬ¢®«  § ¤ ­ «¨¡® ¢ 16, 10 §­ ç¥­¨¥¬.
‹î¡ë¥ ᨬ¢®«ë ¯®á«¥ '\' ¯à®áâ® ¯à¨­¨¬ îâáï ª®¬¯¨«ïâ®à®¬, â ª¨¬ ®¡à §®¬
®¤¨­®ç­ãî ª ¢ëçªã ¬®¦­® 㪠§ âì ª ª '\''.
‘âப®¢ë¥ ª®­áâ ­âë § ¤ îâáï ¯ã⥬ § ª«î祭¨ï ¨å ¢ ¤¢®©­ë¥ ª ¢ë窨 (").
‚­ãâਠáâப®¢®© ª®­áâ ­âë ¤®¯ã᪠¥âáï 㪠§ ­¨¥ ᯥæᨬ¢®«®¢ ¢ ®¤¨­®ç­ëå
ª ¢ë窠å. <20>ਬ¥àë áâப®¢ëå ª®­áâ ­â:
"<22>ਬ¥à áâப®¢®© ª®­áâ ­âë\n"
"Need '\"'word'\"' in data declaration" -> Need "word" in data declaration
<20>ਠ®¯à¥¤¥«¥­¨¨ ç¨á«®¢ëå ¨ ᨬ¢®«ì­ëå ª®­áâ ­â ¤®¯ã᪠¥âáï ¨á¯®«ì§®¢ ­¨¥
¢ëà ¦¥­¨©, ª®â®àë¥ ¢ëç¨á«ïîâáï ¢ ¯à®æ¥áᥠª®¬¯¨«ï樨. ‡­ ç¥­¨¥¬ ª®­áâ ­âë
¡ã¤¥â १ã«ìâ â ¢ëç¨á«¥­¨ï ¢ëà ¦¥­¨ï:
1*2*3/2+4 ¤ áâ §­ ç¥­¨¥ ª®­áâ ­âë 7.
‚ëç¨á«¥­¨ï ¯à®¢®¤ïâáï á«¥¢ -­ ¯à ¢® ¡¥§ ãç¥â  ¯à¨®à¨â¥â  ®¯¥à æ¨©.
‘â ­¤ àâ­ë¥ â¨¯ë ¤ ­­ëå
ˆ¬¥¥âáï è¥áâì áâ ­¤ àâ­ëå ⨯®¢ ¤ ­­ëå: byte, char, word, short, dword
¨ int. â ¡«¨æ¥ ¯à¨¢¥¤¥­ë à §¬¥à ¨ ¤¨ ¯ §®­ §­ ç¥­¨© ¤«ï ª ¦¤®£® ⨯ :
-------------------------------------------------------------------
’¨¯ | <20> §¬¥à | „¨ ¯ §®­ §­ ç¥­¨©
¯¥à¥¬¥­­®© | ¢ ¡ ©â å | (¤¥áïâ¨ç­.) | (hex)
-------------------------------------------------------------------
byte | 1 | 0...255 | 0...0xFF
char | 1 | -127...127 | 0x80...0x7F
word | 2 | 0...65535 | 0...0xFFFF
short | 2 | -32768...32767 | 0x8000...0x7FFF
dword | 4 | 0...4294967295 | 0...0xFFFFFFFF
int | 4 | -2147483648... | 0x80000000 ...
| | 2147483647 | 0x7FFFFFFF
-------------------------------------------------------------------
ƒ«®¡ «ì­ë¥ ¯¥à¥¬¥­­ë¥
Ž¡ê¥­¨¥ ¯¥à¥¬¥­­ëå ¨¬¥¥â ®¡ëç­ë© ¤«ï ᨭ⠪á¨á:
<⨯> <ᯨ᮪ ¨¤¥­â¨ä¨ª â®à®¢>;
‘¯¨á®ª ¨¤¥­â¨ä¨ª â®à®¢ á®á⮨⠨§ ®¤­®£® ¨«¨ ¡®«¥¥ ¨¤¥­â¨ä¨ª â®à®¢,
à §¤¥«¥­­ëå § ¯ïâ묨. ᯨ᪥ â ª¦¥ ¬®£ãâ ¯à¨áãâ᢮¢ âì ®¤­®¬¥à­ë¥ ¬ áᨢë,
®¡êï¢«ï¥¬ë¥ ¢ ¢¨¤¥:
<¨¤¥­â¨ä¨ª â®à>[<à §¬¥à­®áâì>].
<20>ਬ¥àë ®¡ê¥­¨© ¯¥à¥¬¥­­ëå:
dword i,j; // i ¨ j ⨯  dword
byte Tab='\t'; // ¯¥à¥¬¥­­ ï Tab ⨯  byte á ­ ç «ì­ë¬ §­ ç¥­¨¥¬
char string[]="This is a string\n";
int z,b[6]; // z ⨯  int ¨ ¬ áᨢ 楫ëå - b
‚ëà ¦¥­¨ï
‚ëà ¦¥­¨ï á®áâ®ïâ ¨§ «¥¢®© ¨ ¯à ¢®© ç á⥩, à §¤¥«¥­­ëå «¨¡® ®¯¥à æ¨¥©
¯à¨á¢ ¨¢ ­¨ï, «¨¡® ®¯¥à æ¨¥© áà ¢­¥­¨ï. ‹¥¢ ï ç áâì ¢ëà ¦¥­¨ï ¬®¦¥â ¡ëâì
«¨¡® ¯¥à¥¬¥­­®©, «¨¡® ॣ¨áâ஬. ¯à ¢®© ç á⨠¢ëà ¦¥­¨ï ¬®¦¥â ­ å®¤¨âìáï
¯à®¨§¢®«ì­®¥ ª®«¨ç¥á⢮ ¯¥à¥¬¥­­ëå, ä㭪権, ª®­áâ ­â, ᪮¡®ª ¨ §­ ª®¢ ®¯¥à æ¨©.
<EFBFBD>¨¦¥ ¯à¨¢®¤¨âáï â ¡«¨æ  ¢á¥å ¤®¯ãá⨬ëå ®¯¥à æ¨©:
-------------------------------------------------------------------------
Ž¯¥à æ¨ï | ‡­ ç¥­¨¥ | <20>ਬ¥à
-------------------------------------------------------------------------
= | ¯à¨á¢®¨âì ¨«¨ | edi = 33;
| ¯à®¢¥à¨âì à ¢¥­á⢮ | while(ch = 'a')
+ | á«®¦¨âì | eax = Count + 5;
- | ¢ëç¥áâì | Count = eax - edi;
* | 㬭®¦¨âì | x = y * 3;
/ | à §¤¥«¨âì | y = ecx / x;
% | ®áâ â®ª ¤¥«¥­¨ï | y = edi / 7;
& | «®£¨ç¥áª®¥ AND | a = B & c;
| | «®£¨ç¥áª®¥ OR | a = B | c;
^ | «®£¨ç¥áª®¥ XOR | a = B ^ c;
<< | ᤢ¨£ ¡¨â ¢«¥¢® | x = y << 5;
>> | ᤢ¨£ ¡¨â ¢¯à ¢® | x = y >> 6;
+= | 㢥«¨ç¨âì ­  | a += 6; // a = a + 6;
-= | 㬥­ìè¨âì ­  | a -= 5; // a = a - 5;
&= | ¯®¡¨â­ë© AND | a &= 0xF; // a = a & 0xF;
|= | ¯®¡¨â­ë© OR | a |= 0o77; // a = a | 0o77;
^= | ¯®¡¨â­ë© XOR | a ^= 0b1101; // a = a ^ 0b1101;
<<= | ᤢ¨£ ¡¨â ¢«¥¢® | a <<= 7; // a = a << 7;
>>= | ᤢ¨£ ¡¨â ¢¯à ¢® | a >>= 3; // a = a >> 3;
>< | ®¡¬¥­(swap) | x >< y; // temp=y; y=x; x=temp;
== | ¯à®¢¥à¨âì à ¢¥­á⢮ | if( x=='7' ) // ¤«ï â¥å, ª®¬ã â ª ¯à¨¢ëç­¥¥
> | ¡®«ìè¥ ç¥¬ | case( x > y )
< | ¬¥­ìè¥ ç¥¬ | if( a < 0 )
>= | ¡®«ìè¥ ¨«¨ à ¢­® | while(( b >= a ) & ( x >= ( y - 7 )))
<= | ¬¥­ìè¥ ¨«¨ à ¢­® | if( y <= ( a + b - 30 ))
!= ¨«¨ <>| ­¥ à ¢­® | case( a != b) ¨«¨ ¦¥ case( a <> b)
# |  ¤à¥á ¯¥à¥¬¥­­®© | esi = #Count; // esi= ¤à¥á ¯¥à¥¬¥­­®© Count
”㭪樨
Ž¡ê¥­¨¥ ä㭪権 ¨¬¥¥â ¢¨¤:
<⨯> <¨¤¥­â¨ä¨ª â®à>(<ᯨ᮪ ¯ à ¬¥â஢>)
‘¯¨á®ª ¯ à ¬¥â஢ § ¤ ¥â â¨¯ë ¨ ¨¬¥­  ä®à¬ «ì­ëå ¯ à ¬¥â஢, ¨á¯®«ì§ã¥¬ëå ¯à¨
¢ë§®¢¥ ä㭪樨. Š®¬¯¨«ïâ®à ­¥ ®áãé¥á⢫ï¥â ¯à®¢¥àªã ᮮ⢥âá⢨ï ᯨ᪠
ä®à¬ «ì­ëå ¯ à ¬¥â஢ ä㭪樨 ä ªâ¨ç¥áª¨¬, ¯®í⮬ã á«¥¤ã¥â ¢­¨¬ â¥«ì­® á«¥¤¨âì
§  ª®à४⭮áâìî ¢ë§®¢  ä㭪権.
’¨¯ ¢®§¢à é ¥¬®£® ¨§ ä㭪樨 §­ ç¥­¨ï ¬®¦­® ­¥ 㪠§ë¢ âì. í⮬ á«ãç ¥
¯® 㬮«ç ­¨î áç¨â ¥âáï, çâ® äã­ªæ¨ï ¢®§¢à é ¥â §­ ç¥­¨¥ ⨯  dword. ‡­ ç¥­¨¥
¯®¬¥é ¥âáï ¯à¨ ¢®§¢à â¥ ¨§ ä㭪樨 ¢ ॣ¨áâà eax ¤«ï ⨯®¢ dword ¨ int, ¢
ॣ¨áâà ax ¤«ï ⨯®¢ word ¨ short ¨ ¢ ॣ¨áâà al ¤«ï ⨯®¢ byte ¨ char.
ᯨ᪥ ¯ à ¬¥â஢ ¤«ï ª ¦¤®£® ¯ à ¬¥âà  ãª §ë¢ ¥âáï ¥£® ⨯. <20> à ¬¥âàë
®¤­®£® ⨯ , ¨¤ã騥 ¯®¤àï¤, à §¤¥«ïîâáï § ¯ïâ묨. ”®à¬ «ì­ë¥ ¯ à ¬¥âàë à §­®£®
⨯  ¢ ®¡ê¥­¨¨ ä㭪樨 à §¤¥«ïîâáï ᨬ¢®«®¬ ;. …᫨ ⨯ ¯ à ¬¥âà  ­¥ § ¤ ­,
â® áç¨â ¥âáï, çâ® ¯ à ¬¥âà ¨¬¥¥â ⨯ dword. <20>¥ § ¢¨á¨¬® ®â ⨯  ¯ à ¬¥âà  ¯à¨
¢ë§®¢¥ ä㭪樨 ¤«ï ª ¦¤®£® ¯ à ¬¥âà  ¢ë¤¥«ï¥âáï 4 ¡ ©â  (dword). <20>â® á¢ï§ ­®
á ⥬, çâ® ¢ Win32 á⥪ ¢á¥£¤  ¤®«¦¥­ ¨¬¥âì ¢ëà ¢­¨¢ ­¨¥ (alignment) ­  £à ­¨æã
¤¢®©­®£® á«®¢ .
<20>ਬ¥àë ®¡ê¥­¨ï ä㭪権 ¨ ¨å ¢ë§®¢®¢.
Ž¡ê¥­¨¥ <20>ਬ¥à ¢ë§®¢ 
char ToUpper(char ch) upChar = ToUpper('i');
MergeStrings(dword dest,str1,str2) MergeStrings(#str,"One","+Two");
¯®«ã稬 str="One+Two"
Convert(dword str; int number,base) Convert(#num, -567, 16);
<20>ਠ¢ë§®¢¥ ä㭪樨 ¯¥à¢ë© ¯ à ¬¥âà ¯®¬¥é ¥âáï ¢ á⥪ ¯®á«¥¤­¨¬. <20>ਬ¥à:
WriteFile(handle,"Hello World!\n",14,#dWriteFileCount,0);
¡ã¤¥â ॠ«¨§®¢ ­:
push 0
push #dWriteFileCount
push 14
push #"Hello World!"
push handle
call WriteFile
<20>ਠ¢®§¢à â¥ ¨§ ä㭪樨 á⥪ ®ç¨é ¥âáï ®â ¯ à ¬¥â஢ ª®¬ ­¤®©: ret number.
‚ᥠ®¡êï¢«ï¥¬ë¥ ¢ ¯à®£à ¬¬¥ ä㭪樨 ïîâáï ¤¨­ ¬¨ç¥áª¨¬¨. <20>â® §­ ç¨â,
çâ® ª®¤ ä㭪樨 ¢áâ ¢«ï¥âáï ¢ ¯à®£à ¬¬ã «¨èì ⮫쪮 ¢ á«ãç ¥ ®¡à é¥­¨ï ª ­¥©.
’® ¦¥ á ¬®¥ ®â­®á¨âáï ¨ ª «î¡ë¬ £«®¡ «ì­ë¬ ¯¥à¥¬¥­­ë¬ ¢ ¯à®£à ¬¬¥.
‘âàãªâãà­ë¥ ®¯¥à â®àë
<20>ਬ¥­¥­¨¥ áâàãªâãà­ëå ®¯¥à â®à®¢ ¢ ¯à®£à ¬¬¥ ¤¥« ¥â ¥¥ ¡®«¥¥ 㤮¡­®© ¤«ï
ç⥭¨ï ¨  ­ «¨§ . Šà®¬¥ ⮣®, ­ ¯¨á âì ­¥áª®«ìª® áâàãªâãà­ëå ®¯¥à â®à®¢ ¯à®é¥,
祬 ¯ãâ âìáï ¢ ¯®å®¦¨å ¨¬¥­ å ¡®«ì讣® ç¨á«  ¬¥â®ª ¨ ¬ãç¨âìáï, ¯à¨¤ã¬ë¢ ï
ã­¨ª «ì­®¥ ¨¬ï ¤«ï ª ¦¤®© ­®¢®© ¬¥âª¨. â® ¦¥ ¢à¥¬ï ­¥ § ¯à¥é ¥âáï ¨á¯®«ì§®¢ âì
¨ ¬¥âª¨ ¢ «î¡®¬ ¬¥á⥠¯à®£à ¬¬ë. •®à®è® ¯®áâ ¢«¥­­ ï ¬¥âª  ᯮᮡ­  §¤®à®¢®
®¡«¥£ç¨âì ­ ¯¨á ­¨¥ ¨  ­ «¨§ ¯à®£à ¬¬ë.
Ž¯¥à â®à if.
®¡é¥¬ ¢¨¤¥ ãá«®¢­ë© ®¯¥à â®à ¬®¦­® § ¯¨á âì â ª:
if(<ãá«®¢¨¥>)
<£à㯯  ®¯¥à â®à®¢1>
else
<£à㯯  ®¯¥à â®à®¢2>
€«£®à¨â¬ ¢ë¯®«­¥­¨ï ãá«®¢­®£® ®¯¥à â®à  á®á⮨⠢ á«¥¤ãî饬:
¯à®¢¥àï¥âáï <ãá«®¢¨¥>, ¨ ¥á«¨ ®­® ¨á⨭­®, â® ¢ë¯®«­ï¥âáï <£à㯯  ®¯¥à â®à®¢1>,
á«¥¤ãîé ï §  if, ¯®á«¥ 祣® ã¯à ¢«¥­¨¥ ¯¥à¥¤ ¥âáï §  ª®­¥æ ãá«®¢­®£® ®¯¥à â®à .
…᫨ ãá«®¢¨¥ «®¦­®, â® ã¯à ¢«¥­¨¥ ¯¥à¥¤ ¥âáï ­  <£à㯯㠮¯¥à â®à®¢2>, á«¥¤ãîéãî
§  else. <20>®à冷ª ¢ë¯®«­¥­¨ï ãá«®¢­®£® ®¯¥à â®à  ¢ á«ãç ¥ ®âáãâá⢨ï else
®ç¥¢¨¤¥­. ª ç¥á⢥ £àã¯¯ë ®¯¥à â®à®¢ ¬®¦¥â ¡ëâì «¨¡® ®¤¨­ ®¯¥à â®à, «¨¡® ¡«®ª
¨§ ­¥áª®«ìª¨å ®¯¥à â®à®¢ ¢ {} ᪮¡ª å. ‚®â ­¥áª®«ìª® ¯à¨¬¥à®¢:
if(edx<=2){
WriteStr("Equal or less two\n");
return();
}
else{
WriteStr("Greater than two\n");
return(0);
}
if((x<>0)&(y<>0))
return(x/y);
Ž¯¥à â®à cycle
Ž¯¥à â®à 横«  cycle ¨¬¥¥â ¢¨¤:
cycle(<áç¥â稪>) <£à㯯  ®¯¥à â®à®¢>
–¨ª« ¢ë¯®«­ï¥âáï ¤® â¥å ¯®à ¯®ª  §­ ç¥­¨¥ áç¥â稪  ­¥ ¡ã¤¥â à ¢­® ­ã«î.
<EFBFBD>஢¥àª  áç¥â稪  ­  à ¢¥­á⢮ ­ã«î ¨ ¥£® 㬥­ì襭¨¥ ­  ¥¤¨­¨æ㠯ந§¢®¤¨âáï
¢ ª®­æ¥ £àã¯¯ë ®¯¥à â®à®¢ 横« . „®¯ã᪠¥âáï ¢­ãâਠ横«  ¨á¯®«ì§®¢ âì ¨ ¬¥­ïâì
§­ ç¥­¨¥ áç¥â稪 . …᫨ áç¥â稪 ­¥ 㪠§ ­, ⮠横« ¡ã¤¥â ¡¥áª®­¥ç­ë¬. <20>ਬ¥à:
#import "kernel32.dll"
#import "user32.dll"
dword Count;
dword dWriteFileCount;
dword handle;
byte s[20]=0;
main(){
handle=GetStdHandle(-11);
Count=4;
cycle(Count){
if(Count=2)
Count--;
wsprintfA(#s,"Count=%d\n",Count); ESP+=12;
WriteFile(handle,#s,lstrlenA(#s),#dWriteFileCount,0);
}
}
<20>ਠ¢ë¯®«­¥­¨¨ ¡ã¤¥â ¢ë¢¥¤¥­®:
Count=4
Count=3
Count=1
Ž¯¥à â®à while
Ž¯¥à â®à 横«  while ¨¬¥¥â ¢¨¤:
while(<ãá«®¢¨¥>)
<£à㯯  ®¯¥à â®à®¢>
ƒà㯯  ®¯¥à â®à®¢ ¢ 横«¥ while ¢ë¯®«­ï¥âáï ¯®ª  <ãá«®¢¨¥> ®áâ ¥âáï
¨á⨭­ë¬. <20>ਬ¥à ¨§ ®¯¨á ­¨ï ®¯¥à â®à  cycle ¬®¦¥â ¡ëâì ॠ«¨§®¢ ­ á ¯®¬®éìî
while á«¥¤ãî騬 ®¡à §®¬:
Count=4;
while(Count){
if(Count=2)
Count--;
wsprintfA(#s,"Count=%d\n",Count); ESP+=12;
WriteFile(handle,#s,lstrlenA(#s),#dWriteFileCount,0);
Count--;
}
}
Ž¯¥à â®à do ... while
Ž¯¥à â®à 横«  do ... while ¨¬¥¥â ¢¨¤:
do
<£à㯯  ®¯¥à â®à®¢>
while(<ãá«®¢¨¥>)
ƒà㯯  ®¯¥à â®à®¢ ¢ 横«¥ do ... while ¢ë¯®«­ï¥âáï ¯®ª  <ãá«®¢¨¥> ®áâ ¥âáï
¨á⨭­ë¬. <20>ਬ¥à ¨§ ®¯¨á ­¨ï ®¯¥à â®à  cycle ¬®¦¥â ¡ëâì ॠ«¨§®¢ ­ á ¯®¬®éìî
do ... while á«¥¤ãî騬 ®¡à §®¬:
Count=4;
do{
if(Count=2)
Count--;
wsprintfA(#s,"Count=%d\n",Count); ESP+=12;
WriteFile(handle,#s,lstrlenA(#s),#dWriteFileCount,0);
Count--;
} while(Count)
}
Žá®¡¥­­®áâìî ®¯¥à â®à  do ... while ï¥âáï â®, çâ® <£à㯯  ®¯¥à â®à®¢>
¢ 横«¥ ¢á¥£¤  ¢ë¯®«­ï¥âáï ­¥ ¬¥­¥¥ ®¤­®£® à § .
Ž¯¥à â®à docase
Ž¯¥à â®à ¢¥â¢«¥­¨ï docase ¨¬¥¥â ¢¨¤:
docase
<£à㯯  ®¯¥à â®à®¢ 0>
case(<ãá«®¢¨¥1>)
<£à㯯  ®¯¥à â®à®¢ 1>
...
case(<ãá«®¢¨¥N>)
<£à㯯  ®¯¥à â®à®¢ N>
default
<£à㯯  ®¯¥à â®à®¢ N1>
Ž¯¥à â®à docase ¯®§¢®«ï¥â § ¬¥­¨âì ¢«®¦¥­­ë¥ £àã¯¯ë ¨§ if ... else if ...
else ... . Šà®¬¥ ⮣® ¤ «¥¥ ¡ã¤¥â ¯®ª § ­  ­  ¯à¨¬¥à¥ ã­¨¢¥àá «ì­®áâì í⮣®
®¯¥à â®à . <20>ਬ¥à ¨§ ®¯¨á ­¨ï ®¯¥à â®à  cycle ¬®¦¥â ¡ëâì ॠ«¨§®¢ ­ á ¯®¬®éìî
docase á«¥¤ãî騬 ®¡à §®¬:
Count=4;
docase{
if(Count=2)
Count--;
wsprintfA(#s,"Count=%d\n",Count); ESP+=12;
WriteFile(handle,#s,lstrlenA(#s),#dWriteFileCount,0);
Count--;
case(Count=0)
break;
default
continue;
}
}
Ž¯¥à â®àë continue ¨ break
<20>⨠®¯¥à â®àë ¨á¯®«ì§ãîâáï ¢­ãâਠ¢ëè¥ ®¯¨á ­­ëå ®¯¥à â®à®¢ 横«  cycle,
while, do...while ¨ ®¯¥à â®à¥ docase ¤«ï ¯¥à¥å®¤  ­  ­ ç «® 横«  ¨«¨ docase
¯® ®¯¥à â®àã continue ¨ ­  ¢ë室 §  ª®­¥æ ®¯¥à â®à  ¯® break. <20>ਬ¥à:
while(cond1){<--Ô
... |
if(cond2) |
continue; --+
... |
if(cond3) |
break; ---+ |
... | |
} ----------|-+
<----------+
Ž¯¥à â®à enum
<20> §­ ç¥­¨¥ ®¯¥à â®à  § ª«îç ¥âáï ¢ ᮧ¤ ­¨¨ £à㯯 ­ã¬¥à®¢ ­­ëå ª®­áâ ­â.
<EFBFBD>ਬ¥à:
enum { ab, ac=2, ad, ae=6}; ¯à¨ í⮬ ¡ã¤¥â: ab=0, ac=2, ad=3, ae=6.
Ž¯¥à â®à struc
‘«ã¦¨â ¤«ï ®¯¨á ­¨ï áâàãªâãà¨à®¢ ­­ëå ¤ ­­ëå,  ­ «®£¨ç­® .
<EFBFBD>®ª  ­¥ ॠ«¨§®¢ ­. Œ®¦­®, ¨á¯®«ì§ãï enum, ¡¥§ ¢áïª¨å ¯à®¡«¥¬ à ¡®â âì á
¤ ­­ë¬¨ «î¡®© áâàãªâãàë. <20>ਬ¥à:
„«ï ¨á¯®«ì§®¢ ­¨ï áâàãªâãàë:
struct localrec{
struct localrec *next;
char localid[IDLENGTH];
int localtok;
int localnumber;
};
ᮧ¤ ¤¨¬:
// ---- ‘âàãªâãà  localrec - ®¯¨á ­¨¥ «®ª «ì­®© ¯¥à¥¬¥­­®©
enum{ localnext=0, // “ª § â¥«ì ­  á«¥¤ãîéãî localrec
localid=4, // ˆ¬ï «®ª «ì­®© ¯¥à¥¬¥­­®©
localtok=localid+IDLENGTH, // ‡­ ç¥­¨¥ token
localtype=localtok+4, // ⨯ ¯¥à¥¬¥­­®©
localnumber=localtype+4, // <20>®§¨æ¨ï ¢ á⥪¥
local_size=localnumber+4}; // <20> §¬¥à áâàãªâãàë
ˆ ⥯¥àì ¢ ¯à®£à ¬¬¥ ¬®¦­® ¨á¯®«ì§®¢ âì ­ã¬¥à®¢ ­­ë¥ ª®­áâ ­âë ¤«ï ®¡à é¥­¨ï
ª í«¥¬¥­â ¬ áâàãªâãàë localrec:
// ---- „®¡ ¢¨âì «®ª «ì­ãî ¯¥à¥¬¥­­ãî ¢ ᯨ᮪
AddLocalvar(dword str,tk,ltype,num)
dword ptr,newptr;
{
newptr=LocalAlloc(0x40, local_size);
if(newptr==NULL){
preerror("Compiler out of memory for local symbol linked list");
ExitProcess(e_outofmemory);
}
if(locallist==NULL)
locallist = newptr;
else{
ptr = locallist; EBX=ptr;
docase{
EAX=[EBX+localnext];
case(EAX!=0){
EBX=EAX; continue;
}
}
[EBX+localnext]=newptr;
}
EBX=newptr; lstrcpyA(EBX+localid, str);
EBX=newptr; [EBX+localtok] = tk; [EBX+localtype] = ltype;
[EBX+localnumber] = num; [EBX+localnext] = NULL; localptr = EBX;
}
Œ¥âª¨
’ॡ®¢ ­¨ï ª ¨¬¥­ ¬ ¬¥â®ª ⥠¦¥, çâ® ¨ ª ¨¤¥­â¨ä¨ª â®à ¬. ˆáª«î祭¨¥¬
ïîâáï «®ª «ì­ë¥ ¬¥âª¨ - ®­¨ ¤®«¦­ë ­ ç¨­ âìáï á ᨬ¢®«  '@'. ‹®ª «ì­ë¥
¬¥âª¨ ¤®áâ㯭ë ⮫쪮 ¢ ¯à¥¤¥« å ⮩ ä㭪樨, ¢ ª®â®à®© ®­¨ ®¯à¥¤¥«¥­ë,  
£«®¡ «ì­ë¥ - ¯® ¢á¥© ¯à®£à ¬¬¥. <20>ਠᮧ¤ ­¨¨ ¨¬¥­ «®ª «ì­ëå ¬¥â®ª á«¥¤ã¥â
ãç¨â뢠âì, çâ® ª®¬¯¨«ïâ®à ¯à¨ ॠ«¨§ æ¨¨ áâàãªâãà­ëå ®¯¥à â®à®¢ £¥­¥à¨àã¥â
¬¥âª¨ ¢¨¤ : @l<ç¨á«®>. —â®¡ë ¨§¡¥¦ âì ª®««¨§¨©, á«¥¤ã¥â ¤«ï ᢮¨å ¬¥â®ª ­¥
¯à¨¬¥­ïâì â ª®£® ¢¨¤ . ‹î¡ ï ¬¥âª  § ¢¥àè ¥âáï ᨬ¢®«®¬ ¤¢®¥â®ç¨ï (:).
<EFBFBD>ਬ¥àë ¬¥â®ª:
NotUpperCase: // íâ® £«®¡ «ì­ ï ¬¥âª 
@NotUpperCase: //   íâ® «®ª «ì­ ï ¬¥âª 
ˆ­¤¥ªá æ¨ï ¬ áᨢ®¢
<20>«¥¬¥­âë ¬ áᨢ  «î¡®£® ⨯  ¨­¤¥ªá¨àãîâáï ¢ ¡ ©â®¢ëå ¥¤¨­¨æ å, ­¥§ ¢¨á¨¬®
®â ⨯  ¤ ­­ëå. <20>â® ‚‘…ƒ„€ á«¥¤ã¥â ¯®¬­¨âì ¯à¨ à ¡®â¥. ˆ­¤¥ªáë ¨¬¥îâ ¢¨¤,
¯à¨­ïâë© ¢  áᥬ¡«¥à¥ ¤«ï 386 CPU:
<¯¥à¥¬¥­­ ï>[<¡ §®¢ë© ॣ¨áâà>+<¬ áèâ ¡>*<¨­¤¥ªá­ë© ॣ¨áâà>+<¨­¤¥ªá>]
‚®â ­¥áª®«ìª® ¯à¨¬¥à®¢:
Str[7]; // ᥤ쬮© ¡ ©â ¨§ ¬ áᨢ  Str
IntArray[4*ebx]; // ebx í«¥¬¥­â ¨§ ¬ áᨢ  楫ëå - IntArray
ByteArray[esi+8*ecx+300];
‘¯¥æ¨ «ì­ë¥ ãá«®¢­ë¥ ¢ëà ¦¥­¨ï
ˆ¬¥¥âáï è¥áâì ᯥ樠«ì­ëå ãá«®¢­ëå ¢ëà ¦¥­¨©:
CarryFlag, NotCarryFlag, Overflow, NotOverflow, ZeroFlag, NotZeroFlag. Ž­¨
á«ã¦ â ¤«ï £¥­¥à æ¨¨ ª®¤  ¯à®¢¥àïî饣® á®áâ®ï­¨¥ ä« £®¢ CPU.
Š®¬¬¥­â à¨¨
Š®¬¬¥­â à¨¨ § ¤ îâáï  ­ «®£¨ç­® .
„¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®à 
‚ᥠ¤¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®à  ­ ç¨­ îâáï á ᨬ¢®«  '#'. ‘¯¨á®ª ¤¨à¥ªâ¨¢ ¨ ¨å
­ §­ ç¥­¨¥ ¯à¨¢®¤ïâáï ­¨¦¥:
#debug // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã ­  ­¥®¡å®¤¨¬®áâì £¥­¥à æ¨¨
// ®â« ¤®ç­®© ¨­ä®à¬ æ¨¨ ¤«ï ª®¬¯¨«¨à㥬®© ¯à®£à ¬¬ë
#define // ®¯à¥¤¥«¨âì ª®­áâ ­âã ¨«¨ ¨¤¥­â¨ä¨ª â®à. <20>ਬ¥à:
// #define MAXLINES 400
// #define less <
// #define SetTrue "eax=1"
// if(lines less MAXLINES) --> if(lines<400)
// SetTrue; --> eax=1;
#dll // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã ­  £¥­¥à æ¨î DLL-ä ©« . Ž¡ëç­® - exe.
#include // ¯®¤ª«î祭¨¥ ä ©«  á ¨á室­ë¬ ⥪á⮬. €­ «®£¨ç­® .
#import // ¨¬¯®àâ ä㭪権 ¨§ DLL-ä ©«  ¯® ¨¬¥­¨.
#importN // ¨¬¯®àâ ä㭪権 ¨§ DLL-ä ©«  ¯® ­®¬¥àã. <20>ਬ¥à ᬮâà¨â¥ ¢
// ®¯¨á ­¨¨ áâàãªâãà­ëå ®¯¥à â®à®¢ cycle, while ¨ â.¤.
#list // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã ­  £¥­¥à æ¨î ä ©«  á «¨á⨭£®¬ (.lst)
#map // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã ­  £¥­¥à æ¨î map-ä ©«  (.map)
‚áâ஥­­ë©  áᥬ¡«¥à
€áᥬ¡«¥à ¯®¤¤¥à¦¨¢ ¥â ¡®«ìèãî ç áâì ¨­áâàãªæ¨© ¨§ ­ ¡®à  386, 486 ¨ 586
¯à®æ¥áá®à®¢. Œ­¥¬®­¨ª¨  áᥬ¡«¥à  ¬®£ãâ ¡ëâì ¯®¬¥é¥­ë ¢­ãâਠ⥫  «î¡®© ä㭪樨
¡¥§ ª ª¨å-«¨¡® ®£à ­¨ç¥­¨©. <20>ਬ¥à:
// ‚뤥«¥­¨¥ á«®¢  ¢ Dest ¨§ áâப¨ ᨬ¢®«®¢ Source
dword GetWord(dword Source,Dest){
push esi; push edi; esi=Source; edi=Dest;
// ˆé¥¬ ¯¥à¢ë© ­¥¯ãá⮩ ᨬ¢®«
@up: lodsb; cmp al,' '; jz @up; // <20>஡¥«
cmp al,0; jz @down // Š®­¥æ áâப¨ Source
// Š®¯¨à㥬 á«®¢® ¢ Dest
@up1: stosb; cmp al,0; jz @down; // Š®­¥æ áâப¨ Source
lodsb; cmp al,' '; jnz @up1; // <20>¥ ¯à®¡¥«
al=0; jmp @up1 // Žâ¬¥â¨¬ ª®­¥æ á«®¢ 
@down:
// ‘«®¢® ¢ë¤¥«¥­® ¨ ᪮¯¨à®¢ ­® ¢ Dest
eax=esi-Source; eax--; // ‚ëç¨á«¨¬ ¤«¨­ã á«®¢ 
pop edi; pop esi // ‚®ááâ ­®¢¨¬ esi ¨ edi
}
‡ ª«î祭¨¥
<20>¥ ¢á¥ ¨§ ¢ë襮¯¨á ­­®£® ॠ«¨§®¢ ­®. <20>â® ®¡ãá«®¢«¥­® ¢ ¯¥à¢ãî ®ç¥à¥¤ì ⥬,
çâ® ¤ ­­ ï ¢¥àá¨ï ï¥âáï ¯à¥¤¢ à¨â¥«ì­®© ¨ ®á­®¢­®© ¥¥ 楫ìî ï¥âáï
¢ë¥­¨¥ ¨­â¥à¥á  ª®¬¯ìîâ¥à­®© ®¡é¥á⢥­­®á⨠ª â ª®¬ã ª®¬¯¨«ïâ®àã.
…᫨ ‚ë § ¨­â¥à¥á®¢ «¨áì í⨬ ¯à®¤ãªâ®¬ ¨«¨ ã ‚ á ¢®§­¨ª«¨ ª ª¨¥-«¨¡®
¢®¯à®áë, ¨¤¥¨ ¨«¨ ¯à¥¤«®¦¥­¨ï, â® ¯à®èã ® ­¨å á®®¡é¨âì ¬­¥ ¯®  ¤à¥áã:
halimovskiy@usa.net.
㢠¦¥­¨¥¬ €.• «¨¬®¢áª¨© E-mail: halimovskiy@usa.net