02b76505a6
git-svn-id: svn://kolibrios.org@1846 a494cfbc-eb01-0410-851d-a64ba20cac60
530 lines
21 KiB
Plaintext
530 lines
21 KiB
Plaintext
"‘®¢¥àè¨â¥ ¢ë ¬ ááã ®âªàë⨩,
|
||
¨®£¤ ¥ ¦¥« ï ⮣®..."
|
||
<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
|