Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
ΠΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°: ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π΄Π»Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΈ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ — ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π² Π½Π°Π»ΠΈΡΠΈΠΈ Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. Π ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π Π°ΡΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π·Π°Π΄Π°Π½ΠΈΡ Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΠΡΠ±ΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΈ ΡΠ°Π±Π»ΠΈΡ ΠΠΈΡΡΠΈΠ½Π³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅Π»ΡΡ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. Π‘ΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊΠΎΠΌ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» (COM ΠΈΠ»ΠΈ EXE). ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π»ΡΡ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ.
Π’ΡΠ°Π½ΡΠ»ΡΡΠΎΡ — ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ (Π²Ρ ΠΎΠ΄Π½ΠΎΠΌ) ΡΠ·ΡΠΊΠ΅ Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΡ Π΅ΠΉ Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΌ (Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ) ΡΠ·ΡΠΊΠ΅.
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° ΡΠ°Π±ΠΎΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡ Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊ: ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠ΅ ΠΈΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ°ΠΌΠΎ ΡΠ»ΠΎΠ²ΠΎ «ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡ» ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ «ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊ».
Π’ΡΠ°Π½ΡΠ»ΡΡΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠ»ΠΎΠ²Π°ΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², Π²ΡΠ΄Π°ΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ ΡΠ΅ΠΊΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Ρ. Π΄.
Π―Π·ΡΠΊ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π²Ρ ΠΎΠ΄Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, Π° ΡΠ°ΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° — ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ·ΡΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅Π»Π΅Π²ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
Π’ΡΠ°Π½ΡΠ»ΡΡΠΎΡΡ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»ΡΡΡ:
β’ ΠΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠΉ. ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
β’ Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ (ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ-ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ). ΠΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΡΠ·ΡΠΊΠ° ΠΈ ΡΠ΅ΠΊΡΡ Π½Π° ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ.
β’ ΠΠ΄Π½ΠΎΠΏΡΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ. Π€ΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠΌΠΎΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
β’ ΠΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡ ΠΎΠ΄Π½ΠΎΠΉ. Π€ΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
β’ ΠΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΠΉ. ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° Π² ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅.
β’ Π’Π΅ΡΡΠΎΠ²ΡΠΉ. ΠΠ°Π±ΠΎΡ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ·ΡΠΊΠ° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , ΡΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°.
β’ ΠΠ±ΡΠ°ΡΠ½ΡΠΉ. ΠΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π²ΡΠ΄Π°ΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠΎΡΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΠ°ΠΏΠΎΠ²? Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΡΠΈΠ½ΡΠ΅Π·Π° (ΡΠΈΡ. 1).
ΠΠ° ΡΡΠ°ΠΏΠ΅ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅ΡΡΡ ΡΠ΅ΠΊΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ². Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΎΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ.
ΠΠ° ΡΡΠ°ΠΏΠ΅ ΡΠΈΠ½ΡΠ΅Π·Π° ΠΈΠ· Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°.
Π ΡΠΎΡΡΠ°Π²Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΠ°ΡΡΡ, ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½Π°Ρ Π·Π° Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΌΠ΅ΡΡΠ΅ Π΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ.
ΠΠ΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·. ΠΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΊΠ°Π½Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΡΠ°Π΅Ρ Π»ΠΈΡΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠΈΠΌΠ²ΠΎΠ»Ρ) Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΈ ΡΡΡΠΎΠΈΡ ΠΈΠ· Π½ΠΈΡ ΡΠ»ΠΎΠ²Π° (Π»Π΅ΠΊΡΠ΅ΠΌΡ) ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°. ΠΠ° Π²Ρ ΠΎΠ΄Π΅ ΡΠΊΠ°Π½Π΅ΡΠ° (Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ°) ΡΠ΅ΠΊΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΡ ΠΎΠ΄Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° ΡΡΠ°ΠΏ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ°.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π±ΠΎΡ? ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π½Π° ΡΡΠ°ΠΏΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°. ΠΠ΄Π΅ΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π ΠΈΡ. 1. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
Π‘Π΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·? ΡΡΠΎ ΡΠ°ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΠ΅ΠΊΡΡΠ° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°.
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°? Π½Π° ΡΡΠΎΠΉ ΡΠ°Π·Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΠΈΠ½ΡΠ΅Π·ΠΎΠΌ ΡΠ΅ΠΊΡΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ: ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ·ΡΠΊΠ°, ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ Ρ. ΠΏ. ΠΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π΅ΡΡ Π½Π΅ Π²Π΅Π΄ΡΡ ΠΊ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° Π½Π° Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π°? ΡΡΠΎ ΡΠ°Π·Π°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΈ ΡΠ΅ΠΊΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ΅Π»ΠΎΠΌ. Π€Π°Π·Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠΈΠ½ΡΠ΅Π·Π° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ. ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ? ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠΆΠ΅ ΠΏΠΎΡΠΎΠΆΠ΄ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π’Π°Π±Π»ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² — ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½ΡΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°Ρ , ΡΡΠ½ΠΊΡΠΈΡΡ ΠΈ Ρ. ΠΏ. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΎΡΡΠ°Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ: ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΡΠ°ΠΏ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΈ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ , Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΈΠ»ΠΈ ΡΠ°Π·ΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
Π ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ·ΡΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ·ΡΠΊΠΎΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° (Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, Π±Π»ΠΈΠ·ΠΊΠΈΠΌ ΠΊ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌΡ ΡΠ·ΡΠΊΡ), ΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ.
ΠΡΡΠ³ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ — ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π²ΠΎΠΎΠ±ΡΠ΅ Π±Π΅Π· ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠΈΠΊΠ» Π²ΡΠ±ΠΎΡΠΊΠΈ-ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π½Π° ΡΠ·ΡΠΊΠ°Ρ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π° Π½Π΅ Ρ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. Π’Π°ΠΊΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΡΠ·ΡΠΊ. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ. Π§ΠΈΡΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΄Π»Ρ ΡΠ·ΡΠΊΠΎΠ² Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΠΠ ΠΈΠ»ΠΈ ΠΠΈΡΠΏ). ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΡΠΊΡΠΈΠΏΡΠ°Ρ Π² UNIX ΠΈΠ»ΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ (.bat) Π² MS-DOS ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠΈΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°: ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π΄Π»Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΈ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ — ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π² Π½Π°Π»ΠΈΡΠΈΠΈ Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. Π ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΈΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ (ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΈ) Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ·Π½Π°ΡΡ ΠΊΠ°ΠΊ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ, ΡΠ°ΠΊ ΠΈ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎΠΌ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠ½ΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ ΠΈ ΡΠΈΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ Π΅Ρ Π½Π° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ·ΡΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ p-ΠΊΠΎΠ΄), Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΉ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ (ΡΠΎ Π΅ΡΡΡ ΡΠ΅ΡΡ ΠΈΠ΄ΡΡ ΠΎΠ± ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅ ΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠΎΠΌ). Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΌΠ΅ΡΠ°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠΌΠ΅ΡΠ°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ Perl. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠΎΡΠ΅ΡΠ°Π΅Ρ ΠΊΠ°ΠΊ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ), ΡΠ°ΠΊ ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ (Π΄Π»Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΡΡΠ΅Π±ΡΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ; Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ). Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΡΠΌΠ΅ΡΠ°Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» ΠΎΡΠΈΠ±ΠΎΠΊ (Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ , ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΡ ).
ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ² ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π³Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π½ΡΡ ΡΠ΅ΡΠ΅ΠΉ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°), ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ, Π²ΡΠ΄Π΅Π»ΠΈΠ»ΡΡ Π½ΠΎΠ²ΡΠΉ Π²ΠΈΠ΄ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ (ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ) ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, «Π½Π° Π»Π΅ΡΡ». Π£ΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΠ°ΡΡΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΊΡΡΠΈΡΡΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠΌ ΠΎΠ½ΠΈ ΡΡΠ°Π·Ρ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΠ°Π²Π½ΠΈΠΌΠΎΠΉ ΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΠΎΠ±ΡΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΌ ΠΎΡ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ, ΡΠ΅ΠΌ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΠΈΠ»ΠΈ ΡΠΈΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΌΠ΅ΡΠ΅ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ Java,.NET Framework, Perl, Python.
Π Π°ΡΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π·Π°Π΄Π°Π½ΠΈΡ
Π Π°ΡΡΡΡ Π·Π°Π΄Π°Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ΄ΡΡ ΠΏΠΎ ΡΠΎΡΠΌΡΠ»Π΅:
(1)
ΠΠ΄Π΅: NG — ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π΅ ΡΠΈΡΡΡ ΡΡΠ΅Π±Π½ΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΡΡΡΠ΄Π΅Π½ΡΠ°, NS — Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠ΄Π΅Π½ΡΠ° Π² ΡΠΏΠΈΡΠΊΠ΅ Π³ΡΡΠΏΠΏΡ, KV — ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π³ΡΡΠΏΠΏΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄.
Π’ΠΎΠ³Π΄Π°, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ:
Β· ((83+9) mod 12) = 8;
Β· ((83+9) mod 15) = 2;
Β· ((83+9) mod 10) = 2;
Β· ((83+9) mod 8) = 4;
Β· ((83+9) mod 6) = 2.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄: NOP, JG, ADD, ROR, DEC. Π’Π°ΠΊ ΠΆΠ΅ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ MOV, INT.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°
.286
datasegment
a1dw 1001h
a2 dw 100h
a3 dw 101h
c dw 4c00h
data ends
code segment
assume ds: data, cs: code
main:
mov ax, a1
add ax, 101h
dec a3
ror ax, 5h
jg @2
nop
@2:
mov ax, c
int 21h
code ends
end main
ΠΠ°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΈ Π»ΠΈΠ½ΠΊΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊΠ°ΠΌΠΈ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°
ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ
— r8, r16, r32 — ΠΎΠΏΠ΅ΡΠ°Π½Π΄ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π±Π°ΠΉΡ, ΡΠ»ΠΎΠ²ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ;
— m8, m16, m32 — ΠΎΠΏΠ΅ΡΠ°Π½Π΄ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π±Π°ΠΉΡ, ΡΠ»ΠΎΠ²ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ;
— i8, i16, i32 — Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π±Π°ΠΉΡ, ΡΠ»ΠΎΠ²ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ;
— a8, a16, a32 — ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ (ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅) Π² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π°;
ΠΡΠ±ΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΠΈ ΡΠ°Π±Π»ΠΈΡ
MOV:
ΠΠ΅ΡΠ΅ΡΡΠ»Π°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ ΡΠ»ΠΎΠ²ΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ ΠΈ ΠΏΠ°ΠΌΡΡΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡ ΠΈΠ»ΠΈ Π² ΠΏΠ°ΠΌΡΡΡ. ΠΠΎΠΌΠ°Π½Π΄Π° MOV Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ ΠΏΠ°ΠΌΡΡΠΈ (Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΡΠ»ΡΠΆΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° MOVS).
ADD:
DEC:
ROR:
JG:
NOP:
INT:
ΠΠΈΡΡΠΈΠ½Π³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls, ComCtrls, Menus, math;
type
Directive = record //Π·Π°ΠΏΠΈΡΡ — Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°
part1:string;
part2:string;
part3:string;
MashCode:string;
exist:boolean; //ΠΏΡΠΈΠ·Π½Π°ΠΊ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΠΎΠΏΠΈΡΠ°Π½Π° ΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡΡΡ
end;
Command = record //Π·Π°ΠΏΠΈΡΡ — ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ
mark:string;
oper:string;
arg1:string;
arg2:string;
MashCode:string;
ByteLen:string;
exist:boolean; //ΠΏΡΠΈΠ·Π½Π°ΠΊ ΡΠΎΠ³ΠΎ ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΠΏΠΈΡΠ°Π½ ΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡΡΡ
end;
Prog = record
isCodeSeg:boolean; //Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π°
isDataSeg:boolean; //Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ
end;
TForm1 = class (TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Label4: TLabel;
Code: TMemo;
marks: TStringGrid;
Title: TMemo;
CodeSeg: TMemo;
DataSeg: TMemo;
EndFile: TMemo;
MainMenu1: TMainMenu;
Program1: TMenuItem;
Exit1: TMenuItem;
exeAll: TButton;
CreateObjFile: TButton;
Varibles: TStringGrid;
ScrollBar1: TScrollBar;
DataSourceSeg: TMemo;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
markslinks: TStringGrid;
GroupBox1: TGroupBox;
ComBytePosMemo: TMemo;
MashCode: TMemo;
Label1: TLabel;
Label3: TLabel;
SaveMenu: TMenuItem;
ClearCodeButton: TButton;
Edit1: TEdit;
TranslAndSaveMenu: TMenuItem;
NewProgramButton: TButton;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
SaveDialog1: TSaveDialog;
procedure NewProgramButtonClick (Sender: TObject); //ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊ ΡΠ°Π±ΠΎΡΠ΅
procedure TranslAndSaveMenuClick (Sender: TObject);//ΠΠΎΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ
procedure ClearCodeButtonClick (Sender: TObject);//ΠΡΠΈΡΡΠΊΠ° ΠΊΠΎΠ΄Π°
procedure CreateObjFileClick (Sender: TObject);//ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
procedure exeAllClick (Sender: TObject);//Π’ΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΊΠΎΠ΄Π°
procedure Exit1Click (Sender: TObject);//ΠΠ°ΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
procedure FormCreate (Sender: TObject);
//ΠΡΠΎΠ²Π΅ΡΠΊΠΈ
function GerArgType (arg:string):string;//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°
function IsVar (arg:string):boolean;//ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
function isImm (arg:string):boolean; //ΡΠΈΡΠ»ΠΎ
function isData (str:string):boolean;//[si+n]
function isReg (arg:string):boolean; //ΡΠ΅Π³ΠΈΡΡΡ 16
//ΡΠ°ΡΡΡΠ΅Ρ ΠΌΠ½Π΅ΠΌΠΎΠΊΠΎΠ΄Π°
function insRegMul (mem:string; arg: string; koef: integer):string;
function insReg (mem:string; arg: string):string;
function InvertBytes (s:string):string;
function ImmToHex (imm:string;len:string):string;
function cnvData (dat:string):string;
function AddControlByte (s:string):string;
function HexByteToByte (s:string):byte;
function CharToByte (C:char):byte;
function NexStrToStr (nexstr:string):string;
function IntToHexStr (int:integer):string;
function AnalysisCommand (comstr:string):command;
function ComNext: string;
function ComRead: string;
function ComIs: string;
function DeleteSpace (str:string):string;
function DecompositeCommand (comstr:string):Command;
function ModifyMarkAdress: string;
procedure AddLinksInMarkers;
procedure MarkTableWrite (Mname, LBytepos, CBytepos, Strpos: string);
procedure MarksLinksTableWrite (Mname, LBytepos: string);
procedure ComExe;
function AnalysisDirective (DrcStr:string):directive;
function DecompositeDirective (DrcStr:string):directive;
procedure DataTableWrite (Varible:string; Len: string;Code:string);
function GetVarCodeByName (name:string):string;
//ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΊΡΡΡΠΊΠΎΠΉ
procedure SlideDown;
procedure SlideUp;
procedure ScrollBar1Change (Sender: TObject);
//ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅
procedure CodeDblClick (Sender: TObject);
procedure SaveMenuClick (Sender: TObject);
procedure WriteHexStr (ss:string);//Π·Π°ΠΏΠΈΡΡ ΡΡΡΠΎΠΊΠΈ Π² ΡΠ°ΠΉΠ»
//ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΈΠ· Ansi Π² hex
function StrToHexStr (str:string):string;
function StrDelSpaseHex (s:string):string;
private
{ Private declarations }
public
{ Public declarations }
end;
//ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
var
Form1: TForm1;
ThisProgram:Prog; //ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ΠΌ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ²)
Reg16,Reg8:arrayofstring; //Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² (Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΠΌΠ½Π΅ΠΌΠΎΠΊΠΎΠ΄ΠΎΠ²)
ComReadPos:integer; //cΡΠ΅ΡΡΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄
ComBytePos:integer; //cΡΠ΅ΡΡΠΈΠΊ Π±Π°ΠΉΡΠΎΠ²
DataBytes:integer; //Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ
ErrorControl:string; //Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ
VariableAdr:string; //Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΡΡΠ»ΠΎΠΊ
RegLen:string; //Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
VarLen:string; //Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
VarCode:string; //Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
FileSave:file of byte;//ΡΠ°ΠΉΠ» Ρ ΠΊΠΎΠ΄ΠΎΠΌ
FileLoad:textfile;//ΠΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ»
implementation
{$R *.dfm}
//Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΠΌΠ½Π΅ΠΌΠΎΠΊΠΎΠ΄Ρ Π½ΠΎΠΌΠ΅Ρ ΡeΠ³ΠΈΡΡΡΠ°*k, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅: ('A0' + 'cx' = 'A1')
function TForm1. insRegMul (mem:string; arg: string; koef: integer):string;
var pos: integer; intcode: integer;
begin
IsReg (arg);
pos:=0;
intcode:=ord (NexStrToStr (mem)[1]); //16-ΡΠΉ ΠΊΠΎΠ΄ — ΡΡΡΠΎΠΊΠ° (ΠΏΡΠΈΠΌΠ΅Ρ: 'A0') ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ
//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°:
if (RegLen='R16') then for pos:=0 to length (Reg16) do if arg=Reg16[pos] then break;
if (RegLen='R8') then for pos:=0 to length (Reg8) do if arg=Reg8[pos] then break;
intcode:=intcode+pos*koef; //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΊ ΠΌΠ½Π΅ΠΌΠΎΠΊΠΎΠ΄Ρ
mem:=IntToHex (intcode, 2); //ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² 16-ΡΠΉ ΠΊΠΎΠ΄ — ΡΡΡΠΎΠΊΡ
insRegMul:=mem;
end;
//Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΠΌΠ½Π΅ΠΌΠΎΠΊΠΎΠ΄Ρ Π½ΠΎΠΌΠ΅Ρ ΡeΠ³ΠΈΡΡΡΠ°, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅: ('A0' + 'cx' = 'A1')
function TForm1. insReg (mem:string; arg: string):string;
var pos: integer; intcode: integer;
begin
isReg (arg);
pos:=0;
intcode:=ord (NexStrToStr (mem)[1]); //16-ΡΠΉ ΠΊΠΎΠ΄ — ΡΡΡΠΎΠΊΠ° (ΠΏΡΠΈΠΌΠ΅Ρ: 'A0') ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ
//ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°:
if (RegLen='R16') then for pos:=0 to length (Reg16) do if arg=Reg16[pos] then break;
if (RegLen='R8') then for pos:=0 to length (Reg8) do if arg=Reg8[pos] then break;
edit1.Text:=edit1.Text+'$pos='+inttostr (pos);
intcode:=intcode+pos; //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΊ ΠΌΠ½Π΅ΠΌΠΎΠΊΠΎΠ΄Ρ
mem:=IntToHex (intcode, 2); //ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² 16-ΡΠΉ ΠΊΠΎΠ΄ — ΡΡΡΠΎΠΊΡ
insReg:=mem;
end;
function TForm1. StrToHexStr (str:string):string; //ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠ΅ΠΊΡΡΠ° Π² ΡΡΡΠΎΠΊΡ Π² ΠΊΠΎΠ΄ 16 Ρ/c
var pos: integer; hexstr: string;
begin
hexstr:='';
for pos:=1 to length (str) do hexstr:=hexstr+IntToHex (ord (str[pos]), 2);
StrToHexStr:=hexstr;
end;
procedure TForm1. SlideDown;
begin
Code.Perform (WM_VSCROLL, SB_LINEDOWN, 1);
MashCode.Perform (WM_VSCROLL, SB_LINEDOWN, 1);
ComBytePosMemo.Perform (WM_VSCROLL, SB_LINEDOWN, 1);
end;
procedure TForm1. SlideUp;
begin
Code.Perform (WM_VSCROLL, SB_LINEUP, 1);
MashCode.Perform (WM_VSCROLL, SB_LINEUP, 1);
ComBytePosMemo.Perform (WM_VSCROLL, SB_LINEUP, 1);
end;
procedure TForm1. TranslAndSaveMenuClick (Sender: TObject);
begin
ExeAll.Click; //ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
CreateObjFile.Click; //Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
SaveMenu.Click; //ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅
end;
functionTForm1.GetVarCodeByName (name:string):string; //ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²Π·ΡΡΡ ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
var row: integer; adrs: string;
begin
adrs:='';
for row:=1 to Varibles. RowCount-1 do if Varibles. Cells[0,row]=name then begin GetVarCodeByName:=Varibles.Cells[1,row]; VarLen:=Varibles.Cells[3,row];exit;end;
ErrorControl:='<οΏ½ΠΠ΅ΠΎΠ±ΡΡΠ². ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½.>';
end;
procedure TForm1. DataTableWrite (Varible:string; Len: string;Code:string); //Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
varrow:integer;
begin
//ComBytePos Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ — ΡΡΠ΅ΡΡΠΈΠΊ Π±Π°ΠΉΡΠΎΠ² Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΡ
Varibles.RowCount:=Varibles.RowCount+1;
row:=Varibles.RowCount-1;
Varibles.Cells[0,row]: =Varible;
Varibles.Cells[1,row]:=IntToHex (DataBytes, 4);
Varibles.Cells[2,row]:=Code;
if Len='db' then Begin
DataBytes:=DataBytes+1;
Varibles.Cells[3,row]: ='V8';
end;
if Len='dw' then Begin
DataBytes:=DataBytes+2;
Varibles.Cells[3,row]: ='V16';
end;
end;
function TForm1. DecompositeDirective (DrcStr:string):directive;
varpos:integer;
begin
//Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
DecompositeDirective.part1:='';
DecompositeDirective.part2:='';
DecompositeDirective.part3:='';
//ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ
DrcStr:=DrcStr+' ';
//1)ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ:
for pos:=1 to length (DrcStr) do if DrcStr[pos]=' ' then begin
DecompositeDirective.part1:=copy (DrcStr, 1, pos-1);
Delete (DrcStr, 1, pos);
Break;
end;
//2)ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ:
for pos:=1 to length (DrcStr) do if DrcStr[pos]=' ' then begin
DecompositeDirective.part2:=copy (DrcStr, 1, pos-1);
Delete (DrcStr, 1, pos);
Break;
end;
//3)ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ:
for pos:=1 to length (DrcStr) do if DrcStr[pos]=' ' then begin
DecompositeDirective.part3:=copy (DrcStr, 1, pos-1);
Delete (DrcStr, 1, pos);
Break;
end;
end;
function TForm1. AnalysisDirective (DrcStr:string):directive;
var drc: directive;
begin
drc:=DecompositeDirective (DrcStr);
with drc do BEGIN
exist:=false;
//dd, dw
if (part1<>'') and ((part2='dw')or (part2='db')) and isImm (part3) then begin
MashCode:=ImmToHex (part3,part2);
DataTableWrite (part1,part2,MashCode);
exist:=true;
end;
//dd, dw Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
if ((part1='dd')or (part1='dw')) and isImm (part2) then begin
MashCode:=ImmToHex (part2,part1);
DataTableWrite ('', part1, MashCode);
exist:=true;
end;
if (part1='masm') then exist:=true;
if (part1='.code') then exist:=true;
if (part1='.data') then exist:=true;
if (part1='.model') and (part2='small')then exist:=true;
if (part1='.stack') then exist:=true;
if (part1='.286') then exist:=true;
if (part1='end') then exist:=true;
if (part1='data') and (part2='segment') then exist:=true;
if (part1='data') and (part2='ends') then exist:=true;
if (part1='code') and (part2='segment') then exist:=true;
if (part1='code') and (part2='ends') then exist:=true;
if (part1='assume') then exist:=true;
if (part1='ends') then exist:=true;
if (part1='end') and (part2='main') then exist:=true;
END;
AnalysisDirective:=drc;
end;
procedure TForm1. ComExe; //ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
varcom:command; //ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ — ΠΊΠΎΠΌΠ°Π½Π΄Π°
drc:directive; //Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° Π·Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ — Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°
comstr:string; //ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅
pos:integer;
begin
//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ Π² Π±Π°ΠΉΡΠΎΠ²ΡΠΉ ΡΡΠ΅ΡΡΠΈΠΊ, ΠΊΠΎΠ΄ΠΎΠ²ΡΡ ΡΠ°ΡΡΡ ΠΈ ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ
MashCode.Lines.Add ('');
ComBytePosMemo.Lines.Add ('');
//ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΡΠΎΠΊΡ-ΠΏΡΡΡΠΎΡΡ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΡ — ΡΠΏΠ»ΠΎΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ:
//.Π΅ΡΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ ΡΡΡΠΎΠΊΠ°, ΡΠΎ Π²ΡΡ ΠΎΠ΄ Π±Π΅Π· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
comstr:=ComRead;
//Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° Π² ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΌ:
if length (comstr)>=1 then begin
pos:=1; while (comstr[pos]=' ')and (pos
if comstr[pos]=';' then exit;
end;
//Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ:
if comstr='' then exit;
ComBytePosMemo.Lines[ComReadPos]: =IntToHex (ComBytePos, 4);
//ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ — ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ²
com:=AnalysisCommand (comstr);
MashCode.Lines[ComReadPos]: =com.MashCode;
if com. ByteLen<>'' then ComBytePos:=ComBytePos + strtoint (com.ByteLen);
//ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ — Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²
drc:=AnalysisDirective (ComRead);
//MashData.Lines[ComReadPos]: =drc.MashCode;
//——————————————————————————————————————->
//Π²ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅:
ifcom.MashCode<>'' thencom. exist:=true; //Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½
if (notcom.exist) and (notdrc.exist) //Π΅ΡΠ»ΠΈ Π½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°, Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½Ρ ΡΠΎ:
then MashCode. Lines[ComReadPos]: ='<οΏ½ΠΠ΅ΠΈΠ·Π². ΠΊΠΎΠΌ.>';
//Π°Π½Π°Π»ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ :
if ErrorControl<>'' then MashCode. Lines[ComReadPos]: =ErrorControl;
ErrorControl:=''; //ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
//——————————————————————————————————————->
end;
procedure TForm1. MarksLinksTableWrite (Mname, LBytepos: string);
varrow:integer;
begin
//ΠΏΠΎΠΈΡΠΊ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΌΠ΅ΡΠΊΠΈ ΡΡΠ΅Π΄ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
row:=1; while (row<=markslinks.RowCount-1) do begin
if markslinks. Cells[0,row]=Mname then begin
//Π΅ΡΠ»ΠΈ ΠΏΠΎΠΈΡΠΊ ΡΡΠΏΠ΅ΡΠ΅Π½ — ΡΠΎ Π²ΡΠ²ΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ (ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΌΠ΅ΡΠΊΠΈ)
ErrorControl:='<οΏ½ΠΠ΅ΡΠ΅ΠΎΠΏΡ. ΠΌΠ΅ΡΠΊΠΈ>';
exit;
end;
inc (row);
end;
//Π΅ΡΠ»ΠΈ Π²Π½ΠΎΡΠΈΠΌΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ Π½Π΅Ρ — ΡΠΎ Π²Π½Π΅ΡΡΠΈ Π΅Ρ
markslinks.RowCount:=row+1; //row ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΊΠΎΠ½Π΅Ρ ΡΠ°Π±Π»ΠΈΡΡ
if Mname <>'' then markslinks. Cells[0,row]: =Mname;
if LBytepos<>'' then markslinks. Cells[1,row]: =LBytepos;
markslinks.FixedRows:=1; //Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°Π±Π»ΠΈΡΡ
end;
procedure TForm1. MarkTableWrite (Mname, LBytepos, CBytepos, Strpos: string);
var row: integer;
begin
//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΌΠ΅ΡΠΊΠΈ:
ifLBytepos<>'' thenbegin
//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΊΠ°ΠΌ ΡΡΡΠ»ΠΎΠΊ
row:=1; while (row<=marks.RowCount-1) do begin
if marks. Cells[0,row]=Mname then if LBytepos<>'' then
marks.Cells[1,row]: =LBytepos;
inc (row);
end;
end;
//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΊΡ
if CBytepos<>'' then begin
marks.RowCount:=marks.RowCount+1;
marks.FixedRows:=1;
row:=marks.RowCount-1;
if Mname <>'' then marks. Cells[0,row]: =Mname;
if CBytepos<>'' then marks. Cells[2,row]: =CBytepos;
if Strpos <>'' then marks. Cells[3,row]: =Strpos;
exit;
end;
end;
function TForm1. ModifyMarkAdress:string; //ΡΠ°ΡΡΠ΅Ρ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡ Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°
var row, l: integer;
begin
for row:=1 to marks. RowCount-1 do begin
if MashCode. Lines[strtoint (marks.Cells[3,row])]='E8' then l:=4
else l:=2;
if (marks.Cells[0,row]<>'')and (marks.Cells[2,row]<>'') then begin
if (strtoint (marks.Cells[1,row])
MashCode.Lines[strtoint (marks.Cells[3,row])]: =
MashCode.Lines[strtoint (marks.Cells[3,row])]+
InvertBytes (IntToHex (256-(strtoint (marks.Cells[2,row])-strtoint (marks.Cells[1,row])), l)); end
else
MashCode.Lines[strtoint (marks.Cells[3,row])]: =
MashCode.Lines[strtoint (marks.Cells[3,row])]+
InvertBytes (IntToHex (strtoint (marks.Cells[1,row])-strtoint (marks.Cells[2,row]), l));
end;
end;
procedure TForm1. AddLinksInMarkers; //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ»ΠΎΠΊ Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠΊ
var row: integer;
begin
row:=1; while row<=markslinks.RowCount do begin
MarkTableWrite (markslinks.Cells[0,row], markslinks. Cells[1,row],'','');
inc (row);
end;
end;
function TForm1. IntToHexStr (int:integer):string; //ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π² ΡΡΡΠΎΠΊΡ — 16-ΡΡ Π·Π°ΠΏΠΈΡΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°
var res: string;
begin
res:=IntToHex (int, 2);
while length (res)>2 do delete (res, 1,1);
IntToHexStr:=res;
end;
function TForm1. DecompositeCommand (comstr:string):Command;
var posi: integer; oper, mark, arg1, arg2:string;
begin
//ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
mark:='';
oper:='';
arg1:='';
arg2:='';
//Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΎΠ² «mark:movax, bx; comments» =ΠΌΠ΅ΡΠΊΠ° + ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ Π΄Π²ΡΠΌΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ + ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
// «movax, bx» =ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ Π΄Π²ΡΠΌΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ
// «incax» =ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠΌ
// «aam» =ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±Π΅Π· ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ²
//Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΌ
if length (comstr)>=1 then begin
posi:=1; while (comstr[posi]=' ')and (posi
if comstr[posi]=';' then comstr:='';
end;
//ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ-ΠΊΠΎΠΌΠ°Π½Π΄Ρ
comstr:=comstr+' ';
//Π·Π°ΠΌΠ΅Π½Π° ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ (ΡΠΈΠΌΠ²ΠΎΠ» ';') Π½Π° ΠΏΡΠΎΠ±Π΅Π»
posi:=pos (';', comstr); if posi>0 then comstr[posi]: =' ';
//1)ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΊΠΈ
for posi:=1 to length (comstr) do if comstr[posi]=':' then begin
mark:=copy (comstr, 1, posi-1);
Delete (comstr, 1, posi);
Break;
end;
//2)ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½Π΅ΠΌΠΎΠΊΠΎΠ΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
for posi:=1 to length (comstr) do if comstr[posi]=' ' then begin
oper:=copy (comstr, 1, posi-1);
Delete (comstr, 1, posi);
Break;
end;
//3)ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°
for posi:=1 to length (comstr) do if comstr[posi]=',' then begin
arg1:=copy (comstr, 1, posi-1);
Delete (comstr, 1, posi);
Break;
end;
//4)ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°
for posi:=1 to length (comstr) do if (comstr[posi]=' ') then begin
arg2:=copy (comstr, 1, posi-1);
Delete (comstr, 1, posi);
Break;
end;
//ΠΠ»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°: Π΅ΡΠ»ΠΈ Π²ΡΠΎΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ Π΅ΡΡΡ, Π° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π½Π΅Ρ ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ΄Π½ΠΎΠ°ΡΠ³ΡΠΌΠ΅Π½ΡΠ½Π°Ρ:
//.Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΠ· 2 Π² 1:
if (arg1='')and (arg2<>'') then begin
arg1:=arg2;
arg2:='';
end;
//ΠΠ°ΠΏΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ:
DecompositeCommand.mark:=mark;
DecompositeCommand.oper:=oper;
DecompositeCommand.arg1:=arg1;
DecompositeCommand.arg2:=arg2;
end;
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π²ΠΎΠΉΠ½ΡΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ²
//.ΠΏΠ΅ΡΠ΅Π΄ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ (Π·Π°ΠΏΡΡΠ°Ρ ΠΈ Ρ. Π΄.)
function TForm1. DeleteSpace (str:string):string;
var ps: integer;
begin
if str=' ' then str:='';
if str='' then exit;
ps:=1;
while ps <= length (str) do begin
if (str[ps]=#9) then begin delete (str, ps, 1); continue end;
inc (ps);
end;
//ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
while ((str[1]=' ')and (length (str)>1)) do delete (str, 1,1);
while ((str[length (str)]=' ')and (length (str)>1)) do delete (str, length (str), 1);
//ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ²:
ps:=1; while ps <= length (str)-1 do begin
if (str[ps]=' ') then while (str[ps+1]=' ') do begin delete (str, ps, 1); end;
inc (ps);
end;
//ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² ΡΡΠ΄ΠΎΠΌ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ — Π·Π°ΠΏΡΡΠΎΠΉ
ps:=Pos (',', str);
if ps>0 then begin
if str[ps+1]=' ' then delete (str, ps+1,1);
if str[ps-1]=' ' then delete (str, ps-1,1);
end;
DeleteSpace:=str;
end;
function TForm1. ComIs:string; //ΠΡΡΡ Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ»ΠΈ ΡΠΆΠ΅ ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°
begin
if (ComReadPos
else ComIs:='EOF';
end;
function TForm1. ComNext:string; //ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ»ΠΈ ΡΠ±ΡΠΎΡ:
begin
inc (ComReadPos);
end;
//Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΡΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°Ρ Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅
function TForm1. ComRead:string;
begin
//LowerCase — Π²ΡΠ΅ Π±ΡΠΊΠ²Ρ (ΠΎΡ A Π΄ΠΎ Z) ΡΡΡΠ°Π½Π°Π²Π». ΠΏΡΠΎΠΏΠΈΡΠ½ΡΠΌΠΈ
ComRead:=LowerCase (DeleteSpace (Code.Lines[ComReadPos])); //DeleteSpace — ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ²
end;
//ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Imm16 Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Π±Π°ΠΉΡΠΎΠ² Π² Imm16 ΠΈ ΡΠ±ΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° 'h'/'a'
function TForm1. ImmToHex (imm:string;len:string):string;
const HexChar: set of char=['0'.'9','A'.'F','a'.'f'];
var i, l, temp:integer;
c:char;
begin
if imm='' then exit;
l:=-1;
c:= imm[Length (imm)];
Delete (imm, Length (imm), 1);
if len ='dw' then l:=4;
if len ='db' then l:=2;
i:=1;
while i<=Length (imm) do
if imm[i] in HexChar then inc (i)
else Delete (imm, i,1);
if imm='' then exit;
While (imm[1]='0') and (length (imm)>1) do Delete (imm, 1,1);
temp:=0;
if c='b' then begin for i:=Length (imm) to 1 do
if imm[i]='1' then temp:=temp+ round (intpower (2,length (imm)-i));
imm:=IntToHex (temp, l);end;
If length (imm)>l then begin ErrorControl:='<οΏ½ΠΠ΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²>';exit; end;
while length (imm)
ImmToHex:=Uppercase (imm);
end;
//ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² 16 c/c, ΡΠ²Π»ΡΡΡΠ΅Π³ΠΎΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ si (Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² Π²ΠΈΠ΄Π° [si+N])
function TForm1. cnvData (dat:string):string;
begin
ifpos ('+', dat)>0 then //Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ. Π΅. si+N, Π³Π΄Π΅ N — Π²Π΅Π»ΠΈΡ. ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ
cnvData:=copy (dat, pos ('+', dat)+1,2) //ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ 2-Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΠΎΡΠ»Π΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° +, ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ ΡΡΠΎ ΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΠΈΡΠ»ΠΎ Π² 16 Ρ/c
elsecnvData:='*'; //ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ
end;
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ (ΠΏΡΠΈΠΌΠ΅Ρ movax, 0140h — 0140h = Imm16):
function TForm1. isImm (arg:string):boolean;
const hexset: set of char=['0'.'9','a'.'f'];
typeset: set of char=['b','h'];
var pos: integer;
begin
If Length (arg)<=1 then begin isImm:=false;exit;end;
isImm:=true;
if not (arg[length (arg)] in typeset) then begin isImm:=false;exit;end;
for pos:=1 to length (arg)-1 do if not (arg[pos] in hexset) then begin isImm:=false;exit;end;
//Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ:
for pos:=0 to length (Reg16)-1 do if (Reg16[pos]<>'') then if (arg=Reg16[pos]) then begin isImm:=false; break; end;
for pos:=0 to length (Reg8)-1 do if (Reg8[pos]<>'') then if (arg=Reg8[pos]) then begin isImm:=false; break; end;
end;
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ (ΠΏΡΠΈΠΌΠ΅Ρ movax, 0140h — 0140h = Imm16):
function TForm1. isReg (arg:string):boolean;
var pos: integer;
begin
isReg:=false; //ΡΠ±ΡΠ°ΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊ, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ΅Π³ΠΈΡΡΡ
RegLen:=''; //ΡΠ±ΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄Π»ΠΈΠ½Π΅ ΡΠ΅Π³ΠΈΡΡΡΠ°
//ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ — ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ:
for pos:=0 to length (Reg16)-1 do if (Reg16[pos]<>'') then
if (arg=Reg16[pos]) then begin isReg:=true; RegLen:='R16'; exit; end;
for pos:=0 to length (Reg8)-1 do if (Reg8[pos]<>'') then
if (arg=Reg8[pos]) then begin isReg:=true; RegLen:='R8'; exit; end;
end;
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΎΠ±Π»Π°ΡΡΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· si (movax,[si+4]):
function TForm1. isData (str:string):boolean;
begin
isData:=false;
if Pos ('[', str)>0 then if Pos (']', str)>0 then if Pos ('si', str)>0 then isData:=true;
end;
// Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ Ρ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΠΉ 1 Π±Π°ΠΉΡΡ Π² ΡΠΈΠΌΠ²ΠΎΠ»:
function TForm1. NexStrToStr (nexstr:string):string;
begin
if length (nexstr)=2 then NexStrToStr:=chr (strtoint ('$'+nexstr));
if length (nexstr)=4 then NexStrToStr:=chr (strtoint ('$'+copy (nexstr, 1,2)))+
chr (strtoint ('$'+copy (nexstr, 3,2)));
if length (nexstr)=6 then NexStrToStr:=chr (strtoint ('$'+copy (nexstr, 1,2)))+
chr (strtoint ('$'+copy (nexstr, 3,2)))+
chr (strtoint ('$'+copy (nexstr, 5,2)));
end;
procedure TForm1. NewProgramButtonClick (Sender: TObject);
begin
//ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π½Π° Π½Π°ΡΠ°Π»ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ComReadPos:=0;
//ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π² Π±Π°ΠΉΡΠ°Ρ Π½Π° Π½Π°ΡΠ°Π»ΠΎ
ComBytePos:=0;
//ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½ΡΡ
DataBytes:=0;
//ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅
marks.RowCount:=1; //ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠΏΡΠ°Π²ΠΎΠΊ
varibles.RowCount:=1; //ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
markslinks.RowCount:=1; //ΡΠ°Π±Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠΊ
//ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠΎΠ² — ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ²
VariableAdr:='';
ComBytePosMemo.Text:='';
MashCode.Text:='';
Title.Text:='';
CodeSeg.Text:='';
DataSeg.Text:='';
end;
function TForm1. IsVar (arg:string):boolean; //Π―Π²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
var i: integer;
begin
IsVar:=False;
for i:=1 to Form1.Varibles.RowCount do
if Varibles. Cells[0,i]=arg then begin
IsVar:=True;
VarCode:=Varibles.Cells[2,i];
VarLen:=Varibles.Cells[3,i];
Exit;
end;
end;
function TForm1. GerArgType (Arg:string):string;
begin
GerArgType:='';
if isReg (arg) then GerArgType:=RegLen;
if isVar (arg) then GerArgType:=VarLen;
if IsImm (arg) then GerArgType:='Imm';
if IsData (arg) then GerArgType:='Data'
end;
//ΠΠΎΠ·Π²ΡΠ°Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΌΠ½Π΅ΠΌΠΎΠΊΠΎΠ΄Π°, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄Π»ΠΈΠ½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
function TForm1. AnalysisCommand (comstr:string):command;
var com: command;
Arg1Type, Arg2Type: string;
begin
com:=DecompositeCommand (comstr);
//ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² — Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΎΠΏΠΎΠ·Π½Π°Π½Π° ΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ
//.ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Π½Π΅ΠΈΠ·Π². ΠΊΠΎΠΌΠ°Π½Π΄Π΅
com.MashCode:='';
com.ByteLen:='';
com.exist:=false; //ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡΠΈΡΠ°Π΅ΡΡΡ Π½Π΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½Π½ΠΎΠΉ
with com do BEGIN
Arg1Type:=GerArgType (arg1);
Arg2Type:=GerArgType (arg2);
oper:=Lowercase (oper);
arg1:=Lowercase (arg1);
arg2:=Lowercase (arg2);
if (oper='mov') then begin//————————————————————————MOV
//ΠΏΡΠ΅Π΄ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°
//ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
if (Arg1Type='R8') and (Arg2Type='R16') then begin ErrorControl:='<οΏ½ΠΠ΅cΠΎΠΎΡΠ². ΡΠΈΠΏΠΎΠ² Π°ΡΠ³.>'; exit; end;
if (Arg1Type='R16') and (Arg2Type='R8') then begin ErrorControl:='<οΏ½ΠΠ΅cΠΎΠΎΡΠ². ΡΠΈΠΏΠΎΠ² Π°ΡΠ³.>'; exit; end;
if (Arg1Type='V8') and (Arg2Type='R16') then begin ErrorControl:='<οΏ½ΠΠ΅cΠΎΠΎΡΠ². ΡΠΈΠΏΠΎΠ² Π°ΡΠ³.>'; exit; end;
if (Arg1Type='R16') and (Arg2Type='V8') then begin ErrorControl:='<οΏ½ΠΠ΅cΠΎΠΎΡΠ². ΡΠΈΠΏΠΎΠ² Π°ΡΠ³.>'; exit; end;
if (Arg1Type='V16') and (Arg2Type='R8') then begin ErrorControl:='<οΏ½ΠΠ΅cΠΎΠΎΡΠ². ΡΠΈΠΏΠΎΠ² Π°ΡΠ³.>'; exit; end;
if (Arg1Type='R8') and (Arg2Type='V16') then begin ErrorControl:='<οΏ½ΠΠ΅cΠΎΠΎΡΠ². ΡΠΈΠΏΠΎΠ² Π°ΡΠ³.>'; exit; end;
//ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²ΡΠ΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²
if (arg1='')or (arg2='') then begin ErrorControl:='<οΏ½ΠΠ΅ΡΠΊΠ°Π·. Π²ΡΠ΅ Π°ΡΠ³ΡΠΌ.>'; exit; end;
if (arg1='ds') then if (arg2='ax') then begin //mov ax-ds
MashCode:='8ED8';
ByteLen:='2'; end;
//reg to reg
if (Arg1Type='R16')and (Arg2Type='R16') then begin MashCode:='8B'+InsReg (InsRegMul ('c0', arg1,8), arg2); ByteLen:='2'; end;//mov R16-R16
if (Arg1Type= 'R8')and (Arg2Type= 'R8') then begin MashCode:='8A'+InsReg (InsRegMul ('c0', arg1,8), arg2); ByteLen:='2'; end; //mov R8-R8
//imm to reg
if (Arg1Type= 'R16')and (Arg2Type= 'Imm') then begin MashCode:=InsReg ('B8', arg1)+InvertBytes (ImmToHex (arg2,'dw')); ByteLen:='3'; end; //mov R16-Imm16
if (Arg1Type= 'R8')and (Arg2Type= 'Imm') then begin MashCode:=InsReg ('8A', arg1) +ImmToHex (arg2,'db'); ByteLen:='2'; end; //mov R8-Imm8
//var to reg
if (Arg1 = 'al')and (Arg2Type= 'V8') then begin MashCode:='A0'+InvertBytes (GetVarCodeByName (arg2));ByteLen:='3';VariableAdr:=VariableAdr+'C4'+IntToHex (combytepos+1,2)+'5401 ';end//mov al-var8
else if (Arg1Type= 'R8')and (Arg2Type= 'V8') then begin MashCode:='8A'+InsRegMul ('06', arg1,8)+InvertBytes (GetVarCodeByName (arg2));VariableAdr:=VariableAdr+'C4'+IntToHex (combytepos+2,2)+'5401 ';ByteLen:='4';end;//mov R8-var8
if (Arg1 = 'ax')and (Arg2Type='V16') then begin MashCode:='A1'+InvertBytes (GetVarCodeByName (arg2));ByteLen:='3';VariableAdr:=VariableAdr+'C4'+IntToHex (combytepos+1,2)+'5401 ';end//mov ax-var16
else if (Arg1Type='R16')and (Arg2Type='V16') then begin MashCode:='8B'+InsRegMul ('06', arg1,8)+InvertBytes (GetVarCodeByName (arg2));VariableAdr:=VariableAdr+'C4'+IntToHex (combytepos+2,2)+'5401 ';ByteLen:='4';end;//mov R16-var16
//reg to var
if (Arg2 = 'al')and (Arg1Type= 'V8') then begin MashCode:='A2'+InvertBytes (GetVarCodeByName (arg1));ByteLen:='3';VariableAdr:=VariableAdr+'C4'+IntToHex (combytepos+1,2)+'5401 ';end//mov var8-al
else if (Arg2Type= 'R8')and (Arg1Type= 'V8') then begin MashCode:='88'+InsRegMul ('06', arg2,8)+InvertBytes (GetVarCodeByName (arg1));VariableAdr:=VariableAdr+'C4'+IntToHex (combytepos+2,2)+'5401 ';ByteLen:='4';end;//mov var8-R8
if (Arg2 = 'ax')and (Arg1Type='V16') then begin MashCode:='A3'+InvertBytes (GetVarCodeByName (arg1));ByteLen:='3';VariableAdr:=VariableAdr+'C4'+IntToHex (combytepos+1,2)+'5401 ';end//mov ax-var16
else if (Arg2Type='R16')and (Arg1Type='V16') then begin MashCode:='89'+InsRegMul ('06', arg2,8)+InvertBytes (GetVarCodeByName (arg1));VariableAdr:=VariableAdr+'C4'+IntToHex (combytepos+2,2)+'5401 ';ByteLen:='4';end;//mov var16-R16
if (arg1='ax') then if (arg2='@data') or (arg2='data') then begin //mov ax-segname @Data
MashCode:='B8'+'0000';
ByteLen:='3';
//Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π³ΠΌΠ΅Π½Ρ 9Π‘05 Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½:
ThisProgram.isDataSeg:=True; end;
if isReg (arg1) then if isData (arg2) then begin //mov Reg — data [si+n]
if cnvData (arg2)<>'*' then begin MashCode:='8B'+InsRegMul ('44', arg1,8)+cnvData (arg2); ByteLen:='3'; end
else begin MashCode:='8B'+InsRegMul ('04', arg1,8); ByteLen:='2' end;
end;
//ΠΏΠΎΡΠ»Π΅ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°
if mashcode='' then ErrorControl:='<οΏ½ΠΠ΅ΠΈΠ·Π². Π°ΡΠ³ΡΠΌΠ΅Π½Ρ>';
end;//——————————————————————————————————-/MOV
//ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:——————————————————————————————->
//int
if (oper='int') then if arg1type='Imm' then begin
MashCode:='CD'+ImmToHex (arg1,'db');
ByteLen:='2';
end;
//nop
if (oper='nop') then begin MashCode:='90'; ByteLen:='1'; end;
// dec mark
if (oper='dec') then begin
MashCode:='FF'+'0E'+InvertBytes (GetVarCodeByName (arg1));
ByteLen:='5';
end;
//jmp mark
if (oper='jg') then begin
MarkTableWrite (arg1,'', inttostr (ComBytePos+2), inttostr (ComReadPos));
MashCode:='7F';
ByteLen:='2';
end;
//add R16 — imm16
if (oper='add') then begin
if (arg1='ax') and (arg2Type='Imm') then begin MashCode:='05'+InvertBytes (ImmToHex (arg2,'dw')); ByteLen:='3'; end
end;
//ror R16 — imm8
if (oper='ror') then begin
if (Arg1Type='R16') and (Arg2Type='Imm') then begin
MashCode:='C1'+InsReg ('C8', arg1)+ImmToHex (arg2,'db'); ByteLen:='3'; end;
end;
//mark: (ΠΌΠ΅ΡΡΠΎ, ΠΊΡΠ΄Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΏΠΎ ΠΌΠ΅ΡΠΊΠ΅)
if (mark<>'') then begin
MarksLinksTableWrite (mark, inttostr (ComBytePos));
exist:=true;
end;
END;
If Com. MashCode<>'' then Com. exist:=true;
AnalysisCommand:=com;
end;
procedure TForm1. Exit1Click (Sender: TObject);
begin
Application.Terminate; //Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
end;
procedure TForm1. FormCreate (Sender: TObject);
var pos: integer;
begin
//ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
//ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ
ThisProgram.isCodeSeg:=False;
ThisProgram.isDataSeg:=False;
//ΠΈΠΌΠ΅Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² 16ΡΠ°Π·Ρ:
SetLength (Reg16,20); //ΡΠΈΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
for pos := 0 to Length (Reg16)-1 do Reg16[pos]: ='';
Reg16[0]:='ax';
Reg16[1]:='cx';
Reg16[2]:='dx';
Reg16[3]:='bx';
Reg16[6]:='si';
Reg16[7]:='di';
//ΠΈΠΌΠ΅Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² 8ΡΠ°Π·Ρ:
SetLength (Reg8,8); //ΡΠΈΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
for pos := 0 to Length (Reg8)-1 do Reg8[pos]: ='';
Reg8[0]:='al';
Reg8[1]:='cl';
Reg8[2]:='dl';
Reg8[3]:='bl';
Reg8[4]:='ah';
Reg8[5]:='ch';
Reg8[6]:='dh';
Reg8[7]:='bh';
//ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π½Π° Π½Π°ΡΠ°Π»ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ComReadPos:=0;
//ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π² Π±Π°ΠΉΡΠ°Ρ Π½Π° Π½Π°ΡΠ°Π»ΠΎ
ComBytePos:=0;
//ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π΄Π°Π½ΡΡ
DataBytes:=0;
//ΡΠ°Π±Π»ΠΈΡΠ° ΠΌΠ΅ΡΠΎΠΊ
marks.RowCount:=1;
marks.Cells[0,0]: ='ΠΠΌΡ ΠΌΠ΅ΡΠΊΠΈ';
marks.Cells[1,0]: ='ΠΠ΅ΡΠΊΠ°';
marks.Cells[2,0]:='ΠΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΊΠΈ';
marks.Cells[3,0]: ='Π‘ΡΡΠΎΠΊΠ°';
//ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
varibles.RowCount:=1;
varibles.Cells[0,0]: ='ΠΠΌΡ';
varibles.Cells[1,0]:='ΠΠ΄ΡΠ΅Ρ';
varibles.Cells[2,0]:='ΠΠΎΠ΄';
varibles.Cells[3,0]:='ΠΠ»ΠΈΠ½Π°';
//ΡΠ°Π±Π»ΠΈΡΠ° ΡΡΡΠ»ΠΎΠΊ ΠΌΠ΅ΡΠΎΠΊ
markslinks.RowCount:=1;
markslinks.Cells[0,0]: ='ΠΠΌΡ';
markslinks.Cells[1,0]:='ΠΠ΅ΡΠΊΠ°';
ErrorControl:=''; //ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
end;
function TForm1. CharToByte (C:char):byte;
var cc: byte;
begin
cc:=0;
case c of
'0'.'9': cc:=strtoint (c);
'A':cc:=$A;
'B':cc:=$B;
'C':cc:=$C;
'D':cc:=$D;
'E':cc:=$E;
'F':cc:=$F;
end;
CharToByte:=cc;
end;
function TForm1. HexByteToByte (s:string):byte;
begin
HexByteToByte:=((CharToByte (s[1]) shl 4) and (240))or ((CharToByte (s[2])) and (15))
end;
procedure TForm1. WriteHexStr (ss:string);
var
bb:byte;
i:integer;
begin
i:=1;
while i<=Length (ss) do begin
bb:=HexByteToByte (copy (ss, i,2));
Write (FileSave, bb);
i:=i+2;
end;
end;
function TForm1. StrDelSpaseHex (s:string):string;
const HexSet: set of Char=['0'.'9','A'.'F'];
var ss: string;
i:integer;
begin
i:=1;
ss:=s;
while i<=length (ss) do
if not (Uppercase (ss[i])[1] in HexSet) then Delete (ss, i,1)
else inc (i);
StrDelSpaseHex:=ss;
end;
function Tform1. AddControlByte (s:string):string;
var sum, i: integer;
begin
i:=1;sum:=0;
s:=StrDelSpaseHex (s);
while i<=length (s) do begin
Sum:=Sum+HexByteToByte (copy (s, i,2));
i:=i+2;
end;
sum:=($ 100-sum mod $ 100)mod $ 100;
AddControlByte:=Form1.IntToHexStr (sum);
end;
function TForm1. InvertBytes (s:string):string;//Π‘ΠΌΠ΅ΡΡΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±Π°ΠΉΡΠΎΠ²
var i: integer;
ss:string;
begin
ss:='';
for i:=Length (s)div 2 downto 1 do
ss:=ss+copy (s, 2*i-1,2);
InvertBytes:=ss;
end;
procedure TForm1. CreateObjFileClick (Sender: TObject);
var s, s1, s2:string;
i:integer;
Strings:array[1.6]of string;
begin
//ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΊ Π·Π°ΠΏΠΈΡΡΠΌ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ (+2 +4 +8) — Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π΄Π»ΠΈΠ½Ρ ΡΠ»Π΅Π΄ Π·Π° Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΎΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ
//ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°
//1 ΡΡΡΠΎΡΠΊΠ°
s:=OpenDialog1.FileName;
for I:=length (S) downto 1 do if S[i]='' then begin Delete (s, 1, i);break;end;
s1:=InvertBytes (IntToHex (length (S)+2,4));
s2:=IntToHex (length (S), 2);
Strings[1]: ='80 '+s1+s2+StrToHexStr (S);
Strings[1]: =Strings[1]+AddControlByte (Strings[1]);
Strings[2]:='88 '+IntToHexStr (length ('Turbo Assembler Version 4.1')+4)+'0000 001C'+StrToHexStr ('Turbo Assembler Version 4.1');
Strings[2]: =Strings[2]+AddControlByte (Strings[2]);
Strings[3]:='88 '+IntToHexStr (length (S)+8)+'0040 E97A 74A5 4209 '+StrToHexStr (S);
Strings[3]: =Strings[3]+AddControlByte (Strings[3]);
Strings[4]:='98 07 00 60 '+IntToHexStr (DataBytes)+' 00 02 01 01 ';
Strings[4]: =Strings[4]+AddControlByte (Strings[4]);
Strings[5]:='98 07 00 60 '+IntToHexStr (ComBytePos)+' 00 03 01 01 ';
Strings[5]: =Strings[5]+AddControlByte (Strings[5]);
Title.Text:=Strings[1]+#13#10+
Strings[2]+#13#10+
Strings[3]+#13#10+
'88 03 00 40 E9 4C'+#13#10+
'96 02 00 00 68'+#13#10+
'88 03 00 40 A1 94'+#13#10+
'96 06 00 04 44 41 54 41 46'+#13#10+
Strings[4]+#13#10+
'96 06 00 04 43 4 °F 44 45 45'+#13#10+
Strings[5]+#13#10+
'88 04 00 40 A2 01 91';
//ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°
CodeSeg.Text:='A0 '+InvertBytes (IntToHex (ComBytePos+4,4))+'02 0000'+StrDelSpaseHex (MashCode.Text);
CodeSeg.Text:=CodeSeg.Text+AddControlByte (CodeSeg.Text);
//ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ
Strings[6]: ='';
for i:=1 to Varibles. RowCount-1 do
Strings[6]: =Strings[6]+InvertBytes (Varibles.Cells[2,i]);
DataSeg.Text:='A0 '+InvertBytes (IntToHex (DataBytes+4,4))+' 01 00 00 '+Strings[6];
DataSeg.Text:=DataSeg.Text+AddControlByte (DataSeg.Text);
EndFile.Text:='8A 0700 C100 0202 0000 AA';
DataSourceSeg.Text:='9C '+InvertBytes (IntToHex (Length (StrDelSpaseHex (VariableAdr))div 2+1,4))+' '+VariableAdr;
DataSourceSeg.Text:=DataSourceSeg.Text+AddControlByte (DataSourceSeg.Text);
end;
procedure TForm1. ClearCodeButtonClick (Sender: TObject); //ΠΎΡΠΈΡΡΠΊΠ° ΠΏΠΎΠ»Ρ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ³Ρ.
begin
Code.Clear;
DataSourceSeg.Clear;
EndFile.Clear;
end;
procedure TForm1. exeAllClick (Sender: TObject);
begin
NewProgramButtonClick (NewProgramButton);
while ComIs<>'EOF' do begin
ComExe;
ComNext;
end;
AddLinksInMarkers; //ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠ° Π²ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠΊ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠΊ Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠΏΡΠ°Π²ΠΎΠΊ
ModifyMarkAdress; //ΡΠ°ΡΡΠ΅Ρ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°
end;
procedure TForm1. CodeDblClick (Sender: TObject);
var
i:integer;
Str:String;
begin
i:=0;
If OpenDialog1. Execute then begin
AssignFile (FileLoad, OpenDialog1. FileName);
Reset (FileLoad);
Code.Clear;
Memo1.Clear;
while not eof (FileLoad) do
begin
inc (i);
ReadLn (FileLoad, Str);
Code.Lines.Add (Str);
Memo1.Lines.Add (IntToStr (I));
end;
CloseFile (FileLoad);
end;
ScrollBar1.Max:=Code.Lines.Count;
ScrollBar1.Position:= Code.Lines.Count;
ScrollBar1.Tag:=Code.Lines.Count;
end;
procedure TForm1. ScrollBar1Change (Sender: TObject);
var k: integer;
begin
k:=ScrollBar1.Position-ScrollBar1.Tag;
If K>0 then begin
Code.Perform (EM_SCROLL, SB_LINEDOWN, K);
ComBytePosMemo.Perform (EM_SCROLL, SB_LINEDOWN, K);
MashCode.Perform (EM_SCROLL, SB_LINEDOWN, K);
Memo1.Perform (EM_SCROLL, SB_LINEDOWN, K);
end
else begin
Code.Perform (EM_SCROLL, SB_LINEUp, K);
ComBytePosMemo.Perform (EM_SCROLL, SB_LINEUp, K);
MashCode.Perform (EM_SCROLL, SB_LINEUp, K);
Memo1.Perform (EM_SCROLL, SB_LINEUp, K);
end;
Scrollbar1.Tag:=Scrollbar1.Position;
end;
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΡΠΎΡ ΠΎΠ΄Π½ΡΠΌ. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π²Π΅ ΡΠ°Π±Π»ΠΈΡΡ:
1) Π’Π°Π±Π»ΠΈΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΠΎΡΡΠΎΡΡΠ°Ρ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ: ΠΈΠΌΡ, Π°Π΄ΡΠ΅Ρ, ΠΊΠΎΠ΄ ΠΈ Π΄Π»ΠΈΠ½Π°.
2) Π’Π°Π±Π»ΠΈΡΠ° ΠΌΠ΅ΡΠΎΠΊ (ΠΏΠΎΠΏΡΠ°Π²ΠΎΠΊ), ΡΠΎΡΡΠΎΡΡΠ°Ρ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ: ΠΈΠΌΡ ΠΌΠ΅ΡΠΊΠΈ, ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΊΠΈ, Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΊΠΈ, ΡΡΡΠΎΠΊΠ° Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΊΡ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
Π‘ΡΡΠΎΠΊΠ° ΡΠ°ΠΉΠ»Π° ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 3 ΠΏΠΎΠ»Ρ. ΠΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄-Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄-ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΡΡΠΎΠΊΡ-ΠΏΡΡΡΠΎΡΡ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΡ — ΡΠΏΠ»ΠΎΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ. ΠΡΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° ΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Data Table Write Π·Π°Π½ΠΎΡΠΈΠΌ Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π°Π΄ΡΠ΅Ρ, ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π΄Π»ΠΈΠ½Ρ. ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°-ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Analysis Command. ΠΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ ΠΌΠ΅ΡΠΊΠΎΠΉ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΠΌ Π΅Π΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π² ΡΠ°Π±Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠΊ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΠΌΡ ΠΌΠ΅ΡΠΊΠΈ, Π°Π΄ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΊΠΈ ΠΈ ΡΡΡΠΎΠΊΡ ΠΎΡΠΊΡΠ΄Π° Π²ΡΠ·ΡΠ²Π°Π»ΠΈ. ΠΡΠ»ΠΈ Π½Π°ΡΠ»ΠΈ ΠΌΠ΅ΡΠΊΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π΅Π΅ Π°Π΄ΡΠ΅Ρ Π² ΡΠ°Π±Π»ΠΈΡΡ. ΠΠΎΡΠ»Π΅ ΡΠ°Π·Π±ΠΎΡΠ° Π²ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΊΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊ ΡΡΠ°ΡΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄
Π ΠΈΡ. 2 ΠΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠΉΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° TASM
Π ΠΈΡ. 3 ΠΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠΉΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π Π°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
β’ 80 0Π 00 08 6B 6 °F 70 61 2E 61 73 6D 54 -Π·Π°ΠΏΠΈΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°;
β’ 88 1A 00 00 00 1C 43 6 °F 6D 70 69 6C 65 72 20 4B 6 °F 70 79 6C 6 °F 76 61 20 4E 2E 53 2E 75 — Π·Π°ΠΏΠΈΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠ°;
β’ 88 10 00 40 E9 34 67 C4 42 08 6B 6 °F 70 61 2E 61 73 6D 7CΠ²ΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΈΡΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°;
β’ 88 03 00 40 E9 4C 96 02 00 00 68 88 03 00 40 A1 94- ΡΡΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ;
β’ 96 06 00 04 44 41 54 41 46 -ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ (DATΠ);
β’ 98 07 00 60 08 00 02 01 01 F5 — ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ ;
β’ 96 06 00 04 43 4 °F 44 45 45- ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π° (CODE);
β’ 98 07 00 60 15 00 03 01 01 E7- ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π°;
β’ 88 04 00 40 A2 01 91 — ΠΏΡΠ΅Π΄ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ;
β’ A0 0C 00 01 00 00 01 10 00 01 01 01 00 4CF3- ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ ;
β’ A0 19 00 02 00 00 A1 00 00 05 01 01 FF 0E 04 00 C1 C8 05 7 °F 01 90 A1 06 00 CD 21 59 — ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π° (A10000 — mov ax, a1, 5 0101FF — add ax, 101h, 0E 04 00 — dec a3, C1 C8 05 — ror ax, 5h, 7 °F 01 — jg @2, 90-nop, A1 06 00 — mov ax, c, CD 21 — int 21h);
β’ 9C 0D 00 C4 01 54 01 C4 08 54 01 C4 11 54 01 F2- ΡΠ°Π±Π»ΠΈΡΠ° ΡΡΡΠ»ΠΎΠΊ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π°;
8A 0700 C100 0202 0000 AA — Π·Π°ΠΏΠΈΡΡ ΠΊΠΎΠ½ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.