"‘®¢¥àè¨â¥ ¢ë ¬ ááã ®âªàë⨩, ¨®£¤ ¥ ¦¥« ï ⮣®..." ¥ ¯®¬î ¢â®à , ® ¯¥« €¤à¥© Œ¨à®®¢. ।¨á«®¢¨¥. ˆ¤¥ï ¯¨á âì ª®¬¯¨«ïâ®à ¤«ï Win32 த¨« áì ¯à¨ ¬®¥¬ ¯¥à¢®¬ § ª®¬á⢥ á ª®¬¯¨«ïâ®à®¬ Sphinx C-- ¨â¥à ‘¥««¨ª (Peter Cellik) ¢ 1996 £®¤ã, ® ॠ«¨§®¢ âì ¥¥ 㤠«®áì «¨èì ¥¤ ¢®, ª®£¤ ¯®ï¢¨« áì ¢®§¬®¦®áâì ç¥à¥§ ˆâ¥à¥â ©â¨ ¨áå®¤ë¥ â¥ªáâë ¤«ï C--, ¯®áª®«ìªã ç¨ âì á ã«ï ¦¥« ¨ï ¥ ¡ë«®. ˆâ ª, ª®à®âª® ® £« ¢®¬. Žá®¢®© ¯à¨æ¨¯ ¯®áâ஥¨ï ¯à¨«®¦¥¨© ¤«ï 32-à §à冷© á¨á⥬ë, ¯à¥¤« £ ¥¬ë© ¢ à §«¨çëå ª®¬¯¨«ïâ®à å, § ª«îç ¥âáï ¢ à §¤¥«¥¨¨ ª®¤ ¥áª®«ìª® ᥪ権: .text, .data, .idata, .reloc, .rsrc ¨ â.¤., ª®â®àë¥ áâà®ïâáï ¨§ á ¬¨å ¨á室ëå ⥪á⮢ ¨ à §«¨çëå ä ©«®¢ ®¯¨á ¨© ¨ à¥áãàᮢ áâ ¤¨¨ ᡮન ¯à®£à ¬¬®©-«¨ª®¢é¨ª®¬ (link). ® áã⨠¤¥« ®áâ « áì áâ à ï á奬 ¯®áâ஥¨ï: compiler + linker -> exe-file. Šà®¬¥ ⮣®, ¡®«ì让 ¡®à à §«¨çëå ¡¨¡«¨®â¥ª... ª®â®àë¥ ª ⮬㠦¥ áãé¥á⢥® ¬¥ïîâáï ®â ¢¥àᨨ ª ¢¥àᨨ, ç⮠ᮢᥬ ¥ à ¤ã¥â. ˆ ¥á«¨ ¢ë ¯¥à¥å®¤¨â¥ ®¢ãî, ¡®«¥¥ ¯à®¤¢¨ãâãî ¢¥àá¨î ª®¬¯¨«ïâ®à , â® ¥â ¨ª ª®© £ à ⨨, çâ® ¢ë ᬮ¦¥â¥ ¥¬ ¯¥à¥ª®¬¯¨«¨à®¢ âì ᢮¨ áâ àë¥ ¯à®£à ¬¬ë - ¯à¨¬¥à®¬ á«ã¦¨â DDK ®â MicroSoft. Sphinx C-- ¨§ ç «ì® ¡ë« § ¤ã¬ ¨ ॠ«¨§®¢ ¤«ï ᮧ¤ ¨ï ª®¬¯ ªâëå ¯® à §¬¥àã COM-ä ©«®¢ ¨ ¯®í⮬㠢¯®«¥ ¯®¤å®¤¨â ¤«ï £¥¥à 樨 32-à §àï¤ëå ¯à¨«®¦¥¨ï ¢ ¬®¤¥«¨ ¯«®áª®© (flat) ¯ ¬ïâ¨. ®¬¨¬® í⮣® ¡®«ì訬 ¯«îᮬ ï¥âáï ¨¤¥ï ®âªàë⮣® ª®¤ ¤«ï ¢á¥å ¢ë§ë¢ ¥¬ëå ¢ ¯à®£à ¬¬¥ ¡¨¡«¨®â¥çëå äãªæ¨©, ॠ«¨§®¢ ï ¯®á।á⢮¬ *.h-- ä ©«®¢. …é¥ ®¤ ¨¤¥ï ¨§ ª®¬¯¨«ïâ®à Sphinx C--, § á«ã¦¨¢ îé ï ¢¨¬ ¨ï, - íâ® ¤¨ ¬¨ç¥áª¨¥ ¯à®æ¥¤ãàë, â.¥. ¯à®æ¥¤ãàë, ª®â®àë¥ ¬®£ãâ ¡ëâì ¯®¬¥é¥ë ¢ ⥫® ª®¬¯¨«¨à㥬®© ¯à®£à ¬¬ë ⮫쪮 ⮣¤ , ª®£¤ ª ¨¬ ¥áâì ®¡à 饨¥. ’ ª¨¬ ®¡à §®¬, ¢ ¯à®æ¥áᥠ¯¨á ¨ï ¯à®£à ¬¬ë á ¨á¯®«ì§®¢ ¨¥¬ ¤¨ ¬¨ç¥áª¨å ¯à®æ¥¤ãà £ à â¨àã¥âáï ¢ª«î票¥ ¢ ⥫® ¯à®£à ¬¬ë ⮫쪮 ⮣® ª®¤ , ª®â®àë© ¤¥©áâ¢¨â¥«ì® ¥®¡å®¤¨¬. ‚ ¯à®æ¥áá¥ à ¡®âë ¯® ¯¥à¥¢®¤ã ª®¬¯¨«ïâ®à Sphinx C-- ¯« âä®à¬ã Win32 ¯à®¨§¢¥¤¥ë ¢¥áì¬ áãé¥áâ¢¥ë¥ ¨§¬¥¥¨ï ª ª ¢ á ¬®¬ ª®¬¯¨«ïâ®à¥, â ª ¨ ¢ ¨¤¥ïå, ª®â®àëå ® ॠ«¨§®¢ . Ÿ ¥ ¡ã¤ã §¤¥áì ¢ë¤¥«ïâì ¢á¥ ®â«¨ç¨ï áâ®ï饣® ª®¬¯¨«ïâ®à ®â ¥£® ¯à த¨â¥«ï ¯® ⮩ ¯à®á⮩ ¯à¨ç¨¥, çâ® â¥, ªâ® á ¨¬ § ª®¬, ¨å ᬮ£ãâ 㢨¤¥âì á ¬¨, ⥬, ªâ® ¥ ¨¬¥« ¤¥« á ‘--, ¥â ã¦¤ë ¢¨ª âì ¢ í⨠¤¥â «¨. Žâ¬¥çã, ®¤ ª®, çâ® ¯à¨æ¨¯ £¥¥à 樨 ª®¤ , ¨á¯®«ì§®¢ ¢è¨©áï ¢ ‘--, § ¬¥¥ ¯à¨æ¨¯, ¨á¯®«ì§ã¥¬ë© ¢ ¬ ªà® áᥬ¡«¥à¥ TMA ‘¢¥ Š«®§¥ (TMA macro assembler Sven Klose), á ¯à®¢¥¤¥¨¥¬ ¥£® ¤ ¯â 樨 ª 㦤 ¬ ‘--. ‚ १ã«ìâ ⥠¯®ï¢¨«áï ¤ ë© ª®¬¯¨«ïâ®à, 楫ìî ª®â®à®£® ï¥âáï § ¯®«¥¨¥ ¨è¨ ¬¥¦¤ã ï§ëª®¬ áᥬ¡«¥à ¨ ï§ëª®¬ ‘. Ž¯¨á ¨¥ ï§ëª . ˆ¤¥â¨ä¨ª â®àë. ˆ¤¥â¨ä¨ª â®àë ¤®«¦ë ç¨ âìáï á ¡ãª¢ë ¨«¨ § ª ¯®¤ç¥àª¨¢ ¨ï, ¥á«¨ ïîâáï £«®¡ «ì묨, ¨«¨ ¦¥ ¤®«¦ë ç¨ âìáï á ᨬ¢®« @, ¥á«¨ ®¨ «®ª «ìë¥. „ «¥¥ ¬®¦¥â ¨¤â¨ «î¡ ï ª®¬¡¨ æ¨ï æ¨äà, ¡ãª¢ ¨«¨ § ª®¢ ¯®¤ç¥àª¨¢ ¨ï ¤«¨®© ¥ ¡®«¥¥ 63 ᨬ¢®«®¢. ãª¢ë ¬®£ãâ ¡ëâì ª ª ¨§ « â¨áª®£®, â ª ¨ ¨§ 樮 «ì®£® «ä ¢¨â . ¥áª®«ìª® ¯à¨¬¥à®¢: GoHome _1234 ਬ¥àˆ¤¥â¨ä¨ª â®à @LocalLabel2 ‚ᥠ¨¤¥â¨ä¨ª â®àë, ªà®¬¥ § १¥à¢¨à®¢ ëå, ïîâáï çã¢á⢨⥫ì묨 ª ॣ¨áâàã, â.¥. ¨¤¥â¨ä¨ª â®àë: ToDo ¨ Todo ª®¬¯¨«ïâ®à ¢®á¯à¨¬¥â ª ª à §ë¥. ‡ १¥à¢¨à®¢ ë¥ ¨¤¥â¨ä¨ª â®àë ¨¦¥ ¯à¨¢®¤¨âáï ᯨ᮪ § १¥à¢¨à®¢ ëå ¨¤¥â¨ä¨ª â®à®¢ ï§ëª , ª®â®àë¥ ¥ ¬®£ãâ ¡ëâì ¨á¯®«ì§®¢ ë ¯à¨ á®§¤ ¨¨ ¯à®£à ¬¬ë ¨ ç¥, ª ª íâ® ®¯à¥¤¥«¥® ¢ ï§ëª¥: 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 § 票¥¬. ‹î¡ë¥ ᨬ¢®«ë ¯®á«¥ '\' ¯à®áâ® ¯à¨¨¬ îâáï ª®¬¯¨«ïâ®à®¬, â ª¨¬ ®¡à §®¬ ®¤¨®çãî ª ¢ëçªã ¬®¦® 㪠§ âì ª ª '\''. ‘âப®¢ë¥ ª®áâ âë § ¤ îâáï ¯ã⥬ § ª«îç¥¨ï ¨å ¢ ¤¢®©ë¥ ª ¢ë窨 ("). ‚ãâਠáâப®¢®© ª®áâ âë ¤®¯ã᪠¥âáï 㪠§ ¨¥ ᯥæᨬ¢®«®¢ ¢ ®¤¨®çëå ª ¢ëçª å. ਬ¥àë áâப®¢ëå ª®áâ â: "ਬ¥à áâப®¢®© ª®áâ âë\n" "Need '\"'word'\"' in data declaration" -> Need "word" in data declaration ਠ®¯à¥¤¥«¥¨¨ ç¨á«®¢ëå ¨ ᨬ¢®«ìëå ª®áâ â ¤®¯ã᪠¥âáï ¨á¯®«ì§®¢ ¨¥ ¢ëà ¦¥¨©, ª®â®àë¥ ¢ëç¨á«ïîâáï ¢ ¯à®æ¥áᥠª®¬¯¨«ï樨. ‡ 票¥¬ ª®áâ âë ¡ã¤¥â १ã«ìâ â ¢ëç¨á«¥¨ï ¢ëà ¦¥¨ï: 1*2*3/2+4 ¤ áâ § 票¥ ª®áâ âë 7. ‚ëç¨á«¥¨ï ¯à®¢®¤ïâáï á«¥¢ - ¯à ¢® ¡¥§ ãç¥â ¯à¨®à¨â¥â ®¯¥à 権. ‘â ¤ àâë¥ â¨¯ë ¤ ëå ˆ¬¥¥âáï è¥áâì áâ ¤ àâëå ⨯®¢ ¤ ëå: byte, char, word, short, dword ¨ int. ‚ â ¡«¨æ¥ ¯à¨¢¥¤¥ë à §¬¥à ¨ ¤¨ ¯ §® § 票© ¤«ï ª ¦¤®£® ⨯ : ------------------------------------------------------------------- ’¨¯ | §¬¥à | „¨ ¯ §® § 票© ¯¥à¥¬¥®© | ¢ ¡ ©â å | (¤¥áïâ¨ç.) | (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 ------------------------------------------------------------------- ƒ«®¡ «ìë¥ ¯¥à¥¬¥ë¥ Ž¡ê¥¨¥ ¯¥à¥¬¥ëå ¨¬¥¥â ®¡ëçë© ¤«ï ‘ á¨â ªá¨á: <⨯> <ᯨ᮪ ¨¤¥â¨ä¨ª â®à®¢>; ‘¯¨á®ª ¨¤¥â¨ä¨ª â®à®¢ á®á⮨⠨§ ®¤®£® ¨«¨ ¡®«¥¥ ¨¤¥â¨ä¨ª â®à®¢, à §¤¥«¥ëå § ¯ïâ묨. ‚ ᯨ᪥ â ª¦¥ ¬®£ãâ ¯à¨áãâ᢮¢ âì ®¤®¬¥àë¥ ¬ áᨢë, ®¡êï¢«ï¥¬ë¥ ¢ ¢¨¤¥: <¨¤¥â¨ä¨ª â®à>[<à §¬¥à®áâì>]. ਬ¥àë ®¡ê¥¨© ¯¥à¥¬¥ëå: 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 ‚ëà ¦¥¨ï ‚ëà ¦¥¨ï á®áâ®ïâ ¨§ «¥¢®© ¨ ¯à ¢®© ç á⥩, à §¤¥«¥ëå «¨¡® ®¯¥à 樥© ¯à¨á¢ ¨¢ ¨ï, «¨¡® ®¯¥à 樥© áà ¢¥¨ï. ‹¥¢ ï ç áâì ¢ëà ¦¥¨ï ¬®¦¥â ¡ëâì «¨¡® ¯¥à¥¬¥®©, «¨¡® ॣ¨áâ஬. ‚ ¯à ¢®© ç á⨠¢ëà ¦¥¨ï ¬®¦¥â 室¨âìáï ¯à®¨§¢®«ì®¥ ª®«¨ç¥á⢮ ¯¥à¥¬¥ëå, äãªæ¨©, ª®áâ â, ᪮¡®ª ¨ § ª®¢ ®¯¥à 権. ¨¦¥ ¯à¨¢®¤¨âáï â ¡«¨æ ¢á¥å ¤®¯ãá⨬ëå ®¯¥à 権: ------------------------------------------------------------------------- Ž¯¥à æ¨ï | ‡ 票¥ | ਬ¥à ------------------------------------------------------------------------- = | ¯à¨á¢®¨âì ¨«¨ | 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. ‚ ᯨ᪥ ¯ à ¬¥â஢ ¤«ï ª ¦¤®£® ¯ à ¬¥âà 㪠§ë¢ ¥âáï ¥£® ⨯. à ¬¥âàë ®¤®£® ⨯ , ¨¤ã騥 ¯®¤àï¤, à §¤¥«ïîâáï § ¯ïâ묨. ”®à¬ «ìë¥ ¯ à ¬¥âàë à §®£® ⨯ ¢ ®¡ê¥¨¨ äãªæ¨¨ à §¤¥«ïîâáï ᨬ¢®«®¬ ;. …᫨ ⨯ ¯ à ¬¥âà ¥ § ¤ , â® áç¨â ¥âáï, çâ® ¯ à ¬¥âà ¨¬¥¥â ⨯ dword. ¥ § ¢¨á¨¬® ®â ⨯ ¯ à ¬¥âà ¯à¨ ¢ë§®¢¥ äãªæ¨¨ ¤«ï ª ¦¤®£® ¯ à ¬¥âà ¢ë¤¥«ï¥âáï 4 ¡ ©â (dword). â® á¢ï§ ® á ⥬, çâ® ¢ Win32 á⥪ ¢á¥£¤ ¤®«¦¥ ¨¬¥âì ¢ëà ¢¨¢ ¨¥ (alignment) £à ¨æã ¤¢®©®£® á«®¢ . ਬ¥àë ®¡ê¥¨ï äãªæ¨© ¨ ¨å ¢ë§®¢®¢. Ž¡ê¥¨¥ ਬ¥à ¢ë§®¢ 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); ਠ¢ë§®¢¥ äãªæ¨¨ ¯¥à¢ë© ¯ à ¬¥âà ¯®¬¥é ¥âáï ¢ á⥪ ¯®á«¥¤¨¬. ਬ¥à: WriteFile(handle,"Hello World!\n",14,#dWriteFileCount,0); ¡ã¤¥â ॠ«¨§®¢ : push 0 push #dWriteFileCount push 14 push #"Hello World!" push handle call WriteFile ਠ¢®§¢à ⥠¨§ äãªæ¨¨ á⥪ ®ç¨é ¥âáï ®â ¯ à ¬¥â஢ ª®¬ ¤®©: ret number. ‚ᥠ®¡êï¢«ï¥¬ë¥ ¢ ¯à®£à ¬¬¥ äãªæ¨¨ ïîâáï ¤¨ ¬¨ç¥áª¨¬¨. â® § ç¨â, çâ® ª®¤ äãªæ¨¨ ¢áâ ¢«ï¥âáï ¢ ¯à®£à ¬¬ã «¨èì ⮫쪮 ¢ á«ãç ¥ ®¡à é¥¨ï ª ¥©. ’® ¦¥ á ¬®¥ ®â®á¨âáï ¨ ª «î¡ë¬ £«®¡ «ìë¬ ¯¥à¥¬¥ë¬ ¢ ¯à®£à ¬¬¥. ‘âàãªâãàë¥ ®¯¥à â®àë ਬ¥¥¨¥ áâàãªâãàëå ®¯¥à â®à®¢ ¢ ¯à®£à ¬¬¥ ¤¥« ¥â ¥¥ ¡®«¥¥ 㤮¡®© ¤«ï çâ¥¨ï ¨ «¨§ . Šà®¬¥ ⮣®, ¯¨á âì ¥áª®«ìª® áâàãªâãàëå ®¯¥à â®à®¢ ¯à®é¥, 祬 ¯ãâ âìáï ¢ ¯®å®¦¨å ¨¬¥ å ¡®«ì讣® ç¨á« ¬¥â®ª ¨ ¬ãç¨âìáï, ¯à¨¤ã¬ë¢ ï 㨪 «ì®¥ ¨¬ï ¤«ï ª ¦¤®© ®¢®© ¬¥âª¨. ‚ â® ¦¥ ¢à¥¬ï ¥ § ¯à¥é ¥âáï ¨á¯®«ì§®¢ âì ¨ ¬¥âª¨ ¢ «î¡®¬ ¬¥á⥠¯à®£à ¬¬ë. •®à®è® ¯®áâ ¢«¥ ï ¬¥âª ᯮᮡ §¤®à®¢® ®¡«¥£ç¨âì ¯¨á ¨¥ ¨ «¨§ ¯à®£à ¬¬ë. Ž¯¥à â®à if. ‚ ®¡é¥¬ ¢¨¤¥ ãá«®¢ë© ®¯¥à â®à ¬®¦® § ¯¨á âì â ª: if(<ãá«®¢¨¥>) <£à㯯 ®¯¥à â®à®¢1> else <£à㯯 ®¯¥à â®à®¢2> €«£®à¨â¬ ¢ë¯®«¥¨ï ãá«®¢®£® ®¯¥à â®à á®á⮨⠢ á«¥¤ãî饬: ¯à®¢¥àï¥âáï <ãá«®¢¨¥>, ¨ ¥á«¨ ®® ¨á⨮, â® ¢ë¯®«ï¥âáï <£à㯯 ®¯¥à â®à®¢1>, á«¥¤ãîé ï § if, ¯®á«¥ 祣® ã¯à ¢«¥¨¥ ¯¥à¥¤ ¥âáï § ª®¥æ ãá«®¢®£® ®¯¥à â®à . …᫨ ãá«®¢¨¥ «®¦®, â® ã¯à ¢«¥¨¥ ¯¥à¥¤ ¥âáï <£à㯯㠮¯¥à â®à®¢2>, á«¥¤ãîéãî § else. ®à冷ª ¢ë¯®«¥¨ï ãá«®¢®£® ®¯¥à â®à ¢ á«ãç ¥ ®âáãâá⢨ï 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(<áç¥â稪>) <£à㯯 ®¯¥à â®à®¢> –¨ª« ¢ë¯®«ï¥âáï ¤® â¥å ¯®à ¯®ª § 票¥ áç¥â稪 ¥ ¡ã¤¥â à ¢® ã«î. ஢¥àª áç¥â稪 à ¢¥á⢮ ã«î ¨ ¥£® 㬥ì襨¥ ¥¤¨¨æ㠯ந§¢®¤¨âáï ¢ ª®æ¥ £àã¯¯ë ®¯¥à â®à®¢ 横« . „®¯ã᪠¥âáï ¢ãâਠ横« ¨á¯®«ì§®¢ âì ¨ ¬¥ïâì § 票¥ áç¥â稪 . …᫨ áç¥â稪 ¥ 㪠§ , ⮠横« ¡ã¤¥â ¡¥áª®¥çë¬. ਬ¥à: #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); } } ਠ¢ë¯®«¥¨¨ ¡ã¤¥â ¢ë¢¥¤¥®: Count=4 Count=3 Count=1 Ž¯¥à â®à while Ž¯¥à â®à 横« while ¨¬¥¥â ¢¨¤: while(<ãá«®¢¨¥>) <£à㯯 ®¯¥à â®à®¢> ƒà㯯 ®¯¥à â®à®¢ ¢ 横«¥ while ¢ë¯®«ï¥âáï ¯®ª <ãá«®¢¨¥> ®áâ ¥âáï ¨áâ¨ë¬. ਬ¥à ¨§ ®¯¨á ¨ï ®¯¥à â®à 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 ¢ë¯®«ï¥âáï ¯®ª <ãá«®¢¨¥> ®áâ ¥âáï ¨áâ¨ë¬. ਬ¥à ¨§ ®¯¨á ¨ï ®¯¥à â®à 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 ... . Šà®¬¥ ⮣® ¤ «¥¥ ¡ã¤¥â ¯®ª § ¯à¨¬¥à¥ 㨢¥àá «ì®áâì í⮣® ®¯¥à â®à . ਬ¥à ¨§ ®¯¨á ¨ï ®¯¥à â®à 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 ⨠®¯¥à â®àë ¨á¯®«ì§ãîâáï ¢ãâਠ¢ëè¥ ®¯¨á ëå ®¯¥à â®à®¢ 横« cycle, while, do...while ¨ ®¯¥à â®à¥ docase ¤«ï ¯¥à¥å®¤ ç «® 横« ¨«¨ docase ¯® ®¯¥à â®àã continue ¨ ¢ë室 § ª®¥æ ®¯¥à â®à ¯® break. ਬ¥à: while(cond1){<--Ô ... | if(cond2) | continue; --+ ... | if(cond3) | break; ---+ | ... | | } ----------|-+ <----------+ Ž¯¥à â®à enum § 票¥ ®¯¥à â®à § ª«îç ¥âáï ¢ ᮧ¤ ¨¨ £à㯯 㬥஢ ëå ª®áâ â. ਬ¥à: enum { ab, ac=2, ad, ae=6}; ¯à¨ í⮬ ¡ã¤¥â: ab=0, ac=2, ad=3, ae=6. Ž¯¥à â®à struc ‘«ã¦¨â ¤«ï ®¯¨á ¨ï áâàãªâãà¨à®¢ ëå ¤ ëå, «®£¨ç® ‘. ®ª ¥ ॠ«¨§®¢ . Œ®¦®, ¨á¯®«ì§ãï enum, ¡¥§ ¢áïª¨å ¯à®¡«¥¬ à ¡®â âì á ¤ 묨 «î¡®© áâàãªâãàë. ਬ¥à: „«ï ¨á¯®«ì§®¢ ¨ï áâàãªâãàë: 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, // ®§¨æ¨ï ¢ á⥪¥ local_size=localnumber+4}; // §¬¥à áâàãªâãàë ˆ ⥯¥àì ¢ ¯à®£à ¬¬¥ ¬®¦® ¨á¯®«ì§®¢ âì 㬥஢ ë¥ ª®áâ âë ¤«ï ®¡à é¥¨ï ª í«¥¬¥â ¬ áâàãªâãàë 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; } Œ¥âª¨ ’ॡ®¢ ¨ï ª ¨¬¥ ¬ ¬¥â®ª ⥠¦¥, çâ® ¨ ª ¨¤¥â¨ä¨ª â®à ¬. ˆáª«î票¥¬ ïîâáï «®ª «ìë¥ ¬¥âª¨ - ®¨ ¤®«¦ë ç¨ âìáï á ᨬ¢®« '@'. ‹®ª «ìë¥ ¬¥âª¨ ¤®áâã¯ë ⮫쪮 ¢ ¯à¥¤¥« å ⮩ äãªæ¨¨, ¢ ª®â®à®© ®¨ ®¯à¥¤¥«¥ë, £«®¡ «ìë¥ - ¯® ¢á¥© ¯à®£à ¬¬¥. ਠᮧ¤ ¨¨ ¨¬¥ «®ª «ìëå ¬¥â®ª á«¥¤ã¥â ãç¨âë¢ âì, çâ® ª®¬¯¨«ïâ®à ¯à¨ ॠ«¨§ 樨 áâàãªâãàëå ®¯¥à â®à®¢ £¥¥à¨àã¥â ¬¥âª¨ ¢¨¤ : @l<ç¨á«®>. —â®¡ë ¨§¡¥¦ âì ª®««¨§¨©, á«¥¤ã¥â ¤«ï ᢮¨å ¬¥â®ª ¥ ¯à¨¬¥ïâì â ª®£® ¢¨¤ . ‹î¡ ï ¬¥âª § ¢¥àè ¥âáï ᨬ¢®«®¬ ¤¢®¥â®ç¨ï (:). ਬ¥àë ¬¥â®ª: NotUpperCase: // íâ® £«®¡ «ì ï ¬¥âª @NotUpperCase: // íâ® «®ª «ì ï ¬¥âª ˆ¤¥ªá æ¨ï ¬ áᨢ®¢ «¥¬¥âë ¬ áᨢ «î¡®£® ⨯ ¨¤¥ªá¨àãîâáï ¢ ¡ ©â®¢ëå ¥¤¨¨æ å, ¥§ ¢¨á¨¬® ®â ⨯ ¤ ëå. â® ‚‘…ƒ„€ á«¥¤ã¥â ¯®¬¨âì ¯à¨ à ¡®â¥. ˆ¤¥ªáë ¨¬¥îâ ¢¨¤, ¯à¨ïâë© ¢ áᥬ¡«¥à¥ ¤«ï 386 CPU: <¯¥à¥¬¥ ï>[<¡ §®¢ë© ॣ¨áâà>+<¬ áèâ ¡>*<¨¤¥ªáë© à¥£¨áâà>+<¨¤¥ªá>] ‚®â ¥áª®«ìª® ¯à¨¬¥à®¢: Str[7]; // ᥤ쬮© ¡ ©â ¨§ ¬ áᨢ Str IntArray[4*ebx]; // ebx í«¥¬¥â ¨§ ¬ áᨢ 楫ëå - IntArray ByteArray[esi+8*ecx+300]; ‘¯¥æ¨ «ìë¥ ãá«®¢ë¥ ¢ëà ¦¥¨ï ˆ¬¥¥âáï è¥áâì á¯¥æ¨ «ìëå ãá«®¢ëå ¢ëà ¦¥¨©: CarryFlag, NotCarryFlag, Overflow, NotOverflow, ZeroFlag, NotZeroFlag. Ž¨ á«ã¦ â ¤«ï £¥¥à 樨 ª®¤ ¯à®¢¥àïî饣® á®áâ®ï¨¥ ä« £®¢ CPU. Š®¬¬¥â ਨ Š®¬¬¥â ਨ § ¤ îâáï «®£¨ç® ‘. „¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®à ‚ᥠ¤¨à¥ªâ¨¢ë ª®¬¯¨«ïâ®à ç¨ îâáï á ᨬ¢®« '#'. ‘¯¨á®ª ¤¨à¥ªâ¨¢ ¨ ¨å § 票¥ ¯à¨¢®¤ïâáï ¨¦¥: #debug // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã ¥®¡å®¤¨¬®áâì £¥¥à 樨 // ®â« ¤®ç®© ¨ä®à¬ 樨 ¤«ï ª®¬¯¨«¨à㥬®© ¯à®£à ¬¬ë #define // ®¯à¥¤¥«¨âì ª®áâ âã ¨«¨ ¨¤¥â¨ä¨ª â®à. ਬ¥à: // #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-ä ©« ¯® ®¬¥àã. ਬ¥à ᬮâà¨â¥ ¢ // ®¯¨á ¨¨ áâàãªâãàëå ®¯¥à â®à®¢ cycle, while ¨ â.¤. #list // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã £¥¥à æ¨î ä ©« á «¨á⨣®¬ (.lst) #map // 㪠§ë¢ ¥â ª®¬¯¨«ïâ®àã £¥¥à æ¨î map-ä ©« (.map) ‚áâà®¥ë© áᥬ¡«¥à €áᥬ¡«¥à ¯®¤¤¥à¦¨¢ ¥â ¡®«ìèãî ç áâì ¨áâàãªæ¨© ¨§ ¡®à 386, 486 ¨ 586 ¯à®æ¥áá®à®¢. Œ¥¬®¨ª¨ áᥬ¡«¥à ¬®£ãâ ¡ëâì ¯®¬¥é¥ë ¢ãâਠ⥫ «î¡®© äãªæ¨¨ ¡¥§ ª ª¨å-«¨¡® ®£à ¨ç¥¨©. ਬ¥à: // ‚뤥«¥¨¥ á«®¢ ¢ Dest ¨§ áâப¨ ᨬ¢®«®¢ Source dword GetWord(dword Source,Dest){ push esi; push edi; esi=Source; edi=Dest; // ˆé¥¬ ¯¥à¢ë© ¥¯ãá⮩ ᨬ¢®« @up: lodsb; cmp al,' '; jz @up; // ஡¥« cmp al,0; jz @down // Š®¥æ áâப¨ Source // Š®¯¨à㥬 á«®¢® ¢ Dest @up1: stosb; cmp al,0; jz @down; // Š®¥æ áâப¨ Source lodsb; cmp al,' '; jnz @up1; // ¥ ¯à®¡¥« al=0; jmp @up1 // Žâ¬¥â¨¬ ª®¥æ á«®¢ @down: // ‘«®¢® ¢ë¤¥«¥® ¨ ᪮¯¨à®¢ ® ¢ Dest eax=esi-Source; eax--; // ‚ëç¨á«¨¬ ¤«¨ã á«®¢ pop edi; pop esi // ‚®ááâ ®¢¨¬ esi ¨ edi } ‡ ª«î票¥ ¥ ¢á¥ ¨§ ¢ë襮¯¨á ®£® ॠ«¨§®¢ ®. â® ®¡ãá«®¢«¥® ¢ ¯¥à¢ãî ®ç¥à¥¤ì ⥬, çâ® ¤ ï ¢¥àá¨ï ï¥âáï ¯à¥¤¢ à¨â¥«ì®© ¨ ®á®¢®© ¥¥ 楫ìî ï¥âáï ¢ë¥¨¥ ¨â¥à¥á ª®¬¯ìîâ¥à®© ®¡é¥á⢥®á⨠ª â ª®¬ã ª®¬¯¨«ïâ®àã. …᫨ ‚ë § ¨â¥à¥á®¢ «¨áì í⨬ ¯à®¤ãªâ®¬ ¨«¨ ã ‚ á ¢®§¨ª«¨ ª ª¨¥-«¨¡® ¢®¯à®áë, ¨¤¥¨ ¨«¨ ¯à¥¤«®¦¥¨ï, â® ¯à®èã ® ¨å á®®¡é¨âì ¬¥ ¯® ¤à¥áã: halimovskiy@usa.net. ‘ 㢠¦¥¨¥¬ €.• «¨¬®¢áª¨© E-mail: halimovskiy@usa.net