home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / tp6progg.doc / pg18 < prev    next >
Encoding:
Text File  |  1991-02-04  |  15.6 KB  |  370 lines

  1.                              âïÇéÇ 18.
  2.  
  3.                          éÄÅÉÄæ¢ èÄìÆÉÄïƒ.
  4.  
  5.      ¥Γá ú½áóá ñÑΓá½∞¡« «»¿ßδóáÑΓ αẽ¿τ¡δÑ ß»«ß«íδ, ¬«Γ«α묨 Turbo
  6. Pascal αÑ὿ºπÑΓ  π»αáó½Ñ¡¿Ñ »α«úαá¼¼«⌐.  Ä¡á ó¬½ετáÑΓ ß«ú½áΦÑ¡¿∩ «
  7. ó맮óáσ »α«µÑñπαδ óδσ«ñá, «íαáí«Γ¬π »αÑαδóá¡¿⌐ ¿ «íαáí«Γ¬π «Φ¿í«¬.
  8.  
  9.  
  10.                        æ«ú½áΦÑ¡¿∩ « ó맮óáσ.
  11.  
  12.      Åáαá¼ÑΓαδ »ÑαÑñáεΓß∩  ó  »α«µÑñπαδ  ¿  Σπ¡¬µ¿¿ τÑαѺ ßΓѬ.  ä«
  13. ó맮óá »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿ »áαá¼ÑΓαδ »«¼ÑΘáεΓß∩ ó ßΓѬ  ó »«α∩ñ¬Ñ
  14. ¿σ  «íΩ∩ó½Ñ¡¿∩.  ÅÑαÑñ  ó«ºóαáΓ«¼ »α«µÑñπαá ¿½¿ Σπ¡¬µ¿∩ πñá½∩ÑΓ óßÑ
  15. »áαá¼ÑΓαδ ¿º ßΓѬá.
  16.      ¥Γ«Γ ¬«ñ ñ½∩ »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿ íπñÑΓ óδú½∩ñÑΓ∞:
  17.  
  18.      Push Param1
  19.      Push Param2
  20.      .
  21.      .
  22.      .
  23.      Push ParamX
  24.      Call ProcOrFunc
  25.  
  26.      Åáαá¼ÑΓαδ »ÑαÑñáεΓß∩ »« ßßδ½¬Ñ ¿½¿ »« º¡áτÑ¡¿ε. è«úñá »áαá¼ÑΓα
  27. »ÑαÑñáÑΓß∩ »« ßß佬Ñ, ó ßΓѬ »«¼ÑΘáÑΓß∩ π¬áºáΓѽ∞ ¡á ñÑ⌐ßΓó¿Γѽ∞¡«Ñ
  28. »«½«ªÑ¡¿Ñ »áαá¼ÑΓαá.  è«úñá »áαá¼ÑΓα »ÑαÑñáÑΓß∩ »« º¡áτÑ¡¿ε, ó ßΓѬ
  29. »«¼ÑΘáÑΓß∩ ñÑ⌐ßΓó¿Γѽ∞¡«Ñ º¡áτÑ¡¿Ñ.
  30.  
  31.  
  32.                        êº¼Ñ¡∩ѼδÑ »áαá¼ÑΓαδ.
  33.  
  34.      êº¼Ñ¡∩Ѽδ⌐ »áαá¼ÑΓα (var »áαá¼ÑΓα) óßÑúñá »ÑαÑñáÑΓß∩ »« ßß佬Ñ
  35. - π¬áºáΓѽ∞  π¬áºδóáÑΓ  ¡á   ñÑ⌐ßΓó¿Γѽ∞¡«Ñ   »«½«ªÑ¡¿Ñ   »áαá¼ÑΓαá
  36. (áñαÑß).
  37.  
  38.  
  39.                       ìÑ¿º¼Ñ¡∩ѼδÑ »áαá¼ÑΓαδ.
  40.  
  41.      ìÑ¿º¼Ñ¡∩Ѽδ⌐ »áαá¼ÑΓα »ÑαÑñáÑΓß∩ »« ßßδ½¬Ñ ¿½¿ »«  º¡áτÑ¡¿ε  ó
  42. ºáó¿ß¿¼«ßΓ¿  «Γ  Γ¿»á ¿ αẼÑαá »áαá¼ÑΓαá.  àß½¿ º¡áτÑ¡¿Ñ »áαá¼ÑΓαá
  43. ºá¡¿¼áÑΓ 1,  2 ¿½¿ 4 íá⌐Γá,  Γ« º¡áτÑ¡¿Ñ »«¼ÑΘáÑΓß∩ ó ßΓѬ. ê¡áτÑ ó
  44. ßΓѬ »«¼ÑΘáÑΓß∩  π¬áºáΓѽ∞  ¡á  º¡áτÑ¡¿Ñ,  ¿  »α«µÑñπαá ¿½¿ Σπ¡¬µ¿∩
  45. ºáΓѼ ¬«»¿απÑΓ φΓ« º¡áτÑ¡¿Ñ ó ½«¬á½∞¡πε «í½áßΓ∞ »á¼∩Γ¿.
  46.  
  47.      Åα¿¼Ñτá¡¿Ñ: 8086 ¡Ñ »«ññÑনóáÑΓ «ñ¡«íá⌐Γ«óδÑ  ¿¡ßΓαπ¬µ¿¿ Push
  48. ¿ Pop, »«φΓ«¼π «ñ¡«íá⌐Γ«óδÑ »áαá¼ÑΓαδ óßÑúñá »«¼ÑΘáεΓß∩ ó ßΓѬ, ¬á¬
  49. ß½«óá.  î½áñΦ¿⌐ íá⌐Γ ß½«óá ß«ñÑαª¿Γ º¡áτÑ¡¿Ñ,  á  ßΓáαΦ¿⌐  íá⌐Γ  ¡Ñ
  50. ¿ß»«½∞ºπÑΓß∩ (¡Ñ «»αÑñѽѡ).
  51.  
  52.      ûѽδ⌐ Γ¿»  ¿½¿  »áαá¼ÑΓα,  »ÑαÑñáóáѼδ⌐  ¬á¬  íá⌐Γ,  ß½«ó« ¿½¿
  53. ñó«⌐¡«Ñ ß½«ó« óßÑúñá ¿ß»«½∞ºπÑΓ Γᬫ⌐  ªÑ  Σ«α¼áΓ,  ¬á¬  »ÑαѼѡ¡á∩
  54. µÑ½«ú« Γ¿»á. (ä½∩ ñó«⌐¡«ú« ß½«óá ßΓáαΦÑÑ ß½«ó« »«¼ÑΘáÑΓß∩ ó ßΓѬ ñ«
  55. ¼½áñΦÑú« ß½«óá Γá¬, τΓ« ¼½áñΦÑÑ ß½«ó« ¿¼ÑÑΓ ¼½áñΦ¿⌐ áñαÑß).
  56.      Åáαá¼ÑΓα ß¿¼ó«½∞¡«ú« Γ¿»á »ÑαÑñáÑΓß∩ ¬á¬ íѺº¡á¬«óδ⌐ íá⌐Γ.
  57.      Åáαá¼ÑΓα ½«ú¿τÑ߬«ú«  Γ¿»á  »ÑαÑñáÑΓß∩ ¬á¬ íá⌐Γ ß« º¡áτÑ¡¿Ñ¼ 0
  58. ¿½¿ 1.
  59.      Åáαá¼ÑΓα »ÑαÑτ¿ß½¿¼«ú« Γ¿»á »ÑαÑñáÑΓß∩ ¬á¬  íѺº¡á¬«óδ⌐  íá⌐Γ,
  60. Ñß½¿   »ÑαÑτ¿ß½Ñ¡¿Ñ   ¿¼ÑÑΓ  256  ¿½¿  ¼Ñ¡∞ΦÑ  º¡áτÑ¡¿⌐,  ¿¡áτÑ  «¡
  61. »ÑαÑñáÑΓß∩ ¬á¬ íѺº¡á¬«ó«Ñ ß½«ó«.
  62.      Åáαá¼ÑΓα Γ¿»á  Real  »ÑαÑñáÑΓß∩  ¬á¬  6 íá⌐Γ ó ßΓѬ ¿ ∩ó½∩ÑΓß∩
  63. ¿ß¬½ετÑ¡¿Ñ¼ ¿º »αáó¿½,  τΓ« Γ«½∞¬« 1,  2 ¿½¿ 4-x íá⌐Γ«óδÑ  º¡áτÑ¡¿∩
  64. »ÑαÑñáεΓß∩ »α∩¼« τÑαѺ ßΓѬ.
  65.      Åáαá¼ÑΓα óÑΘÑßΓóÑ¡¡«ú« Γ¿»á (Real,  Single, Double, Extended ¿
  66. Comp)  »ÑαÑñáÑΓß∩  ¬á¬  4,  6,  8  ¿½¿  10  íá⌐Γ  ó ßΓѬ ¿ ∩ó½∩ÑΓß∩
  67. ¿ß¬½ετÑ¡¿Ñ¼ ¿º »αáó¿½,  τΓ« Γ«½∞¬« 1,  2 ¿½¿  4  íá⌐Γ«óδÑ  º¡áτÑ¡¿∩
  68. »ÑαÑñáεΓß∩ »α∩¼« ó ßΓѬ.
  69.  
  70.      Åα¿¼Ñτá¡¿Ñ: Turbo  Pascal  óÑαß¿¿ 4.0 »ÑαÑñáóá½ »áαá¼ÑΓαδ Γ¿»á
  71. 8087  (Ringle,  Double,  Extended  ¿  Comp)  ó«   ó¡πΓαÑ¡¡¿⌐   ßΓѬ
  72. ¼áΓѼáΓ¿τÑ߬«ú«  ß«»α«µÑßß«αá  8087.  ä½∩  ß«ó¼ÑßΓ¿¼«ßΓ¿  ß ñαπú¿¼¿
  73. ∩ºδ¬á¼¿ ¿  »αÑñ«ΓóαáΘÑ¡¿∩  »ÑαÑ»«½¡Ñ¡¿∩  ßΓѬᠠ8087,  φΓá   óÑαß¿∩
  74. ¿ß»«½∞ºπÑΓ  ßΓѬ  8086.
  75.  
  76.      Åáαá¼ÑΓα Γ¿»á Éointer »ÑαÑñáÑΓß∩ ¬á¬ ñó«⌐¡«Ñ ß½«ó« (ßÑú¼Ñ¡Γ¡á∩
  77. τáßΓ∞ »ÑαÑñáÑΓß∩ ñ« τáßΓ¿ ß¼ÑΘÑ¡¿∩ Γá¬, τΓ« τáßΓ∞ ß¼ÑΘÑ¡¿∩ ºá¡¿¼áÑΓ
  78. ¼½áñΦ¿Ñ áñαÑßá).
  79.      Åáαá¼ÑΓα Γ¿»á String »ÑαÑñáÑΓß∩, ¬á¬ π¬áºáΓѽ∞ ¡á º¡áτÑ¡¿Ñ.
  80.      Åáαá¼ÑΓα Γ¿»á   ¼¡«ªÑßΓó«   »ÑαÑñáÑΓß∩,   ¬á¬   π¬áºáΓѽ∞   ¡á
  81. "¡Ñπ»á¬«óá¡¡«Ñ" ¼¡«ªÑßΓó«, ¬«Γ«α«Ñ ºá¡¿¼áÑΓ 32 íá⌐Γá.
  82.      îáßß¿óδ ¿  ºá»¿ß¿  ñ½¿¡«⌐ 1,  2 ¿½¿ 4 íá⌐Γá »ÑαÑñáεΓß∩ »α∩¼« ó
  83. ßΓѬ. äαπú¿Ñ ¼áßß¿óδ ¿ ºá»¿ß¿ »ÑαÑñáεΓß∩ ¬á¬ π¬áºáΓѽ∞ ¡á º¡áτÑ¡¿Ñ.
  84.  
  85.  
  86.                         ÉѺπ½∞ΓáΓδ Σπ¡¬µ¿¿.
  87.  
  88.      ÉѺπ½∞ΓáΓδ Σπ¡¬µ¿¿ »«α∩ñ¬«ó«ú« Γ¿»á (Integer,  Char, Boolean ¿
  89. »ÑαÑτ¿ß½¿¼δ⌐) »ÑαÑñáεΓß∩ ó αÑú¿ßΓαáσ »α«µÑßß«αá: íá⌐Γδ »ÑαÑñáεΓß∩ ó
  90. AL,  ß½«óá  »ÑαÑñáεΓß∩  ó  AX  ¿  ñó«⌐¡δÑ  ß½«óá »ÑαÑñáεΓß∩ ó DX:AX
  91. (ßΓáαΦÑÑ ß½«ó« ó DX, ¼½áñΦÑÑ ß½«ó« ó AX).
  92.      ÉѺπ½∞ΓáΓ Σπ¡¬µ¿¿ Γ¿»á Real ó«ºóαáΘáÑΓß∩ ó αÑú¿ßΓαáσ DX:BX:AX.
  93. (æΓáαΦÑÑ ß½«ó« ó DX, ßαÑñ¡ÑÑ ß½«ó« ó BX, ¼½áñΦÑÑ ß½«ó« ó AX).
  94.      ÉѺπ½∞ΓáΓδ Σπ¡¬µ¿⌐ Γ¿»á 8087 (Single, Double, Extended ¿ Comp)
  95. »ÑαÑñáεΓß∩ ó αÑú¿ßΓα óÑαΦ¿¡δ ßΓѬá 8087 (ST(0)).
  96.      ÉѺπ½∞ΓáΓ Σπ¡¬µ¿¿  Γ¿»á Pointer »ÑαÑñáÑΓß∩ ó DX:AX (ßÑú¼Ñ¡Γ¡á∩
  97. τáßΓ∞ ó DX, τáßΓ∞ ß¼ÑΘÑ¡¿∩ ó AX).
  98.      ä½∩ αѺπ½∞ΓáΓ«ó  Σπ¡¬µ¿⌐  Γ¿»á  String,  óδºδóáεΘá∩  »α«úαá¼¼á
  99. »«¼ÑΘáÑΓ π¬áºáΓѽ∞ ¡á óαѼѡ¡πε «í½áßΓ∞ »á¼∩Γ¿ ñ«  »«¼ÑΘÑ¡¿∩  ½εíδσ
  100. »áαá¼ÑΓα«ó, ¿ Σπ¡¬µ¿∩ ó«ºóαáΘáÑΓ ßΓ᫬«ó«Ñ º¡áτÑ¡¿Ñ ó φΓπ óαѼѡ¡πε
  101. »á¼∩Γ∞. öπ¡¬µ¿∩ ¡Ñ ñ«½ª¡á πñá½∩Γ∞ π¬áºáΓѽ∞.
  102.  
  103.  
  104.               ü½¿ª¡¿Ñ ¿ ñá½∞¡¿Ñ ó맮óδ (NEAR ¿ FAR).
  105.  
  106.      Åα«µÑßß«α 8086  »«ññÑনóáÑΓ  ñóá  Γ¿»á  ¿¡ßΓαπ¬µ¿⌐  ó맮óá  ¿
  107. ó«ºóαáΓá: NEAR ¿ FAR. NEAR (í½¿ª¡∩∩) ¿¡ßΓαπ¬µ¿∩ »ÑαÑñáÑΓ π»αáó½Ñ¡¿Ñ
  108. ó ñαπúπε  Γ«τ¬π  ó¡πΓα¿ Γ«ú« ªÑ ¬«ñ«ó«ú« ßÑú¼Ñ¡Γá,  á FAR (ñá½∞¡∩∩)
  109. ¿¡ßΓαπ¬µ¿∩ »«ºó«½∩ÑΓ ¿º¼Ñ¡¿Γ∞ ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ.
  110.      ê¡ßΓαπ¬µ¿∩ NEAR  CALL  »«¼ÑΘáÑΓ  16-Γ¿  í¿Γ«óδ⌐ áñαÑß ó«ºóαáΓá
  111. (Γ«½∞¬« ß¼ÑΘÑ¡¿Ñ) ó ßΓѬ,  á  ¿¡ßΓαπ¬µ¿∩  FAR  CALL  »«¼ÑΘáÑΓ  32-σ
  112. í¿Γ«óδ⌐ áñαÑß  ó«ºóαáΓá  (¿  ßÑú¼Ñ¡Γ  ¿ ß¼ÑΘÑ¡¿Ñ).  æ««ΓóÑΓßΓóπεΘ¿Ñ
  113. ¿¡ßΓαπ¬µ¿¿ RET óδΓὬ¿óáεΓ ¿º ßΓѬá Γ«½∞¬« ß¼ÑΘÑ¡¿Ñ ¿½¿  ¿ ß¼ÑΘÑ¡¿Ñ
  114. ¿ ßÑú¼Ñ¡Γ.
  115.      Turbo Pascal   ¡á   «ß¡«óÑ    «íΩ∩ó½Ñ¡¿∩    »α«µÑñπαδ    íπñÑΓ
  116. áóΓ«¼áΓ¿τÑ߬¿   óδí¿αáΓ∞   »αáó¿½∞¡πε   ¼«ñѽ∞  ó맮óá.  Åα«µÑñπαδ,
  117. «íΩ∩ó½Ñ¡¡δÑ ó ßѬµ¿¿ interfaße  ¼«ñπ½∩,  íπñπΓ  FAR,  Γᬠ ¬á¬  «¡¿
  118. óδºδóáεΓß∩  ¿º ñαπú¿σ ¼«ñπ½Ñ⌐.  Åα«µÑñπαδ,  «íΩ∩ó½Ñ¡¡δÑ ó »α«úαá¼¼Ñ
  119. ¿½¿ ó ßѬµ¿¿ implementation ¼«ñπ½∩,  íπñπΓ NEAR,  Γᬠ¬á¬ «¡¿ ¼«úπΓ
  120. íδΓ∞ óδºóá¡δ Γ«½∞¬« ó¡πΓα¿ »α«úαá¼¼δ ¿½¿ ¼«ñπ½∩.
  121.      ä½∩ ¡Ñ¬«Γ«αδσ ß»Ñµ¿á½∞¡δσ µÑ½Ñ⌐  ¼«ªÑΓ  ΓαÑí«óáΓ∞ß∩  »α«µÑñπαá
  122. Γ¿»á  FAR.  ìá»α¿¼Ñα,  ó  »α«úαá¼¼áσ  ß  «óÑα½Ñ∩¼¿  óßÑ »α«µÑñπαδ ¿
  123. Σπ¡¬µ¿¿ ñ«½ª¡δ íδΓ∞ FAR;  ¬α«¼Ñ Γ«ú«,  Ñß½¿ »α«µÑñπαá  ¿½¿  Σπ¡¬µ¿∩
  124. »α¿ßóá¿óáÑΓß∩  »α«µÑñπα¡«⌐  »ÑαѼѡ¡«⌐,  «¡á ΓᬪѠñ«½ª¡á íδΓ∞ FAR.
  125. ä¿αÑ¬Γ¿óá ¬«¼»¿½∩Γ«αá $F ¿ß»«½∞ºπÑΓß∩  ñ½∩  «Γ¼Ñ¡δ  áóΓ«¼áΓ¿τÑ߬«ú«
  126. óδí«αá    ¼«ñѽ¿   ó맮óá   ¬«¼»¿½∩Γ«α«¼.   Åα«µÑñπαδ   ¿   Σπ¡¬µ¿¿
  127. «Γ¬«¼»¿½¿α«óá¡¡δÑ ó ß«ßΓ«∩¡¿¿ {$F+} óßÑúñá FAR; ó ß«ßΓ«∩¡¿¿ {$F-} -
  128. Turbo Pascal áóΓ«¼áΓ¿τÑ߬¿ óδí¿αáÑΓ »αáó¿½∞¡πε ¼«ñѽ∞. æ«ßΓ«∩¡¿Ñ »«
  129. π¼«½τá¡¿ε {$F-}.
  130.  
  131.  
  132.                   é½«ªÑ¡¡δÑ »α«µÑñπαδ ¿ Σπ¡¬µ¿¿.
  133.  
  134.      Åα«µÑñπαá ¿½¿   Σπ¡¬µ¿∩   ¡áºδóáÑΓß∩   ó½«ªÑ¡¡«⌐,   ¬«úñá  «¡á
  135. «íΩ∩ó½Ñ¡á  ó¡πΓα¿  ñαπú«⌐  »α«µÑñπαδ  ¿½¿  Σπ¡¬µ¿¿.  Å«   π¼«½τá¡¿ε
  136. 󽫪ѡ¡δÑ »α«µÑñπαδ ¿ Σπ¡¬µ¿¿ óßÑúñá ¿ß»«½∞ºπεΓ ¼«ñѽ∞ ó맮óá NEAR,
  137. »«ß¬«½∞¬π «¡¿ "ó¿ñ¿¼δ" Γ«½∞¬«  ó¡πΓα¿  «»αÑñѽѡ¡«⌐  »α«µÑñπαδ  ¿½¿
  138. Σπ¡¬µ¿¿, ¡áσ«ñ∩ΘÑ⌐ß∩ ó Γ«¼ ªÑ ¬«ñ«ó«¼ ßÑú¼Ñ¡ΓÑ. Äñ¡á¬« ó «óÑα½Ñ⌐¡δσ
  139. »α«úαá¼¼áσ  ñ¿αÑ¬Γ¿óá  {$F+}  ¿ß»«½∞ºπÑΓß∩  ñ½∩  πßΓá¡«ó½Ñ¡¿∩  óßÑσ
  140. »α«µÑñπα ¿ Σπ¡¬µ¿⌐ ó FAR, ó¬½ετá∩ ¿ ó½«ªÑ¡¡δÑ.
  141.      è«úñá óδºδóáÑΓß∩ ó½«ªÑ¡¡á∩ »α«µÑñπαá ¿½¿  Σπ¡¬µ¿∩,  ¬«¼»¿½∩Γ«α
  142. úÑ¡Ñα¿απÑΓ ¿¡ßΓαπ¬µ¿ε PUSH BP »ÑαÑñ CALL, ó αѺπ½∞ΓáΓÑ »ÑαÑñáóá∩ BP
  143. óδºδóáεΘÑ⌐  »α«µÑñπαÑ,  ¬á¬  ñ«»«½¡¿Γѽ∞¡δ⌐   »áαá¼ÑΓα.   Å«ß¬«½∞¬π
  144. óδºóá¡¡á∩   »α«µÑñπαá  πßΓá¡áó½¿óáÑΓ  ßó«⌐  ß«íßΓóÑ¡¡δ⌐  BP,  ¬  BP
  145. óδºδóáεΘÑ⌐ »α«µÑñπαδ ¼«ª¡« «íαáΓ¿Γ∞ß∩ ¬á¬ ¬  ß½«óπ,  σαá¡∩ΘѼπß∩  ó
  146. [BP  + 4] ¿½¿ [BP + 6],  Ñß½¿ »α«µÑñπαá FAR.  êß»«½∞ºπ∩ ßó∩º∞ τÑαѺ
  147. [BP + 4] ¿½¿ [BP + 6],  óδºδóáѼá∩  »α«µÑñπαá  ¼«ªÑΓ  «íαáΘáΓ∞ß∩  ¬
  148. ½«¬á½∞¡δ¼ »ÑαѼѡ¡δ¼ ¿º ßΓѬá óδºδóáεΘÑ⌐. àß½¿ óδºδóáεΘá∩ »α«µÑñπαá
  149. ó ßó«ε «τÑαÑñ∞ ∩ó½∩ÑΓß∩ ó½«ªÑ¡¡«⌐,  «¡á ΓᬪѠ¿¼ÑÑΓ ßó∩º∞ τÑαѺ [BP
  150. + 4] ¿½¿ [BP + 6]. æ½ÑñπεΘ¿⌐ »α¿¼Ñα ñѼ«¡ßΓα¿απÑΓ, ¬á¬ «íαáΘáΓ∞ß∩ ¬
  151. ½«¬á½∞¡δ¼ »ÑαѼѡ¡δ¼ ¿º «»ÑαáΓ«αá inline ó« ó½«ªÑ¡¡«⌐ »α«µÑñπαÑ:
  152.  
  153.      procedure A; near;
  154.      var IntA: Integer;
  155.  
  156.      procedure B; far;
  157.      var IntB: Integer;
  158.  
  159.      procedure C; near;
  160.      var IntC: Integer;
  161.  
  162.      begin
  163.         inline(
  164.         $8B/$46/<IntC/     {MOV AX,[BP+IntC]      ; AX=IntC}
  165.         $8B/$5E/$04/       {MOV BX,[BP+4]         ; BX=ßΓѬ B}
  166.         $36/$8B/$47/<IntB/ {MOV AX,SS:[BX+IntB]   ; AX=IntB}
  167.         $8B/$5E/$04/       {MOV BX,[BP+4]         ; BX=ßΓѬ B}
  168.         $36/$8B/$5F/$06/   {MOV BX,SS:[BX+6]      ; BX=ßΓѬ A}
  169.         $36/$8B/$47/<IntA/ {MOV AX,SS:[BX+IntA]   ; AX=IntA}
  170.         );
  171.      end;
  172.      begin end;
  173.      begin end;
  174.  
  175.      Åα¿¼Ñτá¡¿Ñ: é½«ªÑ¡¡δÑ  »α«µÑñπαδ  ¿  Σπ¡¬µ¿¿  ¡Ñ  ¼«úπΓ   íδΓ∞
  176. «íΩ∩ó½Ñ¡δ ß  ñ¿αÑ¬Γ¿ó«⌐  àxternal  ¿ «¡¿ ¡Ñ ¼«úπΓ íδΓ∞ »α«µÑñπα¡δ¼¿
  177. »áαá¼ÑΓαἿ.
  178.  
  179.  
  180.                         è«ñ óσ«ñá ¿ óδσ«ñá.
  181.  
  182.      èáªñá∩ »α«µÑñπαá  ¿ Σπ¡¬µ¿∩ Åá߬á½∩ ¡áτ¿¡áÑΓß∩ ¿ ºá¬á¡τ¿óáÑΓß∩
  183. ßΓá¡ñáαΓ¡δ¼  ¬«ñ«¼  óσ«ñá  ¿   óδσ«ñá,   ¬«Γ«αδ⌐   á¬Γ¿ó¿απÑΓ   ¿½¿
  184. ñÑá¬Γ¿ó¿απÑΓ ÑÑ.
  185.      æΓá¡ñáαΓ¡δ⌐ ¬«ñ óσ«ñá:
  186.  
  187.      push   bp               ; ß«σαá¡¿Γ∞ bp
  188.      mov    bp,sp            ; πßΓá¡«ó¿Γ∞ ßΓѬ
  189.      sub    sp,LocalSize     ; αáß»αÑñѽ¿Γ∞ ½«¬á½∞¡δÑ »ÑαѼѡ¡δÑ
  190.  
  191.      úñÑ LocalSize - αẼÑα ½«¬á½∞¡δσ  »ÑαѼѡ¡δσ.  ê¡ßΓαπ¬µ¿∩  sub
  192. óßΓáó½∩ÑΓß∩, Ñß½¿ LocalSize ¡Ñ αáó¡« 0. àß½¿ ¼«ñѽ∞ »α«µÑñπαδ NEAR,
  193. »áαá¼ÑΓαδ ¡áτ¿¡áεΓß∩ ß bp+4; Ñß½¿ FAR - Γ« ß bp+6.
  194.      æΓá¡ñáαΓ¡δ⌐ ¬«ñ óδσ«ñá:
  195.  
  196.      mov   sp,bp         ;πñ὿Γ∞ ½«¬á½∞¡δÑ »ÑαѼѡ¡δÑ
  197.      pop   bp            ;ó«ßßΓá¡«ó¿Γ∞ bp
  198.      ret   ParamSize     ;πñ὿Γ∞ »áαá¼ÑΓαδ ¿ óÑα¡πΓ∞ß∩
  199.  
  200.      úñÑ ParamSize  -  αẼÑα »áαá¼ÑΓα«ó.  ê¡ßΓαπ¬µ¿∩ ret -φΓ« NEAR
  201. ¿½¿ FAR ó«ºóαáΓ, ó ºáó¿ß¿¼«ßΓ¿ «Γ ¼«ñѽ¿ ó맮óá »α«µÑñπαδ.
  202.  
  203.  
  204.                       æ«ú½áΦÑ¡¿∩ « αÑú¿ßΓαáσ.
  205.  
  206.      Åα«µÑñπαδ ¿ Σπ¡¬µ¿¿ ñ«½ª¡δ ß«σαá¡∩Γ∞ αÑú¿ßΓαδ BP, SP, SS ¿ DS.
  207. éßÑ ñαπú¿Ñ αÑú¿ßΓαδ ¼«ª¡« ¿º¼Ñ¡∩Γ∞.
  208.  
  209.  
  210.                          Åα«µÑñπαδ óδσ«ñá.
  211.  
  212.      ôßΓá¡«ó¿ó »α«µÑñπαπ  óδσ«ñá,  éδ  ¼«ªÑΓÑ »«½πτ¿Γ∞ ¬«¡Γα«½∞ ¡áñ
  213. »α«µÑßß«¼  ºáóÑαΦÑ¡¿∩  »α«úαá¼¼δ.  ¥Γ«  »«½Ñº¡«,  ¬«úñá  éδ  σ«Γ¿ΓÑ
  214. ßñѽáΓ∞  ¡áñѪ¡δ¼  óδ»«½¡Ñ¡¿Ñ  ñÑ⌐ßΓó¿⌐  ñ«  ºáóÑαΦÑ¡¿∩  »α«úαá¼¼δ;
  215. Γ¿»¿τ¡δ⌐ »α¿¼Ñα - «í¡«ó½Ñ¡¿Ñ ¿ ºá¬αδΓ¿Ñ Σá⌐½«ó.
  216.      ÅÑαѼѡ¡á∩ Γ¿»á  πáºáΓѽ∞  ExitProc  »«ºó«½∩ÑΓ  éá¼ πßΓá¡«ó¿Γ∞
  217. »α«µÑñπαπ óδσ«ñá.  Åα«µÑñπαá óδσ«ñá  óßÑúñá  óδºδóáÑΓß∩  ¬á¬  τáßΓ∞
  218. ºáóÑαΦÑ¡¿∩   »α«úαá¼¼δ,   ó   Γ«¼   τ¿ß½Ñ  ¡«α¼á½∞¡«ú«  ºáóÑαΦÑ¡¿∩,
  219. ºáóÑαΦÑ¡¿∩ τÑαѺ ó맮ó Halt ¿½¿  ºáóÑαΦÑ¡¿∩  ¿º-ºá  «Φ¿í¬¿  óαѼѡ¿
  220. óδ»«½¡Ñ¡¿∩.
  221.      Åα«µÑñπαá óδσ«ñá   ¡Ñ   ¿¼ÑÑΓ   »áαá¼ÑΓα«ó   ¿   ñ«½ª¡á   íδΓ∞
  222. «Γ¬«¼»¿½¿α«óá¡á  ß ñ¿αÑ¬Γ¿ó«⌐ {$F+} ñ½∩ πßΓá¡«ó½Ñ¡¿∩ ñá½∞¡Ñ⌐ ¼«ñѽ¿
  223. ó맮óá.
  224.      Åα¿ »αáó¿½∞¡«⌐   πßΓá¡«ó¬Ñ,   »α«µÑñπαá  óδσ«ñá  ñÑ⌐ßΓó¿Γѽ∞¡«
  225. ßΓá¡«ó¿Γß∩ τáßΓ∞ε  µÑ»«τ¬¿  »α«µÑñπα  óδσ«ñá.  ¥Γá  µÑ»«τ¬á  ñѽáÑΓ
  226. 󫺼«ª¡δ¼ ¿¡ßΓá½½∩µ¿ε  »α«µÑñπα  óδσ«ñá ñ½∩ ¼«ñπ½Ñ⌐ ΓᬪѠ¬á¬ ¿ ñ½∩
  227. »α«úαá¼¼δ.  ìѬ«Γ«αδÑ ¼«ñπ½¿ ¿¡ßΓ὿απεΓ »α«µÑñπαπ óδσ«ñᠬᬠτáßΓ∞
  228. ¿σ ¬«ñá ¿¡¿µ¿á½¿ºáµ¿¿,  φΓ« úáαá¡Γ¿απÑΓ, τΓ« ñá¡¡á∩ »α«µÑñπαá íπñÑΓ
  229. óδºóá¡á ñ½∩ «τ¿ßΓ¬¿  »«ß½Ñ  ¼«ñπ½∩;  ¡á»α¿¼Ñα,  ºá¬αδΓ∞  Σá⌐½δ  ¿½¿
  230. ó«ßßΓá¡«ó¿Γ∞   óÑ¬Γ«αá   »αÑαδóá¡¿⌐.   Åα«µÑñπαδ   µÑ»«τ¬¿  óδσ«ñá,
  231. óδ»«½¡∩εΓß∩ ó   »«α∩ñ¬Ñ,   «íαáΓ¡«¼   »«α∩ñ¬π   ¿¡ßΓá½½∩µ¿¿.    ¥Γ«
  232. úáαá¡Γ¿απÑΓ,   τΓ«   óδσ«ñ¡«⌐   ¬«ñ  ½εí«ú«  ¿º  ¼«ñπ½Ñ⌐  ¡Ñ  íπñÑΓ
  233. óδ»«½¡∩Γ∞ß∩ ñ« óδ»«½¡Ñ¡¿∩  óδσ«ñ¡«ú«  ¬«ñá  ¼«ñπ½Ñ⌐,  ºáó¿ß∩Θ¿σ  «Γ
  234. ¡Ñú«.
  235.      ùΓ«íδ ß«σαá¡¿Γ∞  µÑ»«τ¬π  óδσ«ñá  ¡Ñ»«óαѪñÑ¡¡«⌐,  éδ   ñ«½ª¡δ
  236. ß«σαá¡¿Γ∞  ΓѬπΘÑÑ  ß«ñÑন¼«Ñ  ExitProc  ñ« ¿º¼Ñ¡Ñ¡¿∩ ÑÑ áñαÑßá ¡á
  237. éáΦπ  »α«µÑñπαπ  óδσ«ñá.  èα«¼Ñ  Γ«ú«,  »Ñαóδ⌐  «»ÑαáΓ«α  ó   éáΦÑ⌐
  238. »α«µÑñπαÑ óδσ«ñá ñ«½ªÑ¡ ó«ßßΓá¡«ó¿Γ∞ ºá»«¼¡Ñ¡¡«Ñ º¡áτÑ¡¿Ñ ExitProc.
  239. æ½ÑñπεΘá∩  »α«úαἼᠠñѼ«¡ßΓα¿απÑΓ  ¼ÑΓ«ñ   αÑ὿ºáµ¿¿   »α«µÑñπαδ
  240. óδσ«ñá:
  241.  
  242.      program Textexit;
  243.      var
  244.         ExitSave: Pointer;
  245.  
  246.      procedure MyExit; far;
  247.      begin
  248.         ExitProc := ExitSave; {ß¡áτá½á ß«σαá¡∩ÑΓ ßΓáαδ⌐ óÑ¬Γ«α}
  249.        ...
  250.      end;
  251.  
  252.      begin
  253.         ExitSave := ExitProc;
  254.         ExitProc := @MyExit;
  255.         ...
  256.      end.
  257.  
  258.  
  259.      Åα¿ óσ«ñÑ »α«úαá¼¼á ß«σαá¡∩ÑΓ ß«ñÑন¼«Ñ ExitProc ó ExitSave ¿
  260. ºáΓѼ ¿¡ßΓá½½¿απÑΓ »α«µÑñπαπ óδσ«ñá MyExit.  MyExit, »«ß½Ñ Γ«ú« ¬á¬
  261. «¡á íδ½á óδºóá¡á ¬á¬  τáßΓ∞  »α«µÑßßá  ºáóÑαΦÑ¡¿∩,  ó«ßßΓá¡áó½¿óáÑΓ
  262. »αÑñδñπΘπε »α«µÑñπαπ óδσ«ñá.
  263.      Åα«úαἼᠺáóÑαΦÑ¡¿∩ í¿í½¿«ΓѬ¿ óαѼѡ¿  óδ»«½¡Ñ¡¿∩ »α«ñ«½ªáÑΓ
  264. óδºδóáΓ∞  »α«µÑñπαδ  óδσ«ñá  ñ«  ΓÑσ  »«α,  »«¬á ExitProc ¡Ñ ßΓá¡ÑΓ
  265. αáó¡«⌐  nil.  ùΓ«íδ  »αÑñ«ΓóαáΓ¿Γ∞   íÑ߬«¡Ñτ¡δ⌐   µ¿¬½,   ExitProc
  266. πßΓá¡áó½¿óáÑΓß∩   ó  nil  ñ«  ¬áªñ«ú«  ó맮óá,  Γᬠ τΓ«  ß½ÑñπεΘá∩
  267. »α«µÑñπαá óδσ«ñá óδºδóáÑΓß∩ Γ«½∞¬« Γ«úñá,  ¬«úñá ΓѬπΘá∩  »α«µÑñπαá
  268. óδσ«ñá   »α¿ßó«¿Γ   áñαÑß  ó  ExitProc.  àß½¿  ó  »α«µÑñπαÑ  óδσ«ñá
  269. »α«¿º«⌐ñÑΓ «Φ¿í¬á, Γ« «¡á ¡Ñ óδºδóáÑΓß∩ ß¡«óá.
  270.      Åα«µÑñπαá óδσ«ñá   ¼«ªÑΓ   á¡á½¿º¿α«óáΓ∞   »α¿τ¿¡π  ºáóÑαΦÑ¡¿∩
  271. »α«óÑᬫ⌐  µÑ½«τ¿ß½Ñ¡¡«⌐  »ÑαѼѡ¡«⌐  ExitCode  ¿  »ÑαѼѡ¡«⌐  Γ¿»á
  272. pointer ErrorAddr.
  273.      é ß½πτáÑ ¡«α¼á½∞¡«ú« ºáóÑαΦÑ¡¿∩ ExitCode αáó¡á 0 ¿ ErrorAddr -
  274. nil.  é  ß½πτáÑ  ºáóÑαΦÑ¡¿∩  »«ß½Ñ  ó맮óá Halt,  ExitCode ß«ñÑনΓ
  275. º¡áτÑ¡¿Ñ »ÑαÑñá¡¡«Ñ ó Halt ¿ ErrorAddr -  nil.  ìᬫ¡Ñµ,  ó  ß½πτáÑ
  276. ºáóÑαΦÑ¡¿∩  ¿º-ºá «Φ¿í¬¿ óαѼѡ¿ óδ»«½¡Ñ¡¿∩,  ExitCode ß«ñÑαª¿Γ ¬«ñ
  277. «Φ¿í¬¿ ¿ ErrorAddr - áñαÑß «Φ¿í«τ¡«ú« «»ÑαáΓ«αá.
  278.      Å«ß½Ññ¡∩∩ »α«µÑñπαá    óδσ«ñá   (¿¡ßΓ὿α«óá¡¡á∩   í¿í½¿«ΓѬ«⌐
  279. óαѼѡ¿ óδ»«½¡Ñ¡¿∩) ºá¬αδóáÑΓ Σá⌐½δ Input ¿ Output, ó«ßßΓá¡áó½¿óáÑΓ
  280. óÑ¬Γ«αá »αÑαδóá¡¿⌐,  πßΓá¡«ó½Ñ¡¡δÑ Turbo Pascal.  èα«¼Ñ Γ«ú«,  Ñß½¿
  281. ErrorAddr  ¡Ñ  nil,  Γ«  óδñáÑΓß∩  ß««íΘÑ¡¿Ñ  «í   «Φ¿í¬Ñ   óαѼѡ¿
  282. óδ»«½¡Ñ¡¿∩.
  283.      àß½¿ Bδ σ«Γ¿ΓÑ  «íαáí«ΓáΓ∞  «Φ¿í¬π  óαѼѡ¿  óδ»«½¡Ñ¡¿∩  ßἿ,
  284. ¿¡ßΓá½½¿απ⌐ΓÑ »α«µÑñπαπ   óδσ«ñá,  ¬«Γ«αá∩  »α«óÑα∩ÑΓ  ErrorAddr  ¿
  285. óδñáÑΓ ß««íΘÑ¡¿Ñ Ñß½¿ «¡ ¡Ñ nil.  ìᬫ¡Ñµ,  ñ« ó«ºóαáΓá  πßΓá¡«ó¿ΓÑ
  286. ErrorAddr ó nil,  ΓᬠτΓ«íδ ñαπú¿Ñ »α«µÑñπαδ óδσ«ñá ¡Ñ óδñ὿ ß¡«óá
  287. ß««íΘÑ¡¿Ñ «í «Φ¿í¬Ñ.
  288.      Å«ß½Ñ Γ«ú«  ¬á¬  í¿í½¿«ΓѬᠠóαѼѡ¿  óδ»«½¡Ñ¡¿∩  óδºóá½á  óßÑ
  289. »α«µÑñπαδ  óδσ«ñá,  «¡á  »ÑαÑñáÑΓ  π»αáó½Ñ¡¿Ñ  ó   DOS,   »ÑαÑñáóá∩
  290. º¡áτÑ¡¿Ñ, σαá¡∩ΘÑÑß∩ ó ExitCode, ¬á¬ ¬«ñ ó«ºóαáΓá.
  291.  
  292.  
  293.                        Äíαáí«Γ¬á »αÑαδóá¡¿⌐.
  294.  
  295.      ü¿í½¿«ΓѬá óαѼѡ¿ óδ»«½¡Ñ¡¿∩ Turbo Pascal ¿ ¬«ñ, úÑ¡Ñα¿απѼδ⌐
  296. ¬«¼»¿½∩Γ«α«¼,  »«½¡«ßΓ∞ε ñ«»π߬áεΓ »αÑαδóá¡¿∩.  ü«½ÑÑ Γ«ú«, í«½∞Φá∩
  297. τáßΓ∞ í¿í½¿«ΓѬ¿ óαѼѡ¿ óδ»«½¡Ñ¡¿∩ αÑÑ¡ΓÑαáíѽ∞¡á∩,  τΓ« »«ºó«½∩ÑΓ
  298. »¿ßáΓ∞ ¡á Turbo Pascal »α«úαá¼¼δ «íαáí«Γ¬¿ »αÑαδóá¡¿⌐.
  299.  
  300.  
  301.                    ìỿßá¡¿Ñ »α«µÑñπα »αÑαδóá¡¿∩.
  302.  
  303.      Åα«µÑñπαá »αÑαδóá¡¿∩  «íΩ∩ó½∩ÑΓß∩  ß   ñ¿αÑ¬Γ¿ó«⌐   Interrupt.
  304. èáªñá∩  »α«µÑñπαá  »αÑαδóá¡¿∩ ñ«½ª¡á ¿¼ÑΓ∞ ß½ÑñπεΘ¿⌐ ºáú«½«ó«¬ (¿½¿
  305. τáßΓ∞ Ñú«, ¬á¬ «»¿ßá¡« ¡¿ªÑ):
  306.  
  307.      procedure IntHandler(Flags, CS, IP, AX, BX, CX, DX,
  308.                           SI, DI, DS, ES, BP: Word);
  309.      interrupt;
  310.      begin
  311.      ...
  312.      end;
  313.  
  314.      èᬠéδ  ó¿ñ¿ΓÑ,  óßÑ αÑú¿ßΓαδ »ÑαÑñáεΓß∩ ¬á¬ »ßÑóñ«-»áαá¼ÑΓαδ.
  315. Æá¬,  τΓ« éδ ¼«ªÑΓÑ ¿σ ¿ß»«½∞º«óáΓ∞ ¿ ¼«ñ¿Σ¿µ¿α«óáΓ∞ ó éáΦѼ  ¬«ñÑ.
  316. éδ  ¼«ªÑΓÑ «»πßΓ¿Γ∞ ¡Ñ¬«Γ«αδÑ ¿½¿ óßÑ »áαá¼ÑΓαδ,  ¡áτ¿¡á∩ ß Flags ¿
  317. ñ« BP.  üπñÑΓ «Φ¿í¬«⌐ - «íΩ∩ó¿Γ∞ í«½∞ΦÑ »áαá¼ÑΓα«ó, τѼ »α¿óÑñÑ¡« ó
  318. »αÑñδñπΘѼ  »α¿¼ÑαÑ  ¿½¿  ªÑ  »α«»πßΓ¿Γ∞ »áαá¼ÑΓα íѺ »α«»π߬á óßÑσ
  319. ßΓ«∩Θ¿σ ñ« ¡Ñú« (¡« ß««íΘÑ¡¿∩ «í «Φ¿í¬Ñ ¡Ñ íπñÑΓ). Åα¿¼Ñα:
  320.  
  321.      procedure IntHandler(DI,ES,BP : Word); {¡ÑóÑα¡«}
  322.  
  323.      procedure IntHandler(SI,DI,DS,ES,BP : Word); {¡ÑóÑα¡«}
  324.  
  325.      ìá óσ«ñÑ   »α«µÑñπαá   «íαáí«Γ¬¿   »αÑαδóá¡¿⌐    áóΓ«¼áΓ¿τÑ߬¿
  326. ß«σαá¡∩ÑΓ óßÑ  αÑú¿ßΓαδ  (ó¡Ñ ºáó¿ß¿¼«ßΓ¿ «Γ ºáú«½«ó¬á »α«µÑñπαδ) ¿
  327. ¿¡¿µ¿á½¿º¿απÑΓ αÑú¿ßΓα DS :
  328.  
  329.      push   ax
  330.      push   bx
  331.      push   cx
  332.      push   dx
  333.      push   si
  334.      push   di
  335.      push   ds
  336.      push   es
  337.      push   bp
  338.      mov    bp,sp
  339.      sub    sp, LocalSize
  340.      mov    ax, SEG DATA
  341.      mov    ds,ax
  342.  
  343.      çá¼ÑΓ∞ΓÑ, «ΓßπΓßΓó¿Ñ ¿¡ßΓαπ¬µ¿¿ STI ñ½∩ αáºαÑΦÑ¡¿∩ »αÑαδóá¡¿⌐.
  344. éδ ñ«½ª¡δ ¬«ñ¿α«óáΓ∞ ÑÑ ßἿ (Ñß½¿ ΓαÑíπÑΓß∩), ¿ß»«½∞ºπ∩ ¿¡ßΓαπ¬µ¿ε
  345. Inline.  éδσ«ñ¡«⌐  ¬«ñ   ó«ßßΓá¡áó½¿óáÑΓ   αÑú¿ßΓαδ   ¿   óδ»«½¡∩ÑΓ
  346. ¿¡ßΓαπ¬µ¿ε ó«ºóαáΓá:
  347.  
  348.      mov    sp,bp
  349.      pop    bp
  350.      pop    es
  351.      pop    ds
  352.      pop    di
  353.      pop    si
  354.      pop    dx
  355.      pop    cx
  356.      pop    bx
  357.      pop    ax
  358.      iret
  359.  
  360.      Åα«µÑñπαá »αÑαδóá¡¿∩   ¼«ªÑΓ  ¼«ñ¿Σ¿µ¿α«óáΓ∞  ßó«¿  »áαá¼ÑΓαδ.
  361. 꺼ѡ∩∩   «íΩ∩ó½Ñ¡¡δÑ   »áαá¼ÑΓαδ,   éδ    íπñÑΓÑ    ¼«ñ¿Σ¿µ¿α«óáΓ∞
  362. ß««ΓóÑΓßΓóπεΘ¿Ñ  αÑú¿ßΓαδ  »α¿  ó«ºóαáΓÑ ¿º «íαáí«Γτ¿¬á »αÑαδóá¡¿⌐.
  363. ¥Γ« ¼«ªÑΓ íδΓ∞ »«½Ñº¡δ¼, ¬«úñá óδ ¿ß»«½∞ºπÑΓÑ «íαáí«Γτ¿¬ »αÑαδóá¡¿⌐
  364. ¬á¬ »«½∞º«óáΓѽ∞߬¿⌐ ßÑαó¿ß, ¡á»α¿¼Ñα, ¬á¬ ßÑαó¿ß DOS INT 21H.
  365.      é »α«µÑñπαáσ  »αÑαδóá¡¿⌐,  ¬«Γ«αδÑ   «íαáíáΓδóáεΓ   á»»áαáΓ¡δÑ
  366. »αÑαδóá¡¿∩,  ¡Ñ  ñ«½ª¡δ ¿ß»«½∞º«óáΓ∞ß∩ ½εíδÑ »α«úαá¼¼δ óó«ñá/óδó«ñá
  367. Turbo Pascal  ¿  »α«úαá¼¼δ  ñ¿¡á¼¿τÑ߬«ú«   αáß»αÑñѽѡ¿∩   »á¼∩Γ¿,
  368. »«ß¬«½∞¬π  «¡¿  ¡Ñ  αÑÑ¡ΓÑαáíѽ∞¡δÑ.  èα«¼Ñ  Γ«ú«,  ¡Ñ  ¼«úπΓ  íδΓ∞
  369. ¿ß»«½∞º«óá¡δ Σπ¡¬µ¿¿ DOS, Γᬠ¬á¬ DOS ¡Ñ αÑÑ¡ΓÑαáíѽ∞¡á∩.
  370.