home *** CD-ROM | disk | FTP | other *** search
- âïÇéÇ 18.
-
- éÄÅÉÄæ¢ èÄìÆÉÄïƒ.
-
- ¥Γá ú½áóá ñÑΓá½∞¡« «»¿ßδóáÑΓ αẽ¿τ¡δÑ ß»«ß«íδ, ¬«Γ«α묨 Turbo
- Pascal αÑ὿ºπÑΓ π»αáó½Ñ¡¿Ñ »α«úαá¼¼«⌐. Ä¡á ó¬½ετáÑΓ ß«ú½áΦÑ¡¿∩ «
- ó맮óáσ »α«µÑñπαδ óδσ«ñá, «íαáí«Γ¬π »αÑαδóá¡¿⌐ ¿ «íαáí«Γ¬π «Φ¿í«¬.
-
-
- æ«ú½áΦÑ¡¿∩ « ó맮óáσ.
-
- Åáαá¼ÑΓαδ »ÑαÑñáεΓß∩ ó »α«µÑñπαδ ¿ Σπ¡¬µ¿¿ τÑαѺ ßΓѬ. ä«
- ó맮óá »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿ »áαá¼ÑΓαδ »«¼ÑΘáεΓß∩ ó ßΓѬ ó »«α∩ñ¬Ñ
- ¿σ «íΩ∩ó½Ñ¡¿∩. ÅÑαÑñ ó«ºóαáΓ«¼ »α«µÑñπαá ¿½¿ Σπ¡¬µ¿∩ πñá½∩ÑΓ óßÑ
- »áαá¼ÑΓαδ ¿º ßΓѬá.
- ¥Γ«Γ ¬«ñ ñ½∩ »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿ íπñÑΓ óδú½∩ñÑΓ∞:
-
- Push Param1
- Push Param2
- .
- .
- .
- Push ParamX
- Call ProcOrFunc
-
- Åáαá¼ÑΓαδ »ÑαÑñáεΓß∩ »« ßßδ½¬Ñ ¿½¿ »« º¡áτÑ¡¿ε. è«úñá »áαá¼ÑΓα
- »ÑαÑñáÑΓß∩ »« ßß佬Ñ, ó ßΓѬ »«¼ÑΘáÑΓß∩ π¬áºáΓѽ∞ ¡á ñÑ⌐ßΓó¿Γѽ∞¡«Ñ
- »«½«ªÑ¡¿Ñ »áαá¼ÑΓαá. è«úñá »áαá¼ÑΓα »ÑαÑñáÑΓß∩ »« º¡áτÑ¡¿ε, ó ßΓѬ
- »«¼ÑΘáÑΓß∩ ñÑ⌐ßΓó¿Γѽ∞¡«Ñ º¡áτÑ¡¿Ñ.
-
-
- 꺼ѡ∩ѼδÑ »áαá¼ÑΓαδ.
-
- 꺼ѡ∩Ѽδ⌐ »áαá¼ÑΓα (var »áαá¼ÑΓα) óßÑúñá »ÑαÑñáÑΓß∩ »« ßß佬Ñ
- - π¬áºáΓѽ∞ π¬áºδóáÑΓ ¡á ñÑ⌐ßΓó¿Γѽ∞¡«Ñ »«½«ªÑ¡¿Ñ »áαá¼ÑΓαá
- (áñαÑß).
-
-
- ìÑ¿º¼Ñ¡∩ѼδÑ »áαá¼ÑΓαδ.
-
- ìÑ¿º¼Ñ¡∩Ѽδ⌐ »áαá¼ÑΓα »ÑαÑñáÑΓß∩ »« ßßδ½¬Ñ ¿½¿ »« º¡áτÑ¡¿ε ó
- ºáó¿ß¿¼«ßΓ¿ «Γ Γ¿»á ¿ αẼÑαá »áαá¼ÑΓαá. àß½¿ º¡áτÑ¡¿Ñ »áαá¼ÑΓαá
- ºá¡¿¼áÑΓ 1, 2 ¿½¿ 4 íá⌐Γá, Γ« º¡áτÑ¡¿Ñ »«¼ÑΘáÑΓß∩ ó ßΓѬ. ê¡áτÑ ó
- ßΓѬ »«¼ÑΘáÑΓß∩ π¬áºáΓѽ∞ ¡á º¡áτÑ¡¿Ñ, ¿ »α«µÑñπαá ¿½¿ Σπ¡¬µ¿∩
- ºáΓѼ ¬«»¿απÑΓ φΓ« º¡áτÑ¡¿Ñ ó ½«¬á½∞¡πε «í½áßΓ∞ »á¼∩Γ¿.
-
- Åα¿¼Ñτá¡¿Ñ: 8086 ¡Ñ »«ññÑনóáÑΓ «ñ¡«íá⌐Γ«óδÑ ¿¡ßΓαπ¬µ¿¿ Push
- ¿ Pop, »«φΓ«¼π «ñ¡«íá⌐Γ«óδÑ »áαá¼ÑΓαδ óßÑúñá »«¼ÑΘáεΓß∩ ó ßΓѬ, ¬á¬
- ß½«óá. î½áñΦ¿⌐ íá⌐Γ ß½«óá ß«ñÑαª¿Γ º¡áτÑ¡¿Ñ, á ßΓáαΦ¿⌐ íá⌐Γ ¡Ñ
- ¿ß»«½∞ºπÑΓß∩ (¡Ñ «»αÑñѽѡ).
-
- ûѽδ⌐ Γ¿» ¿½¿ »áαá¼ÑΓα, »ÑαÑñáóáѼδ⌐ ¬á¬ íá⌐Γ, ß½«ó« ¿½¿
- ñó«⌐¡«Ñ ß½«ó« óßÑúñá ¿ß»«½∞ºπÑΓ Γᬫ⌐ ªÑ Σ«α¼áΓ, ¬á¬ »ÑαѼѡ¡á∩
- µÑ½«ú« Γ¿»á. (ä½∩ ñó«⌐¡«ú« ß½«óá ßΓáαΦÑÑ ß½«ó« »«¼ÑΘáÑΓß∩ ó ßΓѬ ñ«
- ¼½áñΦÑú« ß½«óá Γá¬, τΓ« ¼½áñΦÑÑ ß½«ó« ¿¼ÑÑΓ ¼½áñΦ¿⌐ áñαÑß).
- Åáαá¼ÑΓα ß¿¼ó«½∞¡«ú« Γ¿»á »ÑαÑñáÑΓß∩ ¬á¬ íѺº¡á¬«óδ⌐ íá⌐Γ.
- Åáαá¼ÑΓα ½«ú¿τÑ߬«ú« Γ¿»á »ÑαÑñáÑΓß∩ ¬á¬ íá⌐Γ ß« º¡áτÑ¡¿Ñ¼ 0
- ¿½¿ 1.
- Åáαá¼ÑΓα »ÑαÑτ¿ß½¿¼«ú« Γ¿»á »ÑαÑñáÑΓß∩ ¬á¬ íѺº¡á¬«óδ⌐ íá⌐Γ,
- Ñß½¿ »ÑαÑτ¿ß½Ñ¡¿Ñ ¿¼ÑÑΓ 256 ¿½¿ ¼Ñ¡∞ΦÑ º¡áτÑ¡¿⌐, ¿¡áτÑ «¡
- »ÑαÑñáÑΓß∩ ¬á¬ íѺº¡á¬«ó«Ñ ß½«ó«.
- Åáαá¼ÑΓα Γ¿»á Real »ÑαÑñáÑΓß∩ ¬á¬ 6 íá⌐Γ ó ßΓѬ ¿ ∩ó½∩ÑΓß∩
- ¿ß¬½ετÑ¡¿Ñ¼ ¿º »αáó¿½, τΓ« Γ«½∞¬« 1, 2 ¿½¿ 4-x íá⌐Γ«óδÑ º¡áτÑ¡¿∩
- »ÑαÑñáεΓß∩ »α∩¼« τÑαѺ ßΓѬ.
- Åáαá¼ÑΓα óÑΘÑßΓóÑ¡¡«ú« Γ¿»á (Real, Single, Double, Extended ¿
- Comp) »ÑαÑñáÑΓß∩ ¬á¬ 4, 6, 8 ¿½¿ 10 íá⌐Γ ó ßΓѬ ¿ ∩ó½∩ÑΓß∩
- ¿ß¬½ετÑ¡¿Ñ¼ ¿º »αáó¿½, τΓ« Γ«½∞¬« 1, 2 ¿½¿ 4 íá⌐Γ«óδÑ º¡áτÑ¡¿∩
- »ÑαÑñáεΓß∩ »α∩¼« ó ßΓѬ.
-
- Åα¿¼Ñτá¡¿Ñ: Turbo Pascal óÑαß¿¿ 4.0 »ÑαÑñáóá½ »áαá¼ÑΓαδ Γ¿»á
- 8087 (Ringle, Double, Extended ¿ Comp) ó« ó¡πΓαÑ¡¡¿⌐ ßΓѬ
- ¼áΓѼáΓ¿τÑ߬«ú« ß«»α«µÑßß«αá 8087. ä½∩ ß«ó¼ÑßΓ¿¼«ßΓ¿ ß ñαπú¿¼¿
- ∩ºδ¬á¼¿ ¿ »αÑñ«ΓóαáΘÑ¡¿∩ »ÑαÑ»«½¡Ñ¡¿∩ ßΓѬá 8087, φΓá óÑαß¿∩
- ¿ß»«½∞ºπÑΓ ßΓѬ 8086.
-
- Åáαá¼ÑΓα Γ¿»á Éointer »ÑαÑñáÑΓß∩ ¬á¬ ñó«⌐¡«Ñ ß½«ó« (ßÑú¼Ñ¡Γ¡á∩
- τáßΓ∞ »ÑαÑñáÑΓß∩ ñ« τáßΓ¿ ß¼ÑΘÑ¡¿∩ Γá¬, τΓ« τáßΓ∞ ß¼ÑΘÑ¡¿∩ ºá¡¿¼áÑΓ
- ¼½áñΦ¿Ñ áñαÑßá).
- Åáαá¼ÑΓα Γ¿»á String »ÑαÑñáÑΓß∩, ¬á¬ π¬áºáΓѽ∞ ¡á º¡áτÑ¡¿Ñ.
- Åáαá¼ÑΓα Γ¿»á ¼¡«ªÑßΓó« »ÑαÑñáÑΓß∩, ¬á¬ π¬áºáΓѽ∞ ¡á
- "¡Ñπ»á¬«óá¡¡«Ñ" ¼¡«ªÑßΓó«, ¬«Γ«α«Ñ ºá¡¿¼áÑΓ 32 íá⌐Γá.
- îáßß¿óδ ¿ ºá»¿ß¿ ñ½¿¡«⌐ 1, 2 ¿½¿ 4 íá⌐Γá »ÑαÑñáεΓß∩ »α∩¼« ó
- ßΓѬ. äαπú¿Ñ ¼áßß¿óδ ¿ ºá»¿ß¿ »ÑαÑñáεΓß∩ ¬á¬ π¬áºáΓѽ∞ ¡á º¡áτÑ¡¿Ñ.
-
-
- ÉѺπ½∞ΓáΓδ Σπ¡¬µ¿¿.
-
- ÉѺπ½∞ΓáΓδ Σπ¡¬µ¿¿ »«α∩ñ¬«ó«ú« Γ¿»á (Integer, Char, Boolean ¿
- »ÑαÑτ¿ß½¿¼δ⌐) »ÑαÑñáεΓß∩ ó αÑú¿ßΓαáσ »α«µÑßß«αá: íá⌐Γδ »ÑαÑñáεΓß∩ ó
- AL, ß½«óá »ÑαÑñáεΓß∩ ó AX ¿ ñó«⌐¡δÑ ß½«óá »ÑαÑñáεΓß∩ ó DX:AX
- (ßΓáαΦÑÑ ß½«ó« ó DX, ¼½áñΦÑÑ ß½«ó« ó AX).
- ÉѺπ½∞ΓáΓ Σπ¡¬µ¿¿ Γ¿»á Real ó«ºóαáΘáÑΓß∩ ó αÑú¿ßΓαáσ DX:BX:AX.
- (æΓáαΦÑÑ ß½«ó« ó DX, ßαÑñ¡ÑÑ ß½«ó« ó BX, ¼½áñΦÑÑ ß½«ó« ó AX).
- ÉѺπ½∞ΓáΓδ Σπ¡¬µ¿⌐ Γ¿»á 8087 (Single, Double, Extended ¿ Comp)
- »ÑαÑñáεΓß∩ ó αÑú¿ßΓα óÑαΦ¿¡δ ßΓѬá 8087 (ST(0)).
- ÉѺπ½∞ΓáΓ Σπ¡¬µ¿¿ Γ¿»á Pointer »ÑαÑñáÑΓß∩ ó DX:AX (ßÑú¼Ñ¡Γ¡á∩
- τáßΓ∞ ó DX, τáßΓ∞ ß¼ÑΘÑ¡¿∩ ó AX).
- ä½∩ αѺπ½∞ΓáΓ«ó Σπ¡¬µ¿⌐ Γ¿»á String, óδºδóáεΘá∩ »α«úαá¼¼á
- »«¼ÑΘáÑΓ π¬áºáΓѽ∞ ¡á óαѼѡ¡πε «í½áßΓ∞ »á¼∩Γ¿ ñ« »«¼ÑΘÑ¡¿∩ ½εíδσ
- »áαá¼ÑΓα«ó, ¿ Σπ¡¬µ¿∩ ó«ºóαáΘáÑΓ ßΓ᫬«ó«Ñ º¡áτÑ¡¿Ñ ó φΓπ óαѼѡ¡πε
- »á¼∩Γ∞. öπ¡¬µ¿∩ ¡Ñ ñ«½ª¡á πñá½∩Γ∞ π¬áºáΓѽ∞.
-
-
- ü½¿ª¡¿Ñ ¿ ñá½∞¡¿Ñ ó맮óδ (NEAR ¿ FAR).
-
- Åα«µÑßß«α 8086 »«ññÑনóáÑΓ ñóá Γ¿»á ¿¡ßΓαπ¬µ¿⌐ ó맮óá ¿
- ó«ºóαáΓá: NEAR ¿ FAR. NEAR (í½¿ª¡∩∩) ¿¡ßΓαπ¬µ¿∩ »ÑαÑñáÑΓ π»αáó½Ñ¡¿Ñ
- ó ñαπúπε Γ«τ¬π ó¡πΓα¿ Γ«ú« ªÑ ¬«ñ«ó«ú« ßÑú¼Ñ¡Γá, á FAR (ñá½∞¡∩∩)
- ¿¡ßΓαπ¬µ¿∩ »«ºó«½∩ÑΓ ¿º¼Ñ¡¿Γ∞ ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ.
- ê¡ßΓαπ¬µ¿∩ NEAR CALL »«¼ÑΘáÑΓ 16-Γ¿ í¿Γ«óδ⌐ áñαÑß ó«ºóαáΓá
- (Γ«½∞¬« ß¼ÑΘÑ¡¿Ñ) ó ßΓѬ, á ¿¡ßΓαπ¬µ¿∩ FAR CALL »«¼ÑΘáÑΓ 32-σ
- í¿Γ«óδ⌐ áñαÑß ó«ºóαáΓá (¿ ßÑú¼Ñ¡Γ ¿ ß¼ÑΘÑ¡¿Ñ). æ««ΓóÑΓßΓóπεΘ¿Ñ
- ¿¡ßΓαπ¬µ¿¿ RET óδΓὬ¿óáεΓ ¿º ßΓѬá Γ«½∞¬« ß¼ÑΘÑ¡¿Ñ ¿½¿ ¿ ß¼ÑΘÑ¡¿Ñ
- ¿ ßÑú¼Ñ¡Γ.
- Turbo Pascal ¡á «ß¡«óÑ «íΩ∩ó½Ñ¡¿∩ »α«µÑñπαδ íπñÑΓ
- áóΓ«¼áΓ¿τÑ߬¿ óδí¿αáΓ∞ »αáó¿½∞¡πε ¼«ñѽ∞ ó맮óá. Åα«µÑñπαδ,
- «íΩ∩ó½Ñ¡¡δÑ ó ßѬµ¿¿ interfaße ¼«ñπ½∩, íπñπΓ FAR, Γᬠ¬á¬ «¡¿
- óδºδóáεΓß∩ ¿º ñαπú¿σ ¼«ñπ½Ñ⌐. Åα«µÑñπαδ, «íΩ∩ó½Ñ¡¡δÑ ó »α«úαá¼¼Ñ
- ¿½¿ ó ßѬµ¿¿ implementation ¼«ñπ½∩, íπñπΓ NEAR, Γᬠ¬á¬ «¡¿ ¼«úπΓ
- íδΓ∞ óδºóá¡δ Γ«½∞¬« ó¡πΓα¿ »α«úαá¼¼δ ¿½¿ ¼«ñπ½∩.
- ä½∩ ¡Ñ¬«Γ«αδσ ߻ѵ¿á½∞¡δσ µÑ½Ñ⌐ ¼«ªÑΓ ΓαÑí«óáΓ∞ß∩ »α«µÑñπαá
- Γ¿»á FAR. ìá»α¿¼Ñα, ó »α«úαá¼¼áσ ß «óÑα½Ñ∩¼¿ óßÑ »α«µÑñπαδ ¿
- Σπ¡¬µ¿¿ ñ«½ª¡δ íδΓ∞ FAR; ¬α«¼Ñ Γ«ú«, Ñß½¿ »α«µÑñπαá ¿½¿ Σπ¡¬µ¿∩
- »α¿ßóá¿óáÑΓß∩ »α«µÑñπα¡«⌐ »ÑαѼѡ¡«⌐, «¡á Γá¬ªÑ ñ«½ª¡á íδΓ∞ FAR.
- ä¿αÑ¬Γ¿óá ¬«¼»¿½∩Γ«αá $F ¿ß»«½∞ºπÑΓß∩ ñ½∩ «Γ¼Ñ¡δ áóΓ«¼áΓ¿τÑ߬«ú«
- óδí«αá ¼«ñѽ¿ ó맮óá ¬«¼»¿½∩Γ«α«¼. Åα«µÑñπαδ ¿ Σπ¡¬µ¿¿
- «Γ¬«¼»¿½¿α«óá¡¡δÑ ó ß«ßΓ«∩¡¿¿ {$F+} óßÑúñá FAR; ó ß«ßΓ«∩¡¿¿ {$F-} -
- Turbo Pascal áóΓ«¼áΓ¿τÑ߬¿ óδí¿αáÑΓ »αáó¿½∞¡πε ¼«ñѽ∞. æ«ßΓ«∩¡¿Ñ »«
- π¼«½τá¡¿ε {$F-}.
-
-
- 齫ªÑ¡¡δÑ »α«µÑñπαδ ¿ Σπ¡¬µ¿¿.
-
- Åα«µÑñπαá ¿½¿ Σπ¡¬µ¿∩ ¡áºδóáÑΓß∩ 󽫪ѡ¡«⌐, ¬«úñá «¡á
- «íΩ∩ó½Ñ¡á ó¡πΓα¿ ñαπú«⌐ »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿. Å« π¼«½τá¡¿ε
- 󽫪ѡ¡δÑ »α«µÑñπαδ ¿ Σπ¡¬µ¿¿ óßÑúñá ¿ß»«½∞ºπεΓ ¼«ñѽ∞ ó맮óá NEAR,
- »«ß¬«½∞¬π «¡¿ "ó¿ñ¿¼δ" Γ«½∞¬« ó¡πΓα¿ «»αÑñѽѡ¡«⌐ »α«µÑñπαδ ¿½¿
- Σπ¡¬µ¿¿, ¡áσ«ñ∩ΘÑ⌐ß∩ ó Γ«¼ ªÑ ¬«ñ«ó«¼ ßÑú¼Ñ¡ΓÑ. Äñ¡á¬« ó «óÑα½Ñ⌐¡δσ
- »α«úαá¼¼áσ ñ¿αÑ¬Γ¿óá {$F+} ¿ß»«½∞ºπÑΓß∩ ñ½∩ πßΓá¡«ó½Ñ¡¿∩ óßÑσ
- »α«µÑñπα ¿ Σπ¡¬µ¿⌐ ó FAR, ó¬½ετá∩ ¿ 󽫪ѡ¡δÑ.
- è«úñá óδºδóáÑΓß∩ 󽫪ѡ¡á∩ »α«µÑñπαá ¿½¿ Σπ¡¬µ¿∩, ¬«¼»¿½∩Γ«α
- úÑ¡Ñα¿απÑΓ ¿¡ßΓαπ¬µ¿ε PUSH BP »ÑαÑñ CALL, ó αѺπ½∞ΓáΓÑ »ÑαÑñáóá∩ BP
- óδºδóáεΘÑ⌐ »α«µÑñπαÑ, ¬á¬ ñ«»«½¡¿Γѽ∞¡δ⌐ »áαá¼ÑΓα. ū߬«½∞¬π
- óδºóá¡¡á∩ »α«µÑñπαá πßΓá¡áó½¿óáÑΓ ßó«⌐ ß«íßΓóÑ¡¡δ⌐ BP, ¬ BP
- óδºδóáεΘÑ⌐ »α«µÑñπαδ ¼«ª¡« «íαáΓ¿Γ∞ß∩ ¬á¬ ¬ ß½«óπ, σαá¡∩ΘѼπß∩ ó
- [BP + 4] ¿½¿ [BP + 6], Ñß½¿ »α«µÑñπαá FAR. êß»«½∞ºπ∩ ßó∩º∞ τÑαѺ
- [BP + 4] ¿½¿ [BP + 6], óδºδóáѼá∩ »α«µÑñπαá ¼«ªÑΓ «íαáΘáΓ∞ß∩ ¬
- ½«¬á½∞¡δ¼ »ÑαѼѡ¡δ¼ ¿º ßΓѬá óδºδóáεΘÑ⌐. àß½¿ óδºδóáεΘá∩ »α«µÑñπαá
- ó ßó«ε «τÑαÑñ∞ ∩ó½∩ÑΓß∩ 󽫪ѡ¡«⌐, «¡á Γá¬ªÑ ¿¼ÑÑΓ ßó∩º∞ τÑαѺ [BP
- + 4] ¿½¿ [BP + 6]. æ½ÑñπεΘ¿⌐ »α¿¼Ñα ñѼ«¡ßΓα¿απÑΓ, ¬á¬ «íαáΘáΓ∞ß∩ ¬
- ½«¬á½∞¡δ¼ »ÑαѼѡ¡δ¼ ¿º «»ÑαáΓ«αá inline ó« 󽫪ѡ¡«⌐ »α«µÑñπαÑ:
-
- procedure A; near;
- var IntA: Integer;
-
- procedure B; far;
- var IntB: Integer;
-
- procedure C; near;
- var IntC: Integer;
-
- begin
- inline(
- $8B/$46/<IntC/ {MOV AX,[BP+IntC] ; AX=IntC}
- $8B/$5E/$04/ {MOV BX,[BP+4] ; BX=ßΓѬ B}
- $36/$8B/$47/<IntB/ {MOV AX,SS:[BX+IntB] ; AX=IntB}
- $8B/$5E/$04/ {MOV BX,[BP+4] ; BX=ßΓѬ B}
- $36/$8B/$5F/$06/ {MOV BX,SS:[BX+6] ; BX=ßΓѬ A}
- $36/$8B/$47/<IntA/ {MOV AX,SS:[BX+IntA] ; AX=IntA}
- );
- end;
- begin end;
- begin end;
-
- Åα¿¼Ñτá¡¿Ñ: 齫ªÑ¡¡δÑ »α«µÑñπαδ ¿ Σπ¡¬µ¿¿ ¡Ñ ¼«úπΓ íδΓ∞
- «íΩ∩ó½Ñ¡δ ß ñ¿αÑ¬Γ¿ó«⌐ àxternal ¿ «¡¿ ¡Ñ ¼«úπΓ íδΓ∞ »α«µÑñπα¡δ¼¿
- »áαá¼ÑΓαἿ.
-
-
- è«ñ óσ«ñá ¿ óδσ«ñá.
-
- èáªñá∩ »α«µÑñπαá ¿ Σπ¡¬µ¿∩ Åá߬á½∩ ¡áτ¿¡áÑΓß∩ ¿ ºá¬á¡τ¿óáÑΓß∩
- ßΓá¡ñáαΓ¡δ¼ ¬«ñ«¼ óσ«ñá ¿ óδσ«ñá, ¬«Γ«αδ⌐ á¬Γ¿ó¿απÑΓ ¿½¿
- ñÑá¬Γ¿ó¿απÑΓ ÑÑ.
- æΓá¡ñáαΓ¡δ⌐ ¬«ñ óσ«ñá:
-
- push bp ; ß«σαá¡¿Γ∞ bp
- mov bp,sp ; πßΓá¡«ó¿Γ∞ ßΓѬ
- sub sp,LocalSize ; αáß»αÑñѽ¿Γ∞ ½«¬á½∞¡δÑ »ÑαѼѡ¡δÑ
-
- úñÑ LocalSize - αẼÑα ½«¬á½∞¡δσ »ÑαѼѡ¡δσ. ê¡ßΓαπ¬µ¿∩ sub
- óßΓáó½∩ÑΓß∩, Ñß½¿ LocalSize ¡Ñ αáó¡« 0. àß½¿ ¼«ñѽ∞ »α«µÑñπαδ NEAR,
- »áαá¼ÑΓαδ ¡áτ¿¡áεΓß∩ ß bp+4; Ñß½¿ FAR - Γ« ß bp+6.
- æΓá¡ñáαΓ¡δ⌐ ¬«ñ óδσ«ñá:
-
- mov sp,bp ;πñ὿Γ∞ ½«¬á½∞¡δÑ »ÑαѼѡ¡δÑ
- pop bp ;ó«ßßΓá¡«ó¿Γ∞ bp
- ret ParamSize ;πñ὿Γ∞ »áαá¼ÑΓαδ ¿ óÑα¡πΓ∞ß∩
-
- úñÑ ParamSize - αẼÑα »áαá¼ÑΓα«ó. ê¡ßΓαπ¬µ¿∩ ret -φΓ« NEAR
- ¿½¿ FAR ó«ºóαáΓ, ó ºáó¿ß¿¼«ßΓ¿ «Γ ¼«ñѽ¿ ó맮óá »α«µÑñπαδ.
-
-
- æ«ú½áΦÑ¡¿∩ « αÑú¿ßΓαáσ.
-
- Åα«µÑñπαδ ¿ Σπ¡¬µ¿¿ ñ«½ª¡δ ß«σαá¡∩Γ∞ αÑú¿ßΓαδ BP, SP, SS ¿ DS.
- éßÑ ñαπú¿Ñ αÑú¿ßΓαδ ¼«ª¡« ¿º¼Ñ¡∩Γ∞.
-
-
- Åα«µÑñπαδ óδσ«ñá.
-
- ôßΓá¡«ó¿ó »α«µÑñπαπ óδσ«ñá, éδ ¼«ªÑΓÑ »«½πτ¿Γ∞ ¬«¡Γα«½∞ ¡áñ
- »α«µÑßß«¼ ºáóÑαΦÑ¡¿∩ »α«úαá¼¼δ. ¥Γ« »«½Ñº¡«, ¬«úñá éδ σ«Γ¿ΓÑ
- ßñѽáΓ∞ ¡áñѪ¡δ¼ óδ»«½¡Ñ¡¿Ñ ñÑ⌐ßΓó¿⌐ ñ« ºáóÑαΦÑ¡¿∩ »α«úαá¼¼δ;
- Γ¿»¿τ¡δ⌐ »α¿¼Ñα - «í¡«ó½Ñ¡¿Ñ ¿ ºá¬αδΓ¿Ñ Σá⌐½«ó.
- ÅÑαѼѡ¡á∩ Γ¿»á πáºáΓѽ∞ ExitProc »«ºó«½∩ÑΓ éá¼ πßΓá¡«ó¿Γ∞
- »α«µÑñπαπ óδσ«ñá. Åα«µÑñπαá óδσ«ñá óßÑúñá óδºδóáÑΓß∩ ¬á¬ τáßΓ∞
- ºáóÑαΦÑ¡¿∩ »α«úαá¼¼δ, ó Γ«¼ τ¿ß½Ñ ¡«α¼á½∞¡«ú« ºáóÑαΦÑ¡¿∩,
- ºáóÑαΦÑ¡¿∩ τÑαѺ ó맮ó Halt ¿½¿ ºáóÑαΦÑ¡¿∩ ¿º-ºá «Φ¿í¬¿ óαѼѡ¿
- óδ»«½¡Ñ¡¿∩.
- Åα«µÑñπαá óδσ«ñá ¡Ñ ¿¼ÑÑΓ »áαá¼ÑΓα«ó ¿ ñ«½ª¡á íδΓ∞
- «Γ¬«¼»¿½¿α«óá¡á ß ñ¿αÑ¬Γ¿ó«⌐ {$F+} ñ½∩ πßΓá¡«ó½Ñ¡¿∩ ñá½∞¡Ñ⌐ ¼«ñѽ¿
- ó맮óá.
- Åα¿ »αáó¿½∞¡«⌐ πßΓá¡«ó¬Ñ, »α«µÑñπαá óδσ«ñá ñÑ⌐ßΓó¿Γѽ∞¡«
- ßΓá¡«ó¿Γß∩ τáßΓ∞ε µÑ»«τ¬¿ »α«µÑñπα óδσ«ñá. ¥Γá µÑ»«τ¬á ñѽáÑΓ
- 󫺼«ª¡δ¼ ¿¡ßΓá½½∩µ¿ε »α«µÑñπα óδσ«ñá ñ½∩ ¼«ñπ½Ñ⌐ Γá¬ªÑ ¬á¬ ¿ ñ½∩
- »α«úαá¼¼δ. ìѬ«Γ«αδÑ ¼«ñ㫨 ¿¡ßΓ὿απεΓ »α«µÑñπαπ óδσ«ñá ¬á¬ τáßΓ∞
- ¿σ ¬«ñá ¿¡¿µ¿á½¿ºáµ¿¿, φΓ« úáαá¡Γ¿απÑΓ, τΓ« ñá¡¡á∩ »α«µÑñπαá íπñÑΓ
- óδºóá¡á ñ½∩ «τ¿ßΓ¬¿ »«ß½Ñ ¼«ñπ½∩; ¡á»α¿¼Ñα, ºá¬αδΓ∞ Σá⌐½δ ¿½¿
- ó«ßßΓá¡«ó¿Γ∞ óÑ¬Γ«αá »αÑαδóá¡¿⌐. Åα«µÑñπαδ µÑ»«τ¬¿ óδσ«ñá,
- óδ»«½¡∩εΓß∩ ó »«α∩ñ¬Ñ, «íαáΓ¡«¼ »«α∩ñ¬π ¿¡ßΓá½½∩µ¿¿. ¥Γ«
- úáαá¡Γ¿απÑΓ, τΓ« óδσ«ñ¡«⌐ ¬«ñ ½εí«ú« ¿º ¼«ñπ½Ñ⌐ ¡Ñ íπñÑΓ
- óδ»«½¡∩Γ∞ß∩ ñ« óδ»«½¡Ñ¡¿∩ óδσ«ñ¡«ú« ¬«ñá ¼«ñπ½Ñ⌐, ºáó¿ß∩Θ¿σ «Γ
- ¡Ñú«.
- ùΓ«íδ ß«σαá¡¿Γ∞ µÑ»«τ¬π óδσ«ñá ¡Ñ»«óαѪñÑ¡¡«⌐, éδ ñ«½ª¡δ
- ß«σαá¡¿Γ∞ ΓѬπΘÑÑ ß«ñÑন¼«Ñ ExitProc ñ« ¿º¼Ñ¡Ñ¡¿∩ ÑÑ áñαÑßá ¡á
- éáΦπ »α«µÑñπαπ óδσ«ñá. èα«¼Ñ Γ«ú«, »Ñαóδ⌐ «»ÑαáΓ«α ó éáΦÑ⌐
- »α«µÑñπαÑ óδσ«ñá ñ«½ªÑ¡ ó«ßßΓá¡«ó¿Γ∞ ºá»«¼¡Ñ¡¡«Ñ º¡áτÑ¡¿Ñ ExitProc.
- æ½ÑñπεΘá∩ »α«úαá¼¼á ñѼ«¡ßΓα¿απÑΓ ¼ÑΓ«ñ αÑ὿ºáµ¿¿ »α«µÑñπαδ
- óδσ«ñá:
-
- program Textexit;
- var
- ExitSave: Pointer;
-
- procedure MyExit; far;
- begin
- ExitProc := ExitSave; {ß¡áτá½á ß«σαá¡∩ÑΓ ßΓáαδ⌐ óÑ¬Γ«α}
- ...
- end;
-
- begin
- ExitSave := ExitProc;
- ExitProc := @MyExit;
- ...
- end.
-
-
- Åα¿ óσ«ñÑ »α«úαá¼¼á ß«σαá¡∩ÑΓ ß«ñÑন¼«Ñ ExitProc ó ExitSave ¿
- ºáΓѼ ¿¡ßΓá½½¿απÑΓ »α«µÑñπαπ óδσ«ñá MyExit. MyExit, »«ß½Ñ Γ«ú« ¬á¬
- «¡á íδ½á óδºóá¡á ¬á¬ τáßΓ∞ »α«µÑßßá ºáóÑαΦÑ¡¿∩, ó«ßßΓá¡áó½¿óáÑΓ
- »αÑñδñπΘπε »α«µÑñπαπ óδσ«ñá.
- Åα«úαá¼¼á ºáóÑαΦÑ¡¿∩ í¿í½¿«ΓѬ¿ óαѼѡ¿ óδ»«½¡Ñ¡¿∩ »α«ñ«½ªáÑΓ
- óδºδóáΓ∞ »α«µÑñπαδ óδσ«ñá ñ« ΓÑσ »«α, »«¬á ExitProc ¡Ñ ßΓá¡ÑΓ
- αáó¡«⌐ nil. ùΓ«íδ »αÑñ«ΓóαáΓ¿Γ∞ íÑ߬«¡Ñτ¡δ⌐ µ¿¬½, ExitProc
- πßΓá¡áó½¿óáÑΓß∩ ó nil ñ« ¬áªñ«ú« ó맮óá, ΓᬠτΓ« ß½ÑñπεΘá∩
- »α«µÑñπαá óδσ«ñá óδºδóáÑΓß∩ Γ«½∞¬« Γ«úñá, ¬«úñá ΓѬπΘá∩ »α«µÑñπαá
- óδσ«ñá »α¿ßó«¿Γ áñαÑß ó ExitProc. àß½¿ ó »α«µÑñπαÑ óδσ«ñá
- »α«¿º«⌐ñÑΓ «Φ¿í¬á, Γ« «¡á ¡Ñ óδºδóáÑΓß∩ ß¡«óá.
- Åα«µÑñπαá óδσ«ñá ¼«ªÑΓ á¡á½¿º¿α«óáΓ∞ »α¿τ¿¡π ºáóÑαΦÑ¡¿∩
- »α«óÑᬫ⌐ µÑ½«τ¿ß½Ñ¡¡«⌐ »ÑαѼѡ¡«⌐ ExitCode ¿ »ÑαѼѡ¡«⌐ Γ¿»á
- pointer ErrorAddr.
- é ß½πτáÑ ¡«α¼á½∞¡«ú« ºáóÑαΦÑ¡¿∩ ExitCode αáó¡á 0 ¿ ErrorAddr -
- nil. é ß½πτáÑ ºáóÑαΦÑ¡¿∩ »«ß½Ñ ó맮óá Halt, ExitCode ß«ñÑনΓ
- º¡áτÑ¡¿Ñ »ÑαÑñá¡¡«Ñ ó Halt ¿ ErrorAddr - nil. ìᬫ¡Ñµ, ó ß½πτáÑ
- ºáóÑαΦÑ¡¿∩ ¿º-ºá «Φ¿í¬¿ óαѼѡ¿ óδ»«½¡Ñ¡¿∩, ExitCode ß«ñÑαª¿Γ ¬«ñ
- «Φ¿í¬¿ ¿ ErrorAddr - áñαÑß «Φ¿í«τ¡«ú« «»ÑαáΓ«αá.
- ū߽Ññ¡∩∩ »α«µÑñπαá óδσ«ñá (¿¡ßΓ὿α«óá¡¡á∩ í¿í½¿«ΓѬ«⌐
- óαѼѡ¿ óδ»«½¡Ñ¡¿∩) ºá¬αδóáÑΓ Σá⌐½δ Input ¿ Output, ó«ßßΓá¡áó½¿óáÑΓ
- óÑ¬Γ«αá »αÑαδóá¡¿⌐, πßΓá¡«ó½Ñ¡¡δÑ Turbo Pascal. èα«¼Ñ Γ«ú«, Ñß½¿
- ErrorAddr ¡Ñ nil, Γ« óδñáÑΓß∩ ß««íΘÑ¡¿Ñ «í «Φ¿í¬Ñ óαѼѡ¿
- óδ»«½¡Ñ¡¿∩.
- àß½¿ Bδ σ«Γ¿ΓÑ «íαáí«ΓáΓ∞ «Φ¿í¬π óαѼѡ¿ óδ»«½¡Ñ¡¿∩ ßἿ,
- ¿¡ßΓá½½¿απ⌐ΓÑ »α«µÑñπαπ óδσ«ñá, ¬«Γ«αá∩ »α«óÑα∩ÑΓ ErrorAddr ¿
- óδñáÑΓ ß««íΘÑ¡¿Ñ Ñß½¿ «¡ ¡Ñ nil. ìᬫ¡Ñµ, ñ« ó«ºóαáΓá πßΓá¡«ó¿ΓÑ
- ErrorAddr ó nil, ΓᬠτΓ«íδ ñαπú¿Ñ »α«µÑñπαδ óδσ«ñá ¡Ñ óδñ὿ ß¡«óá
- ß««íΘÑ¡¿Ñ «í «Φ¿í¬Ñ.
- Å«ß½Ñ Γ«ú« ¬á¬ í¿í½¿«ΓѬá óαѼѡ¿ óδ»«½¡Ñ¡¿∩ óδºóá½á óßÑ
- »α«µÑñπαδ óδσ«ñá, «¡á »ÑαÑñáÑΓ π»αáó½Ñ¡¿Ñ ó DOS, »ÑαÑñáóá∩
- º¡áτÑ¡¿Ñ, σαá¡∩ΘÑÑß∩ ó ExitCode, ¬á¬ ¬«ñ ó«ºóαáΓá.
-
-
- Äíαáí«Γ¬á »αÑαδóá¡¿⌐.
-
- ü¿í½¿«ΓѬá óαѼѡ¿ óδ»«½¡Ñ¡¿∩ Turbo Pascal ¿ ¬«ñ, úÑ¡Ñα¿απѼδ⌐
- ¬«¼»¿½∩Γ«α«¼, »«½¡«ßΓ∞ε ñ«»π߬áεΓ »αÑαδóá¡¿∩. ü«½ÑÑ Γ«ú«, í«½∞Φá∩
- τáßΓ∞ í¿í½¿«ΓѬ¿ óαѼѡ¿ óδ»«½¡Ñ¡¿∩ αÑÑ¡ΓÑαáíѽ∞¡á∩, τΓ« »«ºó«½∩ÑΓ
- »¿ßáΓ∞ ¡á Turbo Pascal »α«úαá¼¼δ «íαáí«Γ¬¿ »αÑαδóá¡¿⌐.
-
-
- ìỿßá¡¿Ñ »α«µÑñπα »αÑαδóá¡¿∩.
-
- Åα«µÑñπαá »αÑαδóá¡¿∩ «íΩ∩ó½∩ÑΓß∩ ß ñ¿αÑ¬Γ¿ó«⌐ Interrupt.
- èáªñá∩ »α«µÑñπαá »αÑαδóá¡¿∩ ñ«½ª¡á ¿¼ÑΓ∞ ß½ÑñπεΘ¿⌐ ºáú«½«ó«¬ (¿½¿
- τáßΓ∞ Ñú«, ¬á¬ «»¿ßá¡« ¡¿ªÑ):
-
- procedure IntHandler(Flags, CS, IP, AX, BX, CX, DX,
- SI, DI, DS, ES, BP: Word);
- interrupt;
- begin
- ...
- end;
-
- èᬠéδ ó¿ñ¿ΓÑ, óßÑ αÑú¿ßΓαδ »ÑαÑñáεΓß∩ ¬á¬ »ßÑóñ«-»áαá¼ÑΓαδ.
- Æá¬, τΓ« éδ ¼«ªÑΓÑ ¿σ ¿ß»«½∞º«óáΓ∞ ¿ ¼«ñ¿Σ¿µ¿α«óáΓ∞ ó éáΦѼ ¬«ñÑ.
- éδ ¼«ªÑΓÑ «»πßΓ¿Γ∞ ¡Ñ¬«Γ«αδÑ ¿½¿ óßÑ »áαá¼ÑΓαδ, ¡áτ¿¡á∩ ß Flags ¿
- ñ« BP. üπñÑΓ «Φ¿í¬«⌐ - «íΩ∩ó¿Γ∞ í«½∞ΦÑ »áαá¼ÑΓα«ó, τѼ »α¿óÑñÑ¡« ó
- »αÑñδñπΘѼ »α¿¼ÑαÑ ¿½¿ ªÑ »α«»πßΓ¿Γ∞ »áαá¼ÑΓα íѺ »α«»π߬á óßÑσ
- ßΓ«∩Θ¿σ ñ« ¡Ñú« (¡« ß««íΘÑ¡¿∩ «í «Φ¿í¬Ñ ¡Ñ íπñÑΓ). Åα¿¼Ñα:
-
- procedure IntHandler(DI,ES,BP : Word); {¡ÑóÑα¡«}
-
- procedure IntHandler(SI,DI,DS,ES,BP : Word); {¡ÑóÑα¡«}
-
- ìá óσ«ñÑ »α«µÑñπαá «íαáí«Γ¬¿ »αÑαδóá¡¿⌐ áóΓ«¼áΓ¿τÑ߬¿
- ß«σαá¡∩ÑΓ óßÑ αÑú¿ßΓαδ (ó¡Ñ ºáó¿ß¿¼«ßΓ¿ «Γ ºáú«½«ó¬á »α«µÑñπαδ) ¿
- ¿¡¿µ¿á½¿º¿απÑΓ αÑú¿ßΓα DS :
-
- push ax
- push bx
- push cx
- push dx
- push si
- push di
- push ds
- push es
- push bp
- mov bp,sp
- sub sp, LocalSize
- mov ax, SEG DATA
- mov ds,ax
-
- çá¼ÑΓ∞ΓÑ, «ΓßπΓßΓó¿Ñ ¿¡ßΓαπ¬µ¿¿ STI ñ½∩ αáºαÑΦÑ¡¿∩ »αÑαδóá¡¿⌐.
- éδ ñ«½ª¡δ ¬«ñ¿α«óáΓ∞ ÑÑ ßἿ (Ñß½¿ ΓαÑíπÑΓß∩), ¿ß»«½∞ºπ∩ ¿¡ßΓαπ¬µ¿ε
- Inline. éδσ«ñ¡«⌐ ¬«ñ ó«ßßΓá¡áó½¿óáÑΓ αÑú¿ßΓαδ ¿ óδ»«½¡∩ÑΓ
- ¿¡ßΓαπ¬µ¿ε ó«ºóαáΓá:
-
- mov sp,bp
- pop bp
- pop es
- pop ds
- pop di
- pop si
- pop dx
- pop cx
- pop bx
- pop ax
- iret
-
- Åα«µÑñπαá »αÑαδóá¡¿∩ ¼«ªÑΓ ¼«ñ¿Σ¿µ¿α«óáΓ∞ ßó«¿ »áαá¼ÑΓαδ.
- 꺼ѡ∩∩ «íΩ∩ó½Ñ¡¡δÑ »áαá¼ÑΓαδ, éδ íπñÑΓÑ ¼«ñ¿Σ¿µ¿α«óáΓ∞
- ß««ΓóÑΓßΓóπεΘ¿Ñ αÑú¿ßΓαδ »α¿ ó«ºóαáΓÑ ¿º «íαáí«Γτ¿¬á »αÑαδóá¡¿⌐.
- ¥Γ« ¼«ªÑΓ íδΓ∞ »«½Ñº¡δ¼, ¬«úñá óδ ¿ß»«½∞ºπÑΓÑ «íαáí«Γτ¿¬ »αÑαδóá¡¿⌐
- ¬á¬ »«½∞º«óáΓѽ∞߬¿⌐ ßÑαó¿ß, ¡á»α¿¼Ñα, ¬á¬ ßÑαó¿ß DOS INT 21H.
- é »α«µÑñπαáσ »αÑαδóá¡¿⌐, ¬«Γ«αδÑ «íαáíáΓδóáεΓ á»»áαáΓ¡δÑ
- »αÑαδóá¡¿∩, ¡Ñ ñ«½ª¡δ ¿ß»«½∞º«óáΓ∞ß∩ ½εíδÑ »α«úαá¼¼δ óó«ñá/óδó«ñá
- Turbo Pascal ¿ »α«úαá¼¼δ ñ¿¡á¼¿τÑ߬«ú« αáß»αÑñѽѡ¿∩ »á¼∩Γ¿,
- »«ß¬«½∞¬π «¡¿ ¡Ñ αÑÑ¡ΓÑαáíѽ∞¡δÑ. èα«¼Ñ Γ«ú«, ¡Ñ ¼«úπΓ íδΓ∞
- ¿ß»«½∞º«óá¡δ Σπ¡¬µ¿¿ DOS, Γᬠ¬á¬ DOS ¡Ñ αÑÑ¡ΓÑαáíѽ∞¡á∩.
-