JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΡΡΠ°Π½ΡΠ»ΠΈΡΡΡΡΠΈΠΉ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ, Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ x86. ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π±ΡΠ» Π½Π°ΠΏΠΈΡΠ°Π½ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π±Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ΅ΠΌΠ΅ΡΡΡΠ΅ (ΠΠ€Π’Π Π€Π ΠΠ’)
ΠΠ»Π°Π²Π½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ JIT (Just-in-time) ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ - Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ, ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ»Π°Π²Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΡΡΠΎ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌ ΠΏΡΠ½ΠΊΡΠΎΠΌ ΡΠ°Π±ΠΎΡΡ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΠ°ΡΠΊΠΈΠΌΠΈ Π² ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ, Π±ΡΠ΄Π΅ΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ, r86.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ r86.
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ r86 ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ΄Π΅Π»Π΅Π½Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³ΡΡΠΏΠΏ:
- ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ: ΡΡΠ° Π³ΡΡΠΏΠΏΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ - ADD, SUB, MUL, DIV, ΡΠ°ΠΊ ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π²ΡΡΠΈΡΠ»ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΡΠΈΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ - SIN, COS, TG, LN, ASIN, ATG, POW - ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ - MR, MRE, LS, LSE, EQ, NEQ.
- ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ - Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΡΠΉ 'jump' - JMP, ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ 'jump'Ρ - JA, JAE, JB, JBE, JE, JNE, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ CALL, Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ RET ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° HLT.
- ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ - PUSH ΠΈ POP
- ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π° IN ΠΈ OUT
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ:
- 16 ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π² ΡΠ΅Π±Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ (float)
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΏΠ°ΠΌΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° 1024 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ°Ρ ΠΈΠ· ΡΠ΅Π±Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΠΏΠ° float
- Π‘ΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ ΡΡΠ΅ΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉΡΡ Π΄Π»Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΈ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ Π½Π° PUSH ΠΈ POP ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ , Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ r86 - Π²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ΡΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΎ ΡΡΠ΅ΠΊΠ°. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΉΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°.
ADD, SUB, MUL ΠΈ DIV ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ - ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅, ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ Π΅ΡΠ»ΠΈ Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΠΊΡΠΈΠΈ Π² ΡΡΠ΅ΠΊΠ΅ Π»Π΅ΠΆΠ°Π»ΠΎ Π΄Π²Π° ΡΠΈΡΠ»Π° - Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΡΠΎ ΠΏΠΎΡΠ»Π΅ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ - ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
ΠΠΎΠΌΠ°Π½Π΄Ρ SIN, COS, TG, LN, ASIN, ATG Π²ΡΡΠΈΡΠ»ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΈΠ½ΡΡ, ΠΊΠΎΡΠΈΠ½ΡΡ, ΡΠ°Π½Π³Π΅Π½Ρ, Π½Π°ΡΡΡΠ°Π»ΡΠ½ΡΠΉ Π»ΠΎΠ³Π°ΡΠΈΡΠΌ, Π°ΡΠΊΡΠ°Π½Π³Π΅Π½Ρ ΠΈ Π°ΡΠΊΡΠΈΠ½ΡΡ ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΠΈ ΡΠ°ΠΌ ΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°, Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊ Π½Π΅ΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· Π±ΠΈΠ±Π»Π΅ΠΎΡΠ΅ΠΊΠΈ <math.h>.
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ MR, MRE, LS, LSE, EQ, NEQ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ»ΠΈ Π½ΠΎΠ»Ρ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°. ΠΡΠ»ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π²Π΅ΡΠ½ΠΎ, ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ 1, ΠΈΠ½Π°ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π²Π΅Π½ 0. ΠΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ°.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ HLT ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π²ΡΡΡΠ΅ΡΠ°Π΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ HLT, Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΡΠ΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅ΡΡΡ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ CALL ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π°Π΄ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² ΡΡΠ΅ΠΊΠ΅, Π° ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Ρ Π°Π΄ΡΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ CALL Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΠ½ΡΡΡΡΠΊΡΠΈΡ RET ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ Π°Π΄ΡΠ΅ΡΠ°, ΡΠ°Π²Π½ΠΎΠ³ΠΎ ΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π²ΡΡ ΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· Π½Π΅Π΅ Π² r86 Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅.
ΠΠ΅Π·ΡΡΠ»ΠΎΠ²Π½ΡΠΉ 'jump' Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΠΊΠΎΠ΄Π΅, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡ Ρ Π°Π΄ΡΠ΅ΡΠ°, ΡΠ²Π»ΡΡΡΠ΅Π³ΠΎΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ, ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ 'jump'Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² - Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° - ΡΠ²Π»ΡΠ΅ΡΡΡ true. ΠΠ½Π°ΡΠ΅ ΠΏΡΡΠΆΠΎΠΊ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ 'jump'Π°. ΠΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΠΏΠ°Π΄Π°ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ°.
ΠΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΈ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΡΡ 'jump'ΠΎΠ² ΡΠ²Π»ΡΡΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° - ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΠ°Π»Π°.
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π²Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ - PUSH ΠΈ POP. ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ r86 ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π² ΡΠ΅Π³ΠΈΡΡΡ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ PUSH Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΊ, Π° POP - ΡΠ΄Π°Π»ΡΠ΅Ρ Π΅Π³ΠΎ ΠΈΠ· ΡΡΠ΅ΠΊΠ°.
Π Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ r86 ΡΡΡΠ΅ΡΠ²ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ.
PUSH Π² ΡΡΠ΅ΠΊ:
- ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ° ( push ax )
- ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² (
push [ax]
) - ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (
push [4]
) - ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ ΡΡΠΌΠΌΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (
push [ax+4]
) - ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (
push 5
)
POP ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π²:
- Π² ΡΠ΅Π³ΠΈΡΡΡ ( pop ax )
- Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² (
pop [ax]
) - Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (
pop [4]
) - Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ ΡΡΠΌΠΌΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (
pop [ax+4]
)
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ IN ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ -float ΡΠΈΡΠ»ΠΎ - ΠΈΠ· Π²Π²ΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΠΈΡΡΠ²Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ scanf. ΠΠ°Π»Π΅Π΅ ΡΡΠΈΡΠ°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΡΠ΅ΠΊ. ΠΠ½ΡΡΡΡΠΊΡΠΈΡ OUT ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ printf, ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ Π² Π²ΡΠ²ΠΎΠ΄Π΅. ΠΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ OUT ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ°. ΠΠ²ΠΎΠ΄ΠΎΠΌ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΡΠ²Π»ΡΡΡΡΡ Π΄Π²Π΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΠ°ΠΉΠ»Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ DRAW Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΡΡΡΠΎΡΠΊΠ°ΠΌ Π΄Π»ΠΈΠ½ΠΎΠΉ, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠ°Π½Π½Π°Ρ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡΠΈ. Π’ΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΡΡΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΡΠΈ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ DRAW ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈ Π½Π΅ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ 16-ΡΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ r86 ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Ρ 16 XMM ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ x86. ΠΡΠ»ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΎΠ±ΡΠ°ΡΠ°ΡΡΠΈΠ΅ΡΡ ΠΊ RAM, ΡΠΎ Π°Π»Π»ΠΎΡΠΈΡΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΠΏΠ° float ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΡΠΎ ΠΈ RAM Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ r86.
Π¦Π΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ x86 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ XMM ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΉ ΡΡΠ΅ΠΊ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Ρ 86.
ΠΠ°ΡΠ°Π»ΠΎ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΡΠΎΡ
ΡΠ°Π½ΡΡΡΠΈΡ
ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ Π² ΡΡΠ΅ΠΊΠ΅ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎ Π²ΡΠ·ΠΎΠ²Π°Ρ
System V AMD64 ABI ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠΈΡ
Π²ΡΠ΅ XMM ΡΠ΅Π³ΠΈΡΡΡΡ Π² Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ( ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ pxor xmm(i), xmm(i) | 0 < i < 15
).
ΠΡΠ»ΠΈ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ HLT, ΡΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ HLT ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ x86, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½Ρ Π½Π° Π²Ρ ΠΎΠ΄Π΅. ΠΠ°Π²Π΅ΡΡΠ°ΡΡΠ΅ΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ret (x86).
ΠΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ° Π² ΠΎΡΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΠ΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ΅ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ r86. ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² XMM0 ΡΠ΅Π³ΠΈΡΡΡ, Π΄Π°Π»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΎ Π²ΡΠΎΡΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΌΡΡ Π² ΡΡΠ΅ΠΊΠ΅. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡ RSP ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 8, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠ΄Π°Π»ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ· ΡΡΠ΅ΠΊΠ°. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°, Π·Π°Π½ΠΈΠΌΠ°Ρ ΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ΅ 16 XMM ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π² ΡΠ΅Π±Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠ°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ XMM0 ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ r15d, Π° ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ: ADD
movd r15d, xmm15
movss xmm15, dword [ rsp + 8 ]
adds xmm15, dword [ rsp ]
add rsp, 8
movss dword [ rsp ], xmm15
movd xmm15, r15d
Π ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π½ΠΈΠΆΠ΅ Start_addr - ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π½Π°ΡΠ°Π»Π° float ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
- PUSH Π² ΡΡΠ΅ΠΊ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· 16 ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²: Π‘Π½Π°ΡΠ°Π»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ· 16 ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ unsigned char Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ°Π»Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ XMM ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π² ΡΠ²ΠΎΠ΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ push ΠΈΠ· ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ΅ΠΉΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
cvtss2si r13d, xmm(i)
push qword [ Start_addr + r13d * 4]
- Push ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ° Π² ΡΡΠ΅ΠΊ: ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΡΠ»ΡΡΠ°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ΅Π³ΠΈΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎ unsigned char Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
sub rsp, 8
movss dword [rsp], xmm(i)
- Push Π² ΡΡΠ΅ΠΊ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΌΡ float Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°: Float Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠ΅Π»ΠΎΠΌΡ ΡΠΈΡΠ»Ρ (ΡΠΈΠΏΡ unsigned int) . ΠΠ°Π»Π΅Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠ»Π°Π΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ r13d. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ push.
mov r13d, index
push qword [ Start_addr + r13d * 4]
- Push ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΊ: Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² ΡΡΠ΅ΠΊ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΈΡΠ»ΠΎΠΌ float Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ float Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ unsigned int Π²Π΅Π»ΠΈΡΠΈΠ½Π°, ΠΏΠΎΠ±Π°ΠΉΡΠΎΠ²ΠΎ ΡΠ°Π²Π½Π°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ float ΡΠΈΡΠ»Π°. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΡΠ΅ΠΊ.
push Constant_value
- Push Π² ΡΡΠ΅ΠΊ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ ΡΡΠΌΠΌΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ float ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ²ΠΎΠ΅ - unsigned char - ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ XMM ΡΠ΅Π³ΠΈΡΡΡ, Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡ r13d. ΠΡΠΎΡΠΎΠ΅ - float - ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠΌΠ½ΠΎΠΆΠ°Π΅ΡΡΡ Π½Π° 4, Ρ.ΠΊ. sizeof(float) == 4. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π΅Π³ΠΎ Π² r14d. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ push.
cvtss2si r13d, xmm(i)
mov r14d, Imm_value_from_binary_code
push qword [ Start_addr + r13d * 4 + r14d ]
Π’ΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ POP ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΡΡ ΠΎΠΆΠ΅ Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠ΅ΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ PUSH, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠΌΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π±Π΅Π· ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π².
- Pop ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²:
cvtss2si r13d, xmm(i)
pop r14
mov dword [ Start_addr + 4 * r13d ], r14d
- Pop ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ΡΠ΅Π³ΠΈΡΡΡ:
movss xmm(i), dword [ rsp ]
add rsp, 8
- Pop ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:
mov r13d, Index_from_binary_code
pop r14
mov dword [ Start_addr + r13d * 4 ], r14d
- Pop ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΡΠ°Π²Π½ΠΎΠΌΡ ΡΡΠΌΠΌΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
cvtss2si r13d, xmm(i)
mov r15d, (unsigned int) (float value from binary) * 4
pop r14
mov dword [ Start_addr + r13d * 4 + r15d ], r14d
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½ΠΎΠ»Ρ ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ° ( ΠΈΡ float ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ) Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ MR
- Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ XMM0 ΠΈ Π₯ΠΠ13 Π² ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ :
movd r15d, xmm0
movd r13d, xmm13
- ΠΠ±Π½ΡΠ»ΡΠ΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡ XMM13
pxor xmm13, xmm13
- Π‘ΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΡΠ»Π°Π³ΠΈ x86
movss xmm0, dword [ rsp ]
comiss xmm0, dword [ rsp + 8 ]
- Π£ΡΠ»ΠΎΠ²Π½ΡΠΉ Π΄ΠΆΠ°ΠΌΠΏ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ (ΡΠΈΠΏ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ 'jump'Π° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΈΠΏΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ:
jbe $ + sizeof (next instruction )
- Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΠΉ Π΄ΠΆΠ°ΠΌΠΏ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π», Π° Π·Π½Π°ΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π²Π΅ΡΠ½ΠΎ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° Π₯ΠΠ13 Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ
movss xmm13, dword [ Address of 1 constant value ]
- ΠΡΠΈΡΠ°Π΅ΠΌ ΡΡΠ΅ΠΊ ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ
add rsp, 16
- Push Π·Π½Π°ΡΠ΅Π½ΠΈΡ xmm13 ΡΠ΅Π³ΠΈΡΡΡΠ° Π² ΡΡΠ΅ΠΊ
sub rsp, 8
movss dword [ rsp ], xmm13
- ΠΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π₯ΠΠ0 ΠΈ Π₯ΠΠ13 ΠΈΠ· ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
movd xmm0, r15d
movd xmm13, r13d
- ΠΡΠΈ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π²ΡΠ΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ°, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ 'jump'ΠΎΠ², ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡ Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ 'jump'Π° Π΄ΠΎ Π΅Π³ΠΎ ΠΌΠ΅ΡΡΠ° Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΠ²Π»ΡΡΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π΄Π»Ρ near relative 'jump'ΠΎΠ² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ x86. ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠΆΠΈΡΡ 'jump' ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°.
- Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ r86 JMP, CALL ΠΈ RET ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ near relative Π²Π΅ΡΡΠΈΠΈ jmp, call ΠΈ ret ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ x86.
- Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΠΉ 'jump' Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ Ρ 86 ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π°, ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ 'jump'Ρ ΡΡΠ°Π½Π»ΠΈΡΡΡΡΡΡ ΠΎΡΠΎΠ±ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ JA (r86) Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ x86.
add rsp, 16
movd r15d, xmm0
movss xmm0, dword [ rsp - 16 ]
comiss xmm0, dword [ rsp - 8 ]
movd xmm0, r15d
jbe $ + sizeof (near relative jump)
jmp (Offset to destination)
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π²ΡΡΠΈΡΠ»ΡΡΡΠΈΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ - POW, SIN, COS ΠΈ Π΄ΡΡΠ³ΠΈΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ IN ΠΈ OUT ΡΡΠ°Π½ΡΠ»ΠΈΡΡΡΡΡΡ Π² Π²ΡΠ·ΠΎΠ²Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»Π΅ΠΎΡΠ΅ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. Π€ΡΠ½ΠΊΠΈΠΈ, Π²ΡΡΠΈΡΠ»ΡΡΡΠΈΠ΅ ΡΠΈΠ½ΡΡ, ΠΊΠΎΡΠΈΠ½ΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ <math.h>. ΠΠ° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ call ΠΎΡΡΠ°ΡΡΡΡ ΡΠ°Π²Π½ΡΠΌΠΈ Π½ΡΠ»Ρ, Π½Π° Π²ΡΠΎΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ - Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠ°ΡΡΠΈΠ½Π³Π° - Π² Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π²ΡΡΡΠΈΡΠ°Π½Π½ΡΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ· ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΊ, Π²ΡΡΠΎΠ²Π½Π΅Π½Π½ΡΠΉ Π½Π° Π³ΡΠ°Π½ΠΈΡΡ 16 Π±Π°ΠΉΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΡΡΠ΅ΠΊΠ° ΠΏΡΡΡΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΡΡΠ°ΡΠΊΠ° ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° RSP Π½Π° 16. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΊ RSP ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΡΠ·ΠΎΠ²Π°Ρ . ΠΠΎΡΠ»Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ, Π²Π΅Π»ΠΈΡΠΈΠ½Π°, ΠΏΡΠΈΠ±Π°Π²Π»Π΅Π½Π½Π°Ρ ΠΊ rsp, Π²ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ Π₯ΠΠ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π² ΡΡΠ΅ΠΊΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΡΠ·ΠΎΠ²Π°Ρ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π₯ΠΠ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ.
- ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π₯ΠΠ0
movd r15d, xmm0
- ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π ΠΠ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² Π₯ΠΠ0
movss xmm0, dword [ rsp ]
add rsp, 8
-
ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π₯ΠΠ ΡΠ΅Π³ΠΈΡΡΡΡ Ρ 1-Π³ΠΎ ΠΏΠΎ 15-ΡΠΉ Π² ΡΡΠ΅ΠΊΠ΅
-
Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΡΡΠ΅ΠΊ Π½Π° Π³ΡΠ°Π½ΠΈΡΡ 16
mov r14, rsp
and r14, 0xF
add rsp, r14
-
call ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π½Π΄ΡΠ°ΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»Π΅ΠΎΡΠ΅ΠΊΠΈ
-
Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π₯ΠΠ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Ρ 1-Π³ΠΎ ΠΏΠΎ 15-ΡΠΉ ΠΈΠ· ΡΡΠ΅ΠΊΠ°
-
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ PUSH ΠΈΠ· Π₯ΠΠ0 Π² ΡΡΠ΅ΠΊ
sub rsp, 8
movss dword [ rsp ], xmm0
- Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π₯ΠΠ0 ΡΠ΅Π³ΠΈΡΡΡΠ°, ΡΠΎΡ
ΡΠ°Π½Π΅Π½Π½ΠΎΠ΅ Π² ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅
movd xmm0, r15d
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΈ Π±Π΅Π·ΡΡΠΎΠ²Π½ΡΡ jump'ΠΎΠ² ΠΈ 'call'ΠΎΠ², ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ Π΄Π΅ΡΡΠ²ΠΈΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π³ΠΎΠ²
- ΠΠ° ΡΡΠ°ΠΏΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ΅ΠΌΠΈ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ Π²ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈ Π² ΡΠΆΠ΅ ΠΎΡΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.
- ΠΠ° ΡΡΠ°ΠΏΠ΅ ΠΏΠ°ΡΡΠΈΠ½Π³Π°, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅ΠΌ ΡΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠ°ΠΏΠ°, Π²ΡΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ². ΠΡΡΡΠΈΡΠ°Π½Π½ΡΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π² 'jump'Ρ ΠΈ 'call'Ρ, Π³Π΄Π΅ ΡΡΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΊΠΎΠ΄Π° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π² Π΄Π²Π° ΠΏΡΠΎΡ ΠΎΠ΄Π°.
JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΡΠ²ΡΡΡΠΊΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ. ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈ ΠΏΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ° ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅. ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΏΠΈΡΠΊΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΊΠΎΠ΄ΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠ°.
Π‘Π²Π΅ΡΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π²ΡΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ. ΠΡΠΈΠΌΠ΅ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π½ΠΈΠΆΠ΅.
PUSH 0; COS
-->PUSH 1
PUSH 2; PUSH 3; ADD
-->PUSH 5
PUSH [ax+5]; PUSH 0; MUL
-->PUSH 0
PUSH [ax+5]; PUSH 1; MUL
-->PUSH [ax+5]
PUSH [ax+5]; PUSH 0; ADD
-->PUSH [ax+5]
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΉ, ΠΈΡΠΊΡΡΡΠ²Π΅Π½Π½Π½ΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ 2^10 10,000,000 ΡΠ°Π· Π² ΡΠΈΠΊΠ»Π΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΠ½Π°ΡΠ°Π»Π° Π±Π΅Π· ΡΠ»Π°Π³Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ° ΠΈ ΡΡΠ°Π²Π½ΠΈΠΌ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ .
no opt | -opt flag | |
---|---|---|
time, sec | 0,285 | 0,100 |
ΠΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΡΠ²Π΅ΡΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π΄Π²ΡΡ ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΠ΅Π±Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ΠΌΡ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π±ΡΠ»ΠΎ ΠΌΠ°Π»ΠΎ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΠΌΡΡ Π½Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π² ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π±Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ΅ΠΌΠ΅ΡΡΡΠ΅. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·ΡΠΊΠ΅ 'Harry Potter'. ΠΠ½Π° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π° 34 Π² ΡΠΈΠΊΠ»Π΅ 100,000 ΡΠ°Π·. ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ built-in ΠΎΠΏΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ 'time', Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ time 'user'. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ 5 ΡΠ°Π· ΠΈ ΡΡΡΠ΅Π΄Π½ΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π’Π°ΠΊ ΠΆΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΠΌ ΡΡΠ΅Π΄Π½Π΅ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΠΎΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅.
CPU | JIT | |
---|---|---|
time, sec | 26,154 Β± 0,170 | 0,106 Β± 0.014 |
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ, Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² 240 ΡΠ°Π·.