Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ГСнСрация высококачСствСнного ΠΊΠΎΠ΄Π° для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° БИ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 4

Автор Π€ΠΈΠ»ΠΈΠΏΠΏ Π₯ислСй

Начиная с процСссора Intel 80186, сСмСйство микропроцСссоров 80x86 прСдоставляСт инструкции ENTER ΠΈ LEAVE для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ инструкции ENTER сниТаСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² процСссора, Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΡ… засылку Π² стСк Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ указатСля ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ количСства Π±Π°ΠΉΡ‚ для Ρ„Ρ€Π΅ΠΉΠΌΠ° ΠΈΠ· указатСля стСка.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ использованию стСка для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², сколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² рСгистрах. Если доступно достаточноС количСство рСгистров Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ вызываСмая функция Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° для ΠΏΡ€ΠΎΠ»ΠΎΠ³Π° ΠΈ эпилога Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΎΠ½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½ΡƒΠΆΠ½Ρ‹ для установки адрСсации Ρ„Ρ€Π΅ΠΉΠΌΠ° стСка). ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ WATCOM C 6.0 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ (см. рис. 5). БущСствСнноС ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ скорости получаСтся ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ инструкции, Π½ΠΎ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡƒΠΆΠ΅ рСгистровыС ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ эффСктивно.

--------------------------------------------------------------Β¬

¦РИБУНОК 5: Π‘Ρ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β¦

+-------------------------------------------------------------+

Β¦Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст Π½Π° Π‘ΠΈ MICROSOFT WATCOM Β¦

Β¦(x)-Π²Ρ€Π΅ΠΌ. Ρ†ΠΈΠΊΠ»Ρ‹ C 5.0 C 6.0 Β¦

+-------------------------------------------------------------+

Β¦/*ВСст Π²Ρ‹Π·ΠΎΠ²Π° funcall funcall Β¦

Β¦ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ */ push bp push DX Β¦

Β¦int funcall() mov BP,SP xor DX,DX Β¦

Β¦{ sub SP,2 L4 mov AX,DX <-Β¬ Β¦

Β¦ int i; push SI call dummy Β¦ Β¦

Β¦ sub SI,SI inc DX (23)Β¦

Β¦ for(i=0;i<20000;i++) $L20008: cmp DX,2000 Β¦ Β¦

Β¦ { dummy(i); } ; push SI <-Β¬ jl L4 <-- Β¦

Β¦} call dummy Β¦ pop DX Β¦

Β¦ add SP,2 (31) ret Β¦

Β¦int dummy(i) inc SI Β¦ Β¦

Β¦int i; cmp SI,20000 Β¦ Β¦

Β¦{ jl $L20008 <-- Β¦

Β¦ return (i+1); mov [BP-2],SI Β¦

Β¦} pop SI Β¦

Β¦ leave Β¦

Β¦ ret Β¦

Β¦ Β¦

Β¦ --> dummy push BP dummy inc AX <-Β¬(13)Β¦

Β¦ Β¦ mov BP,SP ret <-- Β¦

Β¦ (28)Β¦ mov AX,[BP+4] Β¦

Β¦ Β¦ inc AX Β¦

Β¦ Β¦ leave Β¦

Β¦ L-> ret Β¦

+-------------------------------------------------------------+

Β¦ Подобно Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ компиляторов Π‘ΠΈ Microsoft C 5.0 Β¦

Β¦ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ функциям ΠΏΡƒΡ‚Π΅ΠΌ засылки ΠΈΡ… Π² стСк. Β¦

Β¦ Всякий Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ выполняСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Β¦

Β¦ функция Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° стСкС Β¦

Β¦ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Однако компилятор WATCOM C 6.0 удаляСт Β¦

Β¦ стСковый Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ благодаря ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² рСгистрах ΡΡ‚ΠΎΠ»ΡŒΠΊΠΈΡ… Β¦

Β¦ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², сколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Β¦

L--------------------------------------------------------------

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов Π‘ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ процСссора Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°. Π₯отя спСциализированныС инструкции ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСссора ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ количСство машин, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π’ случаС, ΠΊΠΎΠ³Π΄Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ являСтся критичСским ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, "Π·Π°ΠΌΠ΅Π½Π° Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅Π΅ Ρ‚Π΅Π»ΠΎΠΌ" ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. НСкоторыС компиляторы ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°, Π»ΠΈΠ±ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Ρ‹. Набор Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‰Π΅ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ abs. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· этого Π½Π°Π±ΠΎΡ€Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ встроСнными. Π­Ρ‚Π° оптимизация ΠΏΠΎΠ»Π΅Π·Π½Π° для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ. Набор доступных встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ зависит ΠΎΡ‚ компилятора.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ прямой ΠΊΠΎΠ΄ для матСматичСского сопроцСссора, ускоряСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая выполняСт ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ сопроцСссор ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСпосрСдствСнно ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ сопроцСссора Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использованию ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ эмуляции Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ.

ΠŸΡ€ΠΈ трансляции условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ΄Π° компилятора ΠΈΠ½ΠΎΠ³Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ инструкции ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструкции ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°. "Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ²" просто ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ связанноС мноТСство ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² Π² СдинствСнный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅Ρ‚?

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ - Π½Π΅ панацСя, ΠΈ Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ бСсплатно. Π’ зависимости ΠΎΡ‚ стСпСни ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ врСмя, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ для компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Ρ‚ΡŒ. Для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ врСмя ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ вслСдствиС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ нСпосрСдствСнно ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с исходными ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ввСсти ошибки Π² ΠΊΠΎΠ΄, сгСнСрированный ΠΈΠ· Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Битуация, ΠΊΠΎΠ³Π΄Π° Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ нСпосрСдствСнно ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΈ посрСдством ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ компилятора ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, "ΠΆΠΈΠ²Π°" Π»ΠΈ Π΅Ρ‰Π΅ пСрСмСнная ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² рСгистрС, ΠΈΠ»ΠΈ ΠΎΠ½Π° "ΡƒΠΌΠ΅Ρ€Π»Π°" ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ сохранСна Π² памяти.

ВынСсСниС ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ источником ошибок. Π’ Ρ†ΠΈΠΊΠ»Π΅

int a[10], x, y;

for(i = 0; i < 10; i++)

if( y != 0 )

a[i] = x / y;

ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ x/y Π΅ΡΡ‚ΡŒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΈ вынСсСт Π΅Π³ΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Ρ†ΠΈΠΊΠ»Π°, игнорируя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° 0 ΠΈ создавая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ возникновСния ситуации дСлСния Π½Π° 0.

Когда компилятор выполняСт ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ пСрСполнСния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вычислСния, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ индСксы Ρ†ΠΈΠΊΠ»Π°. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π³Π΄Π΅ выполняСтся оптимизация, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ вынСсСниС ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°, пСрСмСнная ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ i Π±Ρ‹Π»Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π°, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈΠΌΠ΅Π΅ΠΌ:

T1 = j + k;

for(x = 0; x < T1 * v; x += T1);

Π’ этом случаС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ значСния j, k ΠΈ v нСизвСстны, сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСполнСния для выраТСния T1 * v. Π¦ΠΈΠΊΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒΡΡ.

ВСстированиС компиляторов

PC Tech Journal Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» тСст ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π‘ΠΈ (см. листинг 1) ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΡΠΏΠΎΡ€ΡŒΠ΅ Π² ΠΎΡ†Π΅Π½ΠΊΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… возмоТностСй компиляторов Π‘ΠΈ. ВСст провСряСт ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΉ компилятором. Для обСспСчСния основы для сравнСния ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ компилятора запускался тСст исполнСния PC Tech Journal с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ компилятора ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 1. Рисунок 6 дСмонстрируСт ΠΎΠΏΡ†ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались ΠΏΡ€ΠΈ компиляции ΠΎΠ±ΠΎΠΈΡ… тСстов. Π₯арактСристики выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с измСрСниями Π±Π΅Π· ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ„Π΅Π²Ρ€Π°Π»ΡŒΡΠΊΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€Π΅ Π·Π° 1988 Π³ΠΎΠ΄ (см. стр. 62 ΠΈ 80).

ЦСлью ΠΎΠ±ΠΎΠΈΡ… тСстов, исполнСния ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ быстрый ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ компилятор. Если компилятор прСдоставляСт ΠΎΠΏΡ†ΠΈΠΈ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΎΠ½ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π»ΠΈΡΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π½Π°Π΄ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ микропроцСссора 80286 ΠΈ нСпосрСдствСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сопроцСссора 80287, Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π»ΠΎΡΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, минимальная конфигурация систСмы, трСбуСмая для запуска тСстов Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, - машина с процСссором 80286 ΠΈ матСматичСским сопроцСссором 80287.

МногиС компиляторы Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΏΡ†ΠΈΠΈ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° процСссоров 80186 ΠΈ NEC V20/V30, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для машин класса XT (см. "Chips in transitions", Bob Smith, Π°ΠΏΡ€Π΅Π»ΡŒ 1986Π³., стр. 56). Π­Ρ‚ΠΈ процСссоры ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ срСдств 80286, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ сгСнСрированный для Π½ΠΈΡ… ΠΊΠΎΠ΄ совпадаСт с ΠΊΠΎΠ΄ΠΎΠΌ для 80286.

----------------------------------------------------Β¬

¦РИБУНОК 6: ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ строки Β¦

+---------------------------------------------------+

Β¦ Β¦

Β¦ BORLAND TURBO C 1.5 Β¦

Β¦ : tcc -1 -f87 -N- -S -O -G -Z -r optbench.c Β¦

Β¦ Β¦

Β¦ COMPUTER INNOVATIONS C86PLUS 1.10 Β¦

Β¦ : cc -DNO_ZERO_DIVIDE=1 -c -FPi87 -Oatx Β¦

Β¦ -G2 -Fa optbench.c Β¦

Β¦ Β¦

Β¦ DATALIGHT OPTIMUM-C 3.14 Β¦

Β¦ : dlc1 optbench.c -f-g Β¦

Β¦ dlg optbench.tmp +vbe +all Β¦

Β¦ dlc2 optbench.tmo Β¦