home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BBS 1
/
BBS#1.iso
/
document
/
pas60pg.lzh
/
PG16.MY
< prev
next >
Wrap
Text File
|
1991-02-04
|
28KB
|
686 lines
ù Ç æ Æ £ 3.
TURBO PASCAL éìôÆÉê.
âïÇéÇ 16.
ÅÇîƒÆ£.
¥Γá ú½áóá «»¿ßδóáÑΓ ó ñÑΓá½∩σ ß»«ß«íδ ¿ß»«½∞º«óá¡¿∩ »á¼∩Γ¿
»α«úαἼἿ ¡á Turbo Pascal. îδ »«ß¼«Γα¿¼ ¬áαΓπ »á¼∩Γ¿ »α«úαá¼¼ ¡á
Turbo Pascal, ó¡πΓαÑ¡¡¿Ñ Σ«α¼áΓδ ñá¡¡δσ, ¼«¡¿Γ«α ¬πτ¿ ¿ »α∩¼«⌐
ñ«ßΓπ» ¬ »á¼∩Γ¿.
èáαΓá »á¼∩Γ¿ Turbo Pascal.
É¿ß. 16.1 »αÑñßΓáó½∩ÑΓ αáß»αÑñѽѡ¿Ñ »á¼∩Γ¿ ñ½∩ »α«úαá¼¼δ ¡á
Turbo Pascal.
ÅαÑΣ¿¬ß ßÑú¼Ñ¡Γá »α«úαá¼¼δ (Program Segment Prefix - PSP) -
φΓ« 256-Γ¿ íá⌐Γ«óá∩ «í½áßΓ∞, ß«ºñáóáѼá∩ DOS »α¿ ºáúαπº¬Ñ
»α«úαá¼¼δ. ÇñαÑß ßÑú¼Ñ¡Γá PSP σαá¡¿Γß∩ ó »ÑαѼѡ¡«⌐ PrefixSeg.
èáªñδ⌐ ¼«ñπ½∞ (¿ ú½áó¡á∩ »α«úαá¼¼á ¿ ¬áªñδ⌐ ¼«ñπ½∞) ¿¼ÑÑΓ ßó«⌐
¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ. â½áó¡á∩ »α«úαá¼¼á ºá¡¿¼áÑΓ »Ñαóδ⌐ ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ;
¬«ñ«óδÑ ßÑú¼Ñ¡Γδ, ¬«Γ«αδÑ ß½ÑñπεΓ ºá ¡¿¼, ºá¡¿¼áεΓ ¼«ñ㫨 (ó
»«α∩ñ¬Ñ, «íαáΓ¡«¼ Γ«¼π, ¬á¬ «¡¿ ß½Ññ«ó὿ ó «»ÑαáΓ«αÑ uses), ¿
»«ß½Ññ¡¿⌐ ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ ºá¡¿¼áÑΓ í¿í½¿«ΓѬá óαѼѡ¿ óδ»«½¡Ñ¡¿∩
(¼«ñπ½∞ System). ÉẼÑα «ñ¡«ú« ¬«ñ«ó«ú« ßÑú¼Ñ¡Γá ¡Ñ ¼«ªÑΓ »αÑóδΦáΓ∞
64è, ¡« «íΘ¿⌐ αẼÑα ¬«ñá «úαá¡¿τÑ¡ Γ«½∞¬« ¿¼ÑεΘÑ⌐ß∩ »á¼∩Γ∞ε.
É¿ß. 16.1. Éáß»αÑñѽѡ¿Ñ »á¼∩Γ¿ ó Turbo Pascal.
éÑασ¡∩∩ úαá¡¿µá »á¼∩Γ¿ DOS
HeapEnd ──÷┌────────────────────────────┐
│ │
│ ßó«í«ñ¡á∩ »á¼∩Γ∞ │
│ │
HeapPtr ──÷│............................│
│ ¬πτá (αáßΓÑΓ óóÑασ) │
HeapOrg ──÷├────────────────────────────┤≈── OvrHeapEnd
│ «óÑα½Ñ⌐¡δ⌐ íπΣÑα │
├────────────────────────────┤≈── OvrHeapOrg
│ ßΓѬ (αáßΓÑΓ ó¡¿º) │
SSeg:SPtr ──÷│............................│
│ ßó«í«ñ¡δ⌐ ßΓѬ │
SSeg:0000 ──÷├────────────────────────────┤
│ ú½«íá½∞¡δÑ »ÑαѼѡ¡δÑ │
│............................│≈───────┐
│ Γ¿»¿α«óá¡¡δÑ ¬«¡ßΓá¡Γδ │ │
DSeg:0000 ──÷├────────────────────────────┤ │
│ ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ │ │
│ ¼«ñπ½∩ System │ │
│............................│ │
│ ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ │ │
│ »Ñαó«ú« ¼«ñπ½∩ │ │
│............................│ │
└────────────────────────────┘ │
. ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ . ß«ñÑαªáΓ «íαáº
. ñαπú¿σ ¼«ñπ½Ñ⌐ . .EXE Σá⌐½á
┌────────────────────────────┐ │
│............................│ │
│ ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ │ │
│ »«ß½Ññ¡Ñú« ¼«ñπ½∩ │ │
├────────────────────────────┤ │
│ ¬«ñ«óδ⌐ ßÑú¼Ñ¡Γ │ │
│ ú½áó¡«⌐ »α«úαá¼¼δ │ │
├────────────────────────────┤≈───────┘
│ »αÑΣ¿¬ß ßÑú¼Ñ¡Γá »α«úαá¼¼δ │
│ (PSP) │
PrefixSeg ──÷└────────────────────────────┘
쿪¡∩∩ úαá¡¿µá »á¼∩Γ¿ DOS
æÑú¼Ñ¡Γ ñá¡¡δσ (áñαÑßπѼδ⌐ τÑαѺ DS) ß«ñÑαª¿Γ óßÑ ú½«íá½∞¡δÑ
»ÑαѼѡ¡δÑ ¿ ºáΓѼ óßÑ Γ¿»¿α«óá¡¡δÑ ¬«¡ßΓá¡Γδ. ÉÑú¿ßΓα DS ¡¿¬«úñá
¡Ñ ¿º¼Ñ¡∩ÑΓß∩ ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ. ÉẼÑα ßÑú¼Ñ¡Γá ñá¡¡δσ
¡Ñ ¼«ªÑΓ »αÑóδΦáΓ∞ 64è.
Åα¿ ºá»π᪥ »α«úαá¼¼δ αÑú¿ßΓα ßÑú¼Ñ¡Γá ßΓѬá (SS) ¿ π¬áºáΓѽ∞
ßΓѬá (SP) πßΓá¡áó½¿óáεΓß∩ Γá¬, τΓ« SS:SP π¬áºδóáÑΓ ¡á »Ñαóδ⌐ íá⌐Γ
»«ß½Ñ ßÑú¼Ñ¡Γá ßΓѬá. ÉÑú¿ßΓα SS ¡¿¬«úñá ¡Ñ ¿º¼Ñ¡∩ÑΓß∩ ó« óαѼ∩
óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ, á SP ¼«ªÑΓ »ÑαÑñó¿úáΓ∞ß∩ 󡿺 »«¬á ¡Ñ
ñ«ßΓ¿ú¡ÑΓ ¬«¡µá ßÑú¼Ñ¡Γá. ÉẼÑα ßΓѬ«ó«ú« ßÑú¼Ñ¡Γá ¡Ñ ¼«ªÑΓ
»αÑóδΦáΓ∞ 64è; αẼÑα »« π¼«½τá¡¿ε - 16è, «¡ ¼«ªÑΓ íδΓ∞ ¿º¼Ñ¡Ñ¡
ñ¿αÑ¬Γ¿ó«⌐ ¬«¼»¿½∩Γ«αá $M.
üπΣÑα «óÑα½ÑÑó ¿ß»«½∞ºπÑΓß∩ ßΓá¡ñáαΓ¡δ¼ ¼«ñπ½Ñ¼ Overlay ñ½∩
σαá¡Ñ¡¿∩ «óÑα½Ñ⌐¡«ú« ¬«ñá. ÉẼÑα «óÑα½Ñ⌐¡«ú« íπΣÑαá »« π¼«½τá¡¿ε
ß««ΓóÑΓßΓóπÑΓ αẼÑαπ ¡á¿í«½∞ΦÑú« «óÑα½Ñ∩ ó »α«úαá¼¼Ñ; Ñß½¿ ó
»α«úαá¼¼Ñ ¡ÑΓ «óÑα½ÑÑó, αẼÑα íπΣÑαá «óÑα½ÑÑó αáóÑ¡ 0. ÉẼÑα
íπΣÑαá «óÑα½ÑÑó ¼«ªÑΓ íδΓ∞ πóѽ¿τÑ¡ ß »«¼«Θ∞ε ó맮óá »α«úαá¼¼δ
OvrSetBuf ¼«ñπ½∩ Overlay; ó φΓ«¼ ß½πτáÑ αẼÑα ¬πτ¿ ß««ΓóÑΓßΓóÑ¡¡«
π¼Ñ¡∞ΦáÑΓß∩, ß¼ÑΘÑ¡¿Ñ¼ óóÑασ HeapOrg.
èπτá σαá¡¿Γ ñ¿¡á¼¿τÑ߬¿Ñ »ÑαѼѡ¡δÑ, Γ« ÑßΓ∞ »ÑαѼѡ¡δÑ,
αáß»αÑñѽѡ¡δÑ τÑαѺ ó맮ó ßΓá¡ñáαΓ¡δσ »α«µÑñπα New ¿ GetMem. èπτá
ºá¡¿¼áÑΓ óßε ¿½¿ τáßΓ∞ ßó«í«ñ¡«⌐ »á¼∩Γ¿, «ßΓáóΦÑ⌐ß∩ »«ß½Ñ ºáúαπº¬¿
»α«úαá¼¼δ. öá¬Γ¿τÑ߬¿ αẼÑα ¬πτ¿ ºáó¿ß¿Γ «Γ ¼¿¡¿¼á½∞¡«ú« ¿
¼á¬ß¿¼á½∞¡«ú« º¡áτÑ¡¿⌐ ¬πτ¿, ¬«Γ«αδÑ ¼«úπΓ íδΓ∞ πßΓá¡«ó½Ñ¡δ
ñ¿αÑ¬Γ¿ó«⌐ ¬«¼»¿½∩Γ«αá $M. ÉẼÑα ¬πτ¿ ¡¿¬«úñá ¡Ñ íπñÑΓ ¼Ñ¡∞ΦÑ
¼¿¡¿¼á½∞¡«ú« º¡áτÑ¡¿∩ ¿ ¡Ñ »αÑóδß¿Γ ¼á¬ß¿¼á½∞¡«ú«. àß½¿ ó ß¿ßΓѼÑ
¡ÑΓ »á¼∩Γ¿ αáó¡«ú« ¼¿¡¿¼á½∞¡«¼π º¡áτÑ¡¿ε, »α«úαá¼¼á ¡Ñ íπñÑΓ
óδ»«½¡∩Γ∞ß∩. î¿¡¿¼á½∞¡«Ñ º¡áτÑ¡¿Ñ ¬πτ¿ »« π¼«½τá¡¿ε αáó¡« 0 íá⌐Γ,
¼á¬ß¿¼á½∞¡«Ñ - 640è; φΓ« «º¡áτáÑΓ, τΓ« »« π¼«½τá¡¿ε ¬πτá íπñÑΓ
ºá¡¿¼áΓ∞ óßε «ßΓáóΦπεß∩ »á¼∩Γ∞.
ô»αáó½Ñ¡¿Ñ ¬πτÑ⌐ «ßπΘÑßΓó½∩ÑΓ ¼«¡¿Γ«α ¬πτ¿ (¬«Γ«αδ⌐ ∩ó½∩ÑΓß∩
τáßΓ∞ε í¿í½¿«ΓѬ¿ óαѼѡ¿ óδ»«½¡Ñ¡¿∩ Turbo Pascal). Ä¡ ñÑΓá½∞¡«
«»¿ßá¡ ó ß½ÑñπεΘѼ αáºñѽÑ.
î«¡¿Γ«α ¬πτ¿.
èπτá ¿¼ÑÑΓ ßΓѬ«óπε ßΓαπ¬Γπαπ, αáßΓπΘπε «Γ ¡¿ª¡¿σ áñαÑß«ó
»á¼∩Γ¿ ó ßÑú¼Ñ¡ΓÑ ¬πτ¿. 쿪¡∩∩ úαá¡¿µá ¬πτ¿ σαá¡¿Γß∩ ó »ÑαѼѡ¡«⌐
HeapOrg, á óÑαΦ¿¡á ¬πτ¿, ß««ΓóÑΓßΓóπεΘá∩ ¡¿ª¡Ñ⌐ úαá¡¿µÑ ßó«í«ñ¡«⌐
»á¼∩Γ¿, σαá¡¿Γß∩ ó »ÑαѼѡ¡«⌐ HeapPtr. èáªñδ⌐ αáº, ¬«úñá
ñ¿¡á¼¿τÑ߬á∩ »ÑαѼѡ¡á∩ αáß»αÑñѽ∩ÑΓß∩ ó ¬πτÑ (τÑαѺ New ¿½¿
GetMem), ¼«¡¿Γ«α ¬πτ¿ »ÑαÑñó¿úáÑΓ HeapPtr óóÑασ ¡á αẼÑα φΓ«⌐
»ÑαѼѡ¡«⌐, ßΓáó∩ ñ¿¡á¼¿τÑ߬¿Ñ »ÑαѼѡ¡δÑ «ñ¡π ºá ñαπú«⌐.
HeapPtr ¡«α¼á½¿ºπÑΓß∩ »«ß½Ñ ¬áªñ«⌐ «»Ñαᵿ¿, πßΓá¡áó½¿óá∩
ß¼ÑΘÑ¡¿Ñ ó ñ¿á»áº«¡Ñ «Γ $0000 ñ« $000F. îá¬ß¿¼á½∞¡δ⌐ αẼÑα
»ÑαѼѡ¡«⌐, ¬«Γ«αδ⌐ ¼«ªÑΓ íδΓ∞ αáß»αÑñѽѡ ó ¬πτÑ, αáóÑ¡ 65519 íá⌐Γ
($10000 - $000F), »«ß¬«½∞¬π ¬áªñá∩ »ÑαѼѡ¡á∩ ñ«½ª¡á »«½¡«ßΓ∞ε
¡áσ«ñ¿Γ∞ß∩ ó «ñ¡«¼ ßÑú¼Ñ¡ΓÑ.
Äßó«í«ªñÑ¡¿Ñ »á¼∩Γ¿.
信ἿτÑ߬¿Ñ »ÑαѼѡ¡δÑ, σαá¡∩Θ¿Ñß∩ ó ¬πτÑ, πñá½∩εΓß∩ «ñ¡¿¼ ¿º
ñóπσ »πΓÑ⌐: (1) τÑαѺ Dispose ¿½¿ FreeMem (2) τÑαѺ Mark ¿ Release.
Åα«ßΓÑ⌐Φ¿⌐ ß»«ß«í - φΓ« ß Mark ¿ Release, Ñß½¿ í뫨 óδ»«½¡Ñ¡δ
ß½ÑñπεΘ¿Ñ «»ÑαáΓ«αδ:
New(Ptr1);
New(Ptr2);
Mark(P);
New(Ptr3);
New(Ptr4);
New(Ptr5);
ß«ßΓ«∩¡¿Ñ ¬πτ¿ íπñÑΓ Γᬿ¼, ¬á¬ ¡á α¿ßπ¡¬Ñ 16.2
É¿ß.16.2: Äßó«í«ªñÑ¡¿Ñ »á¼∩Γ¿ ß »«¼«Θ∞ε Mark ¿ Release.
Ptr1 ──÷┌──────────────────────────┐ 쿪¡∩∩ úαá¡¿µá »á¼∩Γ¿
│ ß«ñÑন¼«Ñ Ptr1^ │
Ptr2 ──÷├──────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr2^ │
Ptr3 ──÷├──────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr3^ │
Ptr4 ──÷├──────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr4^ │
Ptr5 ──÷├──────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr5^ │
HeapPtr ──÷├──────────────────────────┤
│ │ éÑασ¡∩∩ úαá¡¿µá
HeapEnd ──÷└──────────────────────────┘ »á¼∩Γ¿
Ä»ÑαáΓ«α Mark(P) »«¼ÑτáÑΓ ß«ßΓ«∩¡¿Ñ ¬πτ¿ »ÑαÑñ αáß»αÑñѽѡ¿Ñ¼
Ptr3 (ß«σαá¡Ñ¡¿Ñ¼ ΓѬπΘÑú« HeapPtr ó P). àß½¿ óδ»«½¡¿Γ∞ «»ÑαáΓ«α
Release(P), Γ« ß«ßΓ«∩¡¿Ñ ¬πτ¿ ßΓá¡ÑΓ ¬á¬ ¡á α¿ßπ¡¬Ñ 16.3,
φΣΣÑ¬Γ¿ó¡« «ßó«í«ªñá∩ óßÑ π¬áºáΓѽ¿, αáß»αÑñѽѡ¡δÑ »«ß½Ñ ó맮óá
Mark.
É¿ß.16.3. Éáß»αÑñѽѡ¿Ñ ¬πτ¿ »«ß½Ñ óδ»«½¡Ñ¡¿∩ Release(P).
Ptr1 ──÷┌────────────────────────────┐ 쿪¡∩∩ úαá¡¿µá »á¼∩Γ¿
│ ß«ñÑন¼«Ñ Ptr1^ │
Ptr2 ──÷├────────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr2^ │
HeapPtr ──÷├────────────────────────────┤
│ │
│ │
│ │ éÑασ¡∩∩ úαá¡¿µá
HeapEnd ──÷└────────────────────────────┘ »á¼∩Γ¿
Åα¿¼Ñτá¡¿Ñ: éδ»«½¡Ñ¡¿Ñ «»ÑαáΓ«αá Release(HeapOrg) »«½¡«ßΓ∞ε
«τ¿ΘáÑΓ óßε ¬πτπ, »«ß¬«½∞¬π HeapOrg π¬áºδóáÑΓ ¡á ¡¿ª¡εε úαá¡¿µπ
¬πτ¿.
ä½∩ »α«úαá¼¼, ¬«Γ«αδÑ «ßó«í«ªñáεΓ π¬áºáΓѽ¿ ó »«α∩ñ¬Ñ, Γ«τ¡«
«íαáΓ¡«¼ »«α∩ñ¬π ¿σ αáß»αÑñѽѡ¿∩, »α«µÑñπαδ Mark ¿ Release «τÑ¡∞
φΣΣÑ¬Γ¿ó¡δ. Äñ¡á¬« í«½∞Φ¿¡ßΓó« »α«úαá¼¼ αáß»αÑñѽ∩εΓ ¿ «ßó«í«ªñáεΓ
π¬áºáΓѽ¿ ß½πτá⌐¡δ¼ «íαẫ¼, τΓ« ΓαÑíπÑΓ í«½ÑÑ ß½«ª¡«⌐ ΓÑσ¡¿¬¿
π»αáó½Ñ¡¿∩, τΓ« ¿ αÑ὿ºπÑΓß∩ »α«µÑñπαἿ Dispose ¿ FreeMem. ¥Γ¿
»α«µÑñπαδ »«ºó«½∩εΓ »α«úαá¼¼Ñ «ßó«í«ªñáΓ∞ ½εí«⌐ π¬áºáΓѽ∞ ó ½εí«Ñ
óαѼ∩.
è«úñá ñ¿¡á¼¿τÑ߬á∩ »ÑαѼѡ¡á∩, ¬«Γ«αá∩ ¡Ñ ∩ó½∩ÑΓß∩ »«ß½Ññ¡Ñ⌐
(óÑασ¡Ñ⌐) ó ¬πτÑ, «ßó«í«ªñáÑΓß∩ ß »«¼«Θ∞ε Dispose ¿½¿ FreeMem, ¬πτá
ßΓá¡«ó¿Γß∩ Σαáú¼Ñ¡Γ¿α«óá¡¡«⌐. àß½¿ íδ½á óδ»«½¡Ñ¡á Γá ªÑ
»«ß½Ññ«óáΓѽ∞¡«ßΓ∞ «»ÑαáΓ«α«ó, á ºáΓѼ Dispose(Ptr3) - ó ßÑαÑñ¿¡Ñ
¬πτ¿ »«∩ó¿Γß∩ ñδα¬á (α¿ß 16.4).
É¿ß.16.4. "äδα¬á" ó ¬πτÑ.
Ptr1 ──÷┌────────────────────────────┐ 쿪¡∩∩ úαá¡¿µá »á¼∩Γ¿
│ ß«ñÑন¼«Ñ Ptr1^ │
Ptr2 ──÷├────────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr2^ │
├────────────────────────────┤
│ │
Ptr4 ──÷├────────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr4^ │
Ptr5 ──÷├────────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr5^ │
HeapPtr ──÷├────────────────────────────┤
│ │ éÑασ¡∩∩ úαá¡¿µá
HeapEnd ──÷└────────────────────────────┘ »á¼∩Γ¿
àß½¿ ßÑ⌐τáß óδ»«½¡¿Γ∞ New(Ptr3), Γ« «¡ ß¡«óá ºá⌐¼ÑΓ Γπ ªÑ
«í½áßΓ∞ »á¼∩Γ¿. æ ñαπú«⌐ ßΓ«α«¡δ, óδ»«½¡Ñ¡¿Ñ Dispose(Ptr4) πóѽ¿τ¿Γ
ßó«í«ñ¡δ⌐ í½«¬, »«ß¬«½∞¬π Ptr3 ¿ Ptr4 í뫨 ß«ßÑñ¡¿¼¿ í½«¬á¼¿ (α¿ß
16.5).
É¿ß.16.5. ôóѽ¿τÑ¡¿Ñ ßó«í«ñ¡«ú« í½«¬á.
Ptr1 ──÷┌────────────────────────────┐ 쿪¡∩∩ úαá¡¿µá »á¼∩Γ¿
│ ß«ñÑন¼«Ñ Ptr1^ │
Ptr2 ──÷├────────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr2^ │
├────────────────────────────┤
│ │
│ │
│ │
Ptr5 ──÷├────────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr5^ │
HeapPtr ──÷├────────────────────────────┤
│ │ éÑασ¡∩∩ úαá¡¿µá
HeapEnd ──÷└────────────────────────────┘ »á¼∩Γ¿
ìᬫ¡Ñµ, óδ»«½¡Ñ¡¿Ñ Dispose(Ptr5) ó«-»Ñαóδσ ß«ºñáßΓ ÑΘÑ
í«½∞Φ¿⌐ ßó«í«ñ¡δ⌐ í½«¬, á ºáΓѼ »ÑαѼÑßΓ¿Γ HeapPtr 󡿺. èα«¼Ñ
Γ«ú«, φëà ßó«í«ñ¡δ⌐ í½«¬ ß«½∞ÑΓß∩ ß« ßó«í«ñ¡«⌐ »á¼∩Γ∞ε ¬πτ¿, Γá¬
¬á¬ »«ß½Ññ¡¿⌐ º¡áτáΘ¿⌐ π¬áºáΓѽ∞ ßÑ⌐τáß - Ptr2 (α¿ßπ¡«¬ 16.6).
É¿ß.16.6. ôñá½Ñ¡¿Ñ ßó«í«ñ¡«ú« í½«¬á.
Ptr1 ──÷┌────────────────────────────┐ 쿪¡∩∩ úαá¡¿µá »á¼∩Γ¿
│ ß«ñÑন¼«Ñ Ptr1^ │
Ptr2 ──÷├────────────────────────────┤
│ ß«ñÑন¼«Ñ Ptr2^ │
HeapPtr ──÷├────────────────────────────┤
│ │
│ │
│ │
│ │ éÑασ¡∩∩ úαá¡¿µá
HeapEnd ──÷└────────────────────────────┘ »á¼∩Γ¿
èπτá ßÑ⌐τáß ó Γᬫ¼ ªÑ ß«ßΓ«∩¡¿¿, ¬á¬ íδ½á »«ß½Ñ óδ»«½¡Ñ¡¿∩
Release(P) (α¿ß.16.2). Äñ¡á¬«, ßó«í«ñ¡δÑ í½«¬¿, ß«ºñáóáѼδÑ ¿
αáºαπΦáѼδÑ ó φΓ«¼ αѪ¿¼Ñ, Σ¿¬ß¿α«ó὿ß∞ ñ½∩ »«ß½ÑñπεΘÑú«
¿ß»«½∞º«óá¡¿∩.
滿߫¬ ßó«í«ñ¡δσ í½«¬«ó.
ÇñαÑßá ¿ αẼÑαδ ßó«í«ñ¡δσ í½«¬«ó, ß«ºñáóáѼδσ Dispose ¿
FreeMem σαá¡∩Γß∩ ó ß»¿ß¬Ñ ßó«í«ñ¡δσ í½«¬«ó, ¬«Γ«αδ⌐ αáßΓÑΓ ßóÑασπ
󡿺 «Γ óÑασ¡Ñ⌐ úαá¡¿µδ ßÑú¼Ñ¡Γá ¬πτ¿. è«úñá αáß»αÑñѽ∩ÑΓß∩
ñ¿¡á¼¿τÑ߬á∩ »ÑαѼѡ¡á∩, ñ« αẼÑΘÑ¡¿∩ ÑÑ ó ¬πτÑ »α«óÑα∩ÑΓß∩ ß»¿ß«¬
ßó«í«ñ¡δσ í½«¬«ó. àß½¿ ÑßΓ∞ ßó«í«ñ¡δ⌐ í½«¬ »«ñσ«ñ∩ΘÑú« αẼÑαá
(αẼÑα í«½∞ΦÑ ¿½¿ αáóÑ¡ αẼÑαπ αáß»αÑñѽ∩Ѽ«ú« í½«¬á), Γ« «¡
¿ß»«½∞ºπÑΓß∩.
Åα¿¼Ñτá¡¿Ñ: Åα«µÑñπαá Release óßÑúñá «τ¿ΘáÑΓ ß»¿ß«¬ ßó«í«ñ¡δσ
í½«¬«ó, τΓ« ºáßΓáó½∩ÑΓ ¼«¡¿Γ«α ¬πτ¿ "ºáíδΓ∞" « óßÑσ ßó«í«ñ¡δσ
í½«¬áσ, ¬«Γ«αδÑ ¼«ú½¿ íδΓ∞ ¡¿ªÑ π¬áºáΓѽ∩ ¬πτ¿. àß½¿ éδ ß¼ÑΦ¿óáÑΓÑ
ó맮óδ Mark ¿ Release ß ó맮óἿ Dispose ¿ FreeMem, Γ« éδ ñ«½ª¡δ
íδΓ∞ πóÑαÑ¡δ, τΓ« Γᬿσ ßó«í«ñ¡δσ í½«¬«ó ¡Ñ ßπΘÑßΓóπÑΓ.
ÅÑαѼѡ¡á∩ FreeList ¿º ¼«ñπ½∩ System π¬áºδóáÑΓ ¡á »Ñαóδ⌐
ßó«í«ñ¡δ⌐ í½«¬ ó ¬πτÑ. ¥Γ«Γ í½«¬ ß«ñÑαª¿Γ π¬áºáΓѽ∞ ¡á ß½ÑñπεΘ¿⌐
ßó«í«ñ¡δ⌐ í½«¬, ¬«Γ«αδ⌐ ß«ñÑαª¿Γ π¬áºáΓѽ∞ ¡á ß½ÑñπεΘ¿⌐ ßó«í«ñ¡δ⌐
í½«¬ ¿ Γ.ñ. Å«ß½Ññ¡¿⌐ ßó«í«ñ¡δ⌐ í½«¬ ß«ñÑαª¿Γ π¬áºáΓѽ∞ ¡á óÑαΦ¿¡π
¬πτ¿ (Γ.Ñ. ¡á »«½«ªÑ¡¿Ñ, π¬áºδóáѼ«Ñ HeapPtr). àß½¿ ó ß»¿ß¬Ñ
ßó«í«ñ¡δ⌐ í½«¬«ó ¡ÑΓ ßó«í«ñ¡δσ í½«¬«ó, FreeList αáó¡á HeapPtr.
ö«α¼áΓ »Ñαóδσ 8 íá⌐Γ ßó«í«ñ¡«ú« í½«¬á «»αÑñѽ∩ÑΓß∩ Γ¿»«¼
TFreeRec:
type
PFreeRec = ^TFreeRec;
TFreeRec = record
Next : PFreeRec;
Size : Pointer;
end;
Å«½Ñ Next π¬áºδóáÑΓ ¡á ß½ÑñπεΘ¿⌐ ßó«í«ñ¡δ⌐ í½«¬, ¿½¿ ¡á Γ« ªÑ
»«½«ªÑ¡¿Ñ, τΓ« ¿ HeapPtr, Ñß½¿ í½«¬ - »«ß½Ññ¡¿⌐ ßó«í«ñ¡δ⌐ í½«¬.
Å«½Ñ Size σαá¡¿Γ αẼÑα ßó«í«ñ¡«ú« í½«¬á. ç¡áτÑ¡¿Ñ Size ¡Ñ «íδτ¡«Ñ
32-í¿Γ«ó«Ñ º¡áτÑ¡¿Ñ; ߬«αÑÑ φΓ« ¡«α¼á½¿º«óá¡¡«Ñ º¡áτÑ¡¿Ñ π¬áºáΓѽ∩
ß τ¿ß½«¼ ßó«í«ñ¡δσ »áαáúαáΣ«ó (16-íá⌐Γ«óδσ í½«¬«ó) ó ßΓáαΦѼ ß½«óÑ
¿ τ¿ß½«¼ ßó«í«ñ¡δσ íá⌐Γ («Γ 0 ñ« 15) ó ¼½áñΦѼ ß½«óÑ. æ½ÑñπεΘá∩
Σπ¡¬µ¿∩ BlockSize »αÑ«íαáºπÑΓ º¡áτÑ¡¿Ñ »«½∩ Size ó ¡«α¼á½∞¡«Ñ
º¡áτÑ¡¿Ñ LongInt:
function BlockSize(Size: Pointer): Longint;
type
PtrRec = record Lo, Hi: Word; end;
begin
BlockSize := Longint(PtrRec(Size).Hi) * 16 +
PtrRec(Size).Lo;
end;
ùΓ«íδ úáαá¡Γ¿α«óáΓ∞, τΓ« óßÑúñá íπñÑΓ ¼ÑßΓ« ñ½∩ TFreeRec ó
¡áτá½Ñ ßó«í«ñ¡«ú« í½«¬á, ¼«¡¿Γ«α ¬πτ¿ «¬απú½∩ÑΓ αẼÑα èÇåäÄâÄ
í½«¬á, αáß»αÑñѽ∩Ѽ«ú« New ¿½¿ GetMem ñ« 8-íá⌐Γ«ó«⌐ úαá¡¿µδ. Æá¬
ñ½∩ í½«¬«ó, αẼÑα«¼ ó 1..8 íá⌐Γ αáß»αÑñѽ∩ÑΓß∩ 8 íá⌐Γ, ñ½∩ í½«¬«ó,
αẼÑα«¼ 9..16 αáß»αÑñѽ∩ÑΓß∩ 16 íá⌐Γ ¿ Γ.ñ. ¥Γ« ¼«ªÑΓ »«¬áºáΓ∞ß∩
αáßΓ«τ¿Γѽ∞¡δ¼ ¿ß»«½∞º«ó᡿Ѽ »á¼∩Γ¿ ¿ ó ñÑ⌐ßΓó¿Γѽ∞¡«ßΓ¿ íπñÑΓ
Γᬿ¼, Ñß½¿ ¬áªñδ⌐ í½«¬ íπñÑΓ αẼÑα«¼ ó 1 íá⌐Γ. Äñ¡á¬«, «íδτ¡«
í½«¬¿ ¿¼ÑεΓ í«½∞Φ¿⌐ αẼÑα ¿ «Γ¡«ß¿Γѽ∞¡δ⌐ αẼÑα ¡Ñ¿ß»«½∞ºπѼ«ú«
»α«ßΓαá¡ßΓóá ¡Ñóѽ¿¬. ü«½ÑÑ Γ«ú«, ¿ φΓ« «τÑ¡∞ ó᪡«,
8-íá⌐Γ¡δ⌐ ¬«φΣΣ¿µ¿Ñ¡Γ úαá¡π½¿α«óá¡¡«ßΓ¿ úáαá¡Γ¿απÑΓ, τΓ«
αáß»αÑñѽѡ¿Ñ ¿ «ßó«í«ªñÑ¡¿Ñ ß½πτá⌐¡δσ í½«¬«ó ¡Ñí«½∞Φ¿σ αẼÑα«ó,
¬á¬ ¡á»α¿¼Ñα ñ½∩ ßΓ᫬ ß »ÑαѼѡ¡«⌐ ñ½¿¡«⌐ ó »α«úαá¼¼áσ «íαáí«Γ¬¿
ΓѬßΓá, ¡Ñ íπñÑΓ ß¿½∞¡« Σαáú¼Ñ¡Γ¿α«óáΓ∞ ¬πτπ. ìá»α¿¼Ñα, ñ«»πßΓ¿¼ 50
-íá⌐Γ¡δ⌐ í½«¬ αáß»αÑñѽ∩ÑΓß∩ ¿ «ßó«í«ªñáÑΓß∩, ßΓá¡«ó∩ß∞ φ½Ñ¼Ñ¡Γ«¼ ó
ß»¿ß¬Ñ ßó«í«ñ¡δσ í½«¬«ó. ¥Γ«Γ í½«¬ íπñÑΓ «¬απú½Ñ¡ ñ« 56 íá⌐Γ (7*8)
¿ »«ß½ÑñπεΘ¿⌐ ºá»α«ß ¡á αáß»αÑñѽѡ¿Ñ «Γ 49 ñ« 56 íá⌐Γ íπñÑΓ
»«½¡«ßΓ∞ε ¿ß»«½∞º«óáΓ∞ φΓ«Γ í½«¬, ¡Ñ «ßΓáó½∩∩ «Γ 1 ñ« 7 íá⌐Γ
ßó«í«ñ¡δ¼¿, ¬«Γ«αδÑ íπñπΓ Σαáú¼Ñ¡Γ¿α«óáΓ∞ ¬πτπ.
ÅÑαѼѡ¡á∩ HeapError.
ÅÑαѼѡ¡á∩ HeapError »«ºó«½∩ÑΓ óá¼ πßΓá¡«ó¿Γ∞ Σπ¡¬µ¿ε
«íαáí«Γ¬¿ «Φ¿í«¬ ¬πτ¿, ¬«Γ«αá∩ óδºδóáÑΓß∩, ¬«úñá ¼«¡¿Γ«α ¬πτ¿ ¡Ñ
¼«ªÑΓ «íαáí«ΓáΓ∞ ºá»α«ß ¡á αáß»αÑñѽѡ¿Ñ »á¼∩Γ¿. HeapError
π¬áºδóáÑΓ ¡á Σπ¡¬µ¿ε ß« ß½ÑñπεΘ¿¼ ºáú«½«ó¬«¼:
function HeapFunc(Size: Word): Integer; far;
çá¼ÑΓ¿¼, τΓ« ñ¿αÑ¬Γ¿óá ¬«¼»¿½∩Γ«αá far πßΓá¡áó½¿óáÑΓ ñá½∞¡εε
¼«ñѽ∞ ó맮óá ñ½∩ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ «Φ¿í«¬.
öπ¡¬µ¿∩ «íαáí«Γ¬¿ πßΓá¡áó½¿óáÑΓß∩ »α¿ßóá¿ó᡿Ѽ ÑÑ áñαÑßá
»ÑαѼѡ¡«⌐ HeapError:
HeapError := @HeapFunc;
öπ¡¬µ¿∩ «íαáí«Γ¬¿ «Φ¿í«¬ ¬πτ¿ óδºδóáÑΓß∩, ¬«úñá New ¿½¿ GetMem
¡Ñ ¼«úπΓ «íαáí«ΓáΓ∞ ºá»α«ß. Åáαá¼ÑΓα Size ß«ñÑαª¿Γ αẼÑα í½«¬á,
¬«Γ«αδ⌐ ¡Ñ ¼«ú íδΓ∞ αáß»αÑñѽѡ ¿ Σπ¡¬µ¿∩ «íαáí«Γ¬¿ ñ«½ª¡á
»«»δΓáΓ∞ß∩ «ßó«í«ñ¿Γ∞ í½«¬ αẼÑα«¼ ¡Ñ ¼Ñ¡∞Φ¿¼ φΓ«ú«.
é ºáó¿ß¿¼«ßΓ¿ «Γ αѺπ½∞ΓáΓá, Σπ¡¬µ¿∩ «íαáí«Γ¬¿ ó«ºóαáΘáÑΓ 0, 1
¿½¿ 2. é ß½πτáÑ 0 íπñÑΓ ¡Ñ¼Ññ½Ñ¡¡« 󫺡¿¬áΓ∞ «Φ¿í¬á óαѼѡ¿
óδ»«½¡Ñ¡¿∩ ó »α«úαá¼¼Ñ. é ß½πτáÑ 1 ó¼ÑßΓ« áóáα¿⌐¡«ú« ºáóÑαΦÑ¡¿∩
»α«úαá¼¼δ New ¿½¿ GetMem ó«ºóαáΘáεΓ π¬áºáΓѽ∞, αáó¡δ⌐ Nil. ìᬫ¡Ñµ,
2 «º¡áτáÑΓ πß»Ñσ ¿ »«óΓ«α∩ÑΓ ºá»α«ß ¡á αáß»αÑñѽѡ¿Ñ »á¼∩Γ¿
(¬«Γ«αδ⌐ ¼«ªÑΓ «»∩Γ∞ óδºóáΓ∞ Σπ¡¬µ¿ε «íαáí«Γ¬¿ «Φ¿í«¬).
æΓá¡ñáαΓ¡á∩ Σπ¡¬µ¿∩ «íαáí«Γ¬¿ «Φ¿í«¬ ¬πτ¿ óßÑúñá ó«ºóαáΘáÑΓ 0,
τΓ« »α¿ó«ñ¿Γ ¬ áóáα¿⌐¡«¼π ºáóÑαΦÑ¡¿ε »α«úαá¼¼δ, Ñß½¿ New ¿½¿ GetMem
¡Ñ ¼«úπΓ íδΓ∞ óδ»«½¡Ñ¡δ. ä½∩ ¼¡«ú¿σ »α«úαá¼¼ íπñÑΓ πñ«í¡á ß½ÑñπεΘá∩
Σπ¡¬µ¿∩ «íαáí«Γ¬¿ «Φ¿í«¬:
function HeapFunc(Size: Word): Integer; far;
begin
HeapFunc := 1;
end;
è«úñá φΓá Σπ¡¬µ¿∩ πßΓá¡«ó½Ñ¡á, New ¿ GetMem íπñπΓ ó«ºóαáΘáΓ∞
nil »α¿ ¡Ñ󫺼«ª¡«ßΓ¿ αáß»αÑñѽ¿Γ∞ »á¼∩Γ∞, ¡Ñ »α¿ó«ñ∩ ¬ áóáα¿⌐¡«¼π
ºáóÑαΦÑ¡¿ε »α«úαá¼¼δ.
Åα¿¼Ñτá¡¿Ñ: é맮ó Σπ¡¬µ¿¿ «íαáí«Γ¬¿ «Φ¿í«¬ ¬πτ¿ ß »áαá¼ÑΓα«¼
Size = 0 π¬áºδóáÑΓ, τΓ« ñ½∩ πñ«ó½ÑΓó«αÑ¡¿∩ ºá»α«ßá ¡á αáß»αÑñѽѡ¿Ñ
¼«¡¿Γ«α ¬πτ¿ αáßΦ¿α¿½ ¬πτπ, »ÑαÑñó¿úá∩ HeapPtr óóÑασ. ¥Γ«
»α«¿ßσ«ñ¿Γ, ¬«úñá ¡ÑΓ ßó«í«ñ¡δσ í½«¬«ó ó ß»¿ß¬Ñ ßó«í«ñ¡δσ í½«¬«ó,
¿½¿ ¬«úñá óßÑ ßó«í«ñ¡δÑ í½«¬¿ ß½¿Φ¬«¼ ¼á½δ ñ½∩ ºá»α«ßá ¡á
αáß»αÑñѽѡ¿Ñ. é맮ó ß Size = 0 ¡Ñ π¬áºδóáÑΓ ¡á «Φ¿í¬π, »«ß¬«½∞¬π
ßπΘÑßΓóπÑΓ ñ«ßΓáΓ«τ¡«Ñ ¼ÑßΓ« ñ½∩ αáß»αÑñѽѡ¿∩ ¼Ñªñπ HeapPtr ¿
HeapEnd. 欫αÑÑ φΓ« π¬áºδóáÑΓ, τΓ« ¡Ñ¿ß»«½∞º«óá¡¡«Ñ »α«ßΓαá¡ßΓó«
HeapPtr í佫 π¼Ñ¡∞ΦÑ¡« ¿ ¼«¡¿Γ«α ¬πτ¿ ¿ú¡«α¿απÑΓ ó«ºóαáΘáѼ«Ñ
º¡áτÑ¡¿Ñ «Γ ó맮ó«ó φΓ«ú« Γ¿»á.
é¡πΓαÑ¡¡¿Ñ Σ«α¼áΓδ ñá¡¡δσ.
ûѽδÑ Γ¿»δ.
ö«α¼áΓ, ¿ß»«½∞ºπѼδ⌐ ñ½∩ »αÑñßΓáó½Ñ¡¿∩ µÑ½δσ τ¿ßѽ, ºáó¿ß¿Γ «Γ
¿σ ¼¿¡¿¼á½∞¡«⌐ ¿ ¼á¬ß¿¼á½∞¡«⌐ úαá¡¿µ:
- úαá¡¿µá ó ñ¿á»áº«¡Ñ -128 .. 127 (Shortint) - »ÑαѼѡ¡á∩
σαá¡¿Γß∩ ¬á¬ º¡á¬«óδ⌐ íá⌐Γ.
- úαá¡¿µá ó ñ¿á»áº«¡Ñ 0 .. 255 (Byte) - »ÑαѼѡ¡á∩ σαá¡¿Γß∩
¬á¬ íѺº¡á¬«óδ⌐ íá⌐Γ.
- úαá¡¿µá ó ñ¿á»áº«¡Ñ -32768 .. 32767 (Integer) - »ÑαѼѡ¡á∩
σαá¡¿Γß∩ ¬á¬ º¡á¬«ó«Ñ ß½«ó«.
- úαá¡¿µá ó ñ¿á»áº«¡Ñ 0 .. 65535 (Word) - »ÑαѼѡ¡á∩ σαá¡¿Γß∩
¬á¬ íѺº¡á¬«ó«Ñ ß½«ó«.
- ó ñαπú¿σ ß½πτá∩σ »ÑαѼѡ¡á∩ σαá¡¿Γß∩ ¬á¬ º¡á¬«ó«Ñ ñó«⌐¡«Ñ
ß½«ó« (Longint).
濼ó«½∞¡δ⌐ Γ¿».
Æ¿» Char ¿½¿ »«ññ¿á»áº«¡ Γ¿»á Char σαá¡¿Γß∩ ¬á¬ íѺº¡á¬«óδ⌐
íá⌐Γ.
ï«ú¿τÑ߬¿⌐ Γ¿».
Æ¿» éoolean σαá¡¿Γß∩ ¬á¬ íá⌐Γ ¿ »α¿¡¿¼áÑΓ º¡áτÑ¡¿∩ 0 (False)
¿½¿ 1 (True).
ÅÑαÑτ¿ß½¿¼δÑ Γ¿»δ.
ÅÑαÑτ¿ß½¿¼δ⌐ Γ¿» σαá¡¿Γß∩ ó íѺº¡á¬«ó«¼ íá⌐ΓÑ, Ñß½¿
»ÑαÑτ¿ß½Ñ¡¿Ñ ¿¼ÑÑΓ 256 ¿½¿ ¼Ñ¡∞ΦÑ º¡áτÑ¡¿⌐, ó »α«Γ¿ó¡«¼ ß½πτáÑ «¡
σαá¡¿Γß∩ ¬á¬ íѺº¡á¬«ó«Ñ ß½«ó«.
éÑΘÑßΓóÑ¡¡δÑ Γ¿»δ.
éÑΘÑßΓóÑ¡¡δÑ Γ¿»δ (Real, Single, Double, Extended ¿ Comp)
σαá¡∩Γ ñó«¿τ¡«Ñ »αÑñßΓáó½Ñ¡¿Ñ º¡á¬á (+/-), φ¬ß»«¡Ñ¡Γδ ¿ ¼á¡Γ¿ßßδ.
ÅαÑñßΓáó½Ñ¡¿Ñ τ¿ß½á ¿¼ÑÑΓ ó¿ñ :
+/- ¼á¡Γ¿ßßá σ 2**φ¬ß»«¡Ñ¡Γá
úñÑ ¼á¡Γ¿ßßá ¿¼ÑÑΓ «ñ¿¡ í¿Γ ß½Ñóá «Γ Γ«τ¬¿ ñó«¿τ¡«ú« τ¿ß½á (Γ«
ÑßΓ∞ 0 <= ¼á¡Γ¿ßßá < 2).
Åα¿¼Ñτá¡¿Ñ: ìá ß½ÑñπεΘѼ α¿ßπ¡¬Ñ msb «º¡áτáÑΓ ¡á¿í«½∞Φ¿⌐
º¡áτáΘ¿⌐ í¿Γ ¿ lsb «º¡áτáÑΓ ¡á¿¼Ñ¡∞Φ¿⌐. èαá⌐¡Ñ ½ÑóδÑ φ½Ñ¼Ñ¡Γδ
σαá¡∩Γß∩ ¡á í«½∞Φ¿σ áñαÑßáσ. ìá»α¿¼Ñα, ñ½∩ º¡áτÑ¡¿∩ Γ¿»á Real, Ñ -
σαá¡¿Γß∩ ó »Ñαó«¼ íá⌐ΓÑ, f - ó ß½ÑñπεΘ¿σ 5 íá⌐Γáσ ¿ s - ó
¡á¿í«½∞ΦѼ º¡áτáΘѼ í¿ΓÑ »«ß½Ññ¡Ñú« íá⌐Γá.
Æ¿» Real.
6-Γ¿ íá⌐Γ«óδ⌐ (48-¼¿ í¿Γ«óδ⌐) Γ¿» Real ñѽ¿Γß∩ ¡á Γα¿ »«½∩:
1 39 8
┌───┬──────..───────┬────────┐
│ s │ f │ e │
└───┴──────..───────┴────────┘
msb lsb msb lsb
ç¡áτÑ¡¿Ñ τ¿ß½á v «»αÑñѽ∩ÑΓß∩ ¬á¬,
Ñß½¿ 0 < e <= 255, Γ« v = (-1)**s x 2**(e-129) x (1.f).
Ñß½¿ Ñ = 0, Γ« v = 0.
Åα¿¼Ñτá¡¿Ñ: Æ¿» Real ¡Ñ ¼«ªÑΓ σαá¡¿Γß∩ ñÑ¡«α¼á½¿º«óá¡¡δ¼, NaN
¿ ¡Ñ«»αÑñѽѡ¡δ¼. äÑ¡«α¼á½¿º«óá¡¡«Ñ ßΓá¡«ó¿Γß∩ 0, ¬«úñá
ºá»«¼¿¡áÑΓß∩ ó Real. NaN, ¿ ¡Ñ«»αÑñѽѡ¡«Ñ ñáεΓ «Φ¿í¬π
»ÑαÑ»«½¡Ñ¡¿∩, »α¿ »«»δ⪥ ºá»«¼¡¿Γ∞ ¿σ ó Real.
Æ¿» Single.
4-σ íá⌐Γ«óδ⌐ (32-σ í¿Γ¡δ⌐) Γ¿» Single ñѽ¿Γß∩ ¡á Γα¿ »«½∩:
1 8 23
┌───┬──────┬───────..─────────┐
│ s │ e │ f │
└───┴──────┴───────..─────────┘
msb lsb msb lsb
ç¡áτÑ¡¿Ñ τ¿ß½á v «»αÑñѽ∩ÑΓß∩ ¬á¬,
Ñß½¿ 0 < e < 255, Γ« v = (-1)**s x 2**(e-127) x (1.f).
Ñß½¿ e = 0 ¿ f <> 0, Γ« v = (-1)**s x 2**(-126) x (0.f).
Ñß½¿ e = 0 ¿ f = 0, Γ« v = (-1)**s x 0
Ñß½¿ e = 255 ¿ f = 0, Γ« v = (-1)**s x Inf.
Ñß½¿ e = 255 ¿ f <> 0, Γ« v = NaN.
Æ¿» Double.
8-σ íá⌐Γ«óδ⌐ (64-σ í¿Γ¡δ⌐) Γ¿» Double ñѽ¿Γß∩ ¡á Γα¿ »«½∩:
1 11 52
┌───┬──────┬───────..────────┐
│ s │ e │ f │
└───┴──────┴───────..────────┘
msb lsb msb lsb
ç¡áτÑ¡¿Ñ τ¿ß½á v «»αÑñѽ∩ÑΓß∩ ¬á¬,
Ñß½¿ 0 < e < 2047, Γ« v = (-1)**s x 2**(e-1023) x (1.f).
Ñß½¿ e = 0 ¿ f <> 0, Γ« v = (-1)**s x 2**(-1022) x (0.f).
Ñß½¿ e = 0 ¿ f = 0, Γ« v = (-1)**s x 0
Ñß½¿ e = 2047 ¿ f = 0, Γ« v = (-1)**s x Inf.
Ñß½¿ e = 2047 ¿ f <> 0, Γ« v = NaN.
Æ¿» Extended.
10-σ íá⌐Γ«óδ⌐ (80-σ í¿Γ¡δ⌐) Γ¿» Extended ñѽ¿Γß∩ ¡á Γα¿ »«½∩:
1 15 1 63
┌───┬────────┬───┬────────..───────┐
│ s │ e │ i │ f │
└───┴────────┴───┴────────..───────┘
msb lsb msb lsb
ç¡áτÑ¡¿Ñ τ¿ß½á v «»αÑñѽ∩ÑΓß∩ ¬á¬,
Ñß½¿ 0 <= e < 32767, Γ« v = (-1)**s x 2**(e-16383) x (1.f).
Ñß½¿ e = 32767 ¿ f = 0, Γ« v = (-1)**s x Inf.
Ñß½¿ e = 32767 ¿ f <> 0, Γ« v = NaN.
Æ¿» Comp.
8-σ íá⌐Γ«óδ⌐ (64-σ í¿Γ¡δ⌐) Γ¿» Comp ñѽ¿Γß∩ ¡á ñóá »«½∩:
1 63
┌───┬───────────..──────────────┐
│ s │ d │
└───┴───────────..──────────────┘
msb lsb
ç¡áτÑ¡¿Ñ τ¿ß½á v «»αÑñѽ∩ÑΓß∩ ¬á¬,
Ñß½¿ s = 1 ¿ d = 0, Γ« v = NaN.
ê¡áτÑ v - ñó«¿τ¡«Ñ ñ«»«½¡Ñ¡¿Ñ 64-í¿Γ¡«ú« º¡áτÑ¡¿∩.
Æ¿» Pointer.
Æ¿» Pointer σαá¡¿Γß∩ ¬á¬ ñó«⌐¡«Ñ ß½«ó« ß τáßΓ∞ε ß¼ÑΘÑ¡¿∩ ó
¼½áñΦѼ ß½«óÑ ¿ ß ßÑú¼Ñ¡Γ¡«⌐ τáßΓ∞ε ó ßΓáαΦѼ ß½«óÑ. ç¡áτÑ¡¿Ñ
π¬áºáΓѽ∩ nil σαá¡¿Γß∩ ¬á¬ 0 ó «í«¿σ ß½«óáσ.
æΓ᫬«óδ⌐ Γ¿».
使¡á ßΓ᫬«ó«ú« Γ¿»á ó íá⌐Γáσ αáó¡á Ñú« ¼á¬ß¿¼á½∞¡«⌐ ñ½¿¡Ñ
»½εß 1. ÅÑαóδ⌐ íá⌐Γ ß«ñÑαª¿Γ ΓѬπΘπε ñ½¿¡π ßΓ᫬¿ ¿ ß½ÑñπεΘ¿Ñ íá⌐Γδ
ß«ñÑαªáΓ ß¿¼ó«½δ ßΓ᫬¿. üá⌐Γ ñ½¿¡δ ¿ ß¿¼ó«½δ »αÑñßΓáó½Ñ¡δ
íѺº¡á¬«ó묨 º¡áτÑ¡¿∩¼¿. îá¬ß¿¼á½∞¡á∩ ñ½¿¡á ßΓ᫬¿ 255 ß¿¼ó«½«ó
»½εß íá⌐Γ ñ½¿¡δ (string[255]).
Æ¿» ¼¡«ªÑßΓóá.
î¡«ªÑßΓó« (set) - φΓ« í¿Γ«óδ⌐ ¼áßß¿ó, úñÑ ¬áªñδ⌐ í¿Γ
»«¬áºδóáÑΓ - ÑßΓ∞ ñá¡¡δ⌐ φ½Ñ¼Ñ¡Γ ó ¼¡«ªÑßΓóÑ ¿½¿ ¡ÑΓ. îá¬ß¿¼á½∞¡«Ñ
τ¿ß½« φ½Ñ¼Ñ¡Γ«ó ó ¼¡«ªÑßΓóÑ - 256, »«φΓ«¼π ¼¡«ªÑßΓó« ¡¿¬«úñá ¡Ñ
ºá¡¿¼áÑΓ í«½ÑÑ 32 íá⌐Γ. ù¿ß½« íá⌐Γ ºá¡¿¼áѼδσ ¼¡«ªÑßΓó«¼
óδτ¿ß½∩ÑΓß∩ ¬á¬ :
ByteSize = (Max div 8) - (Min div 8) + 1
úñÑ Min ¿ Max - ¡¿ª¡∩∩ ¿ óÑασ¡∩∩ úαá¡¿µδ íẫó«ú« Γ¿»á φΓ«ú«
¼¡«ªÑßΓóá. ¥½Ñ¼Ñ¡Γ à ºá¡¿¼áÑΓ íá⌐Γ ß ¡«¼Ñα«¼:
ByteNumber = ( E div 8) - (Min div 8)
¿ »«º¿µ¿∩ í¿Γá ó¡πΓα¿ íá⌐Γá:
BitNumber = E mod 8
úñÑ à »αÑñßΓáó½∩ÑΓ »«α∩ñ¬«ó«Ñ º¡áτÑ¡¿Ñ φ½Ñ¼Ñ¡Γá.
Æ¿» ¼áßß¿óá.
îáßß¿ó σαá¡¿Γß∩ ¬á¬ ¡Ñ»αÑαδó¡á∩ »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ »ÑαѼѡ¡δσ
Γ«ú« Γ¿»á, ¿º ¬«Γ«αδσ «íΩ∩ó½Ñ¡ ¼áßß¿ó. 諼»«¡Ñ¡Γá ß ¡á¿¼Ñ¡∞Φ¿¼
¿¡ñѬ߫¼ σαá¡¿Γß∩ »« ¡á¿¼Ñ¡∞ΦѼπ áñαÑßπ »á¼∩Γ¿. î¡«ú«¼Ñα¡δ⌐ ¼áßß¿ó
σαá¡¿Γß∩ Γá¬, τΓ« ¡á¿í«½ÑÑ »αáóδ⌐ ¿¡ñÑ¬ß πóѽ¿τ¿óáÑΓß∩ »Ñαóδ¼.
Æ¿» ºá»¿ß∞.
Å«½∩ ºá»¿ß¿ σαá¡∩Γß∩ ¬á¬ ¡Ñ»αÑαδó¡á∩ »«ß½Ññ«óáΓѽ∞¡«ßΓ∞
»ÑαѼѡ¡δσ. ÅÑαó«Ñ »«½Ñ σαá¡¿Γß∩ »« ¡á¿¼Ñ¡∞ΦѼπ áñαÑßπ »á¼∩Γ¿. àß½¿
ºá»¿ß∞ ß«ñÑαª¿Γ óáα¿á¡Γ¡δÑ τáßΓ¿, Γ« ¬áªñá∩ óáα¿á¡Γ¡á∩ τáßΓ∞
¡áτ¿¡áÑΓß∩ ß «ñ¡«ú« ¿ Γ«ú« ªÑ áñαÑßá.
öá⌐½«óδ⌐ Γ¿».
öá⌐½«óδ⌐ Γ¿» »αÑñßΓáó½Ñ¡ ¬á¬ ºá»¿ß∞. Æ¿»¿α«óá¡¡δÑ ¿
¡ÑΓ¿»¿α«óá¡¡δÑ Σá⌐½δ ºá¡¿¼áεΓ 128 íá⌐Γ ¿ ¿¼ÑεΓ ß½ÑñπεΘπε ßΓαπ¬Γπαπ:
type
FileRec = record
Handle: Word;
Mode: Word;
RecSize: Word;
Private: array[1..26] of Byte;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
end;
ÆѬßΓ«óδ⌐ Σá⌐½ ºá¡¿¼áÑΓ 256 íá⌐Γ ¿ ¿¼ÑÑΓ ßΓαπ¬Γπαπ:
type
TextBuf = array[0..127] of Char;
TextRec = record
Handle: Word;
Mode: Word;
BufSize: Word;
Private: Word;
BufPos: Word;
BufEnd: Word;
BufPtr: ^TextBuf;
OpenFunc: Pointer;
InOutFunc: Pointer;
FlushFunc: Pointer;
CloseFunc: Pointer;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
Buffer: TextBuf;
end;
Hándle ß«ñÑαª¿Γ «íαáí«Γτ¿¬ Σá⌐½á, ó«ºóαáΘáѼδ⌐ ¿º DOS. Å«½Ñ
Mode ¼«ªÑΓ »α¿¡¿¼áΓ∞ «ñ¡« ¿º º¡áτÑ¡¿⌐:
const
fmClosed = $D7B0;
fmInput = $D7B1;
fmOutput = $D7B2;
fmInOut = $D7B3;
fmClosed «º¡áτáÑΓ, τΓ« Σá⌐½ ºá¬αδΓ. fmInput «º¡áτáÑΓ, τΓ«
ΓѬßΓ«óδ⌐ Σá⌐½ íδ½ «Γ¬αδΓ ¬á¬ óσ«ñ¡«⌐ (Reset), fmOutput - ¬á¬
óδσ«ñ¡«⌐ (Rewrite). fmInOut «º¡áτáÑΓ, τΓ« Σá⌐½«óá∩ »ÑαѼѡ¡á∩
Γ¿»¿α«óá¡¡«ú« ¿½¿ ¡ÑΓ¿»¿α«óá¡¡«ú« Σá⌐½á íδ½á «Γ¬αδΓá ¡á τΓÑ¡¿Ñ ¿½¿
ºá»¿ß∞. éßÑ ñαπú¿Ñ º¡áτÑ¡¿∩ «º¡áτáεΓ, τΓ« Σá⌐½«óá∩ »ÑαѼѡ¡á∩ ¡Ñ
íδ½á ¿¡¿µ¿á½¿º¿α«óá¡á (ß »«¼«Θ∞ε Assign).
Å«½Ñ UserData ¡¿¬«úñá ¡Ñ ¿ß»«½∞ºπÑΓß∩ Turbo Pascal ¿ ¼«ªÑΓ
ßó«í«ñ¡« ¿ß»«½∞º«óáΓ∞ß∩ »α«úαá¼¼¿ßΓ«¼.
Name ß«ñÑαª¿Γ ¿¼∩ Σá⌐½á, ¬«Γ«αδ⌐ »αÑñßΓáó½Ñ¡ ¬á¬
»«ß½Ññ«óáΓѽ∞¡«ßΓ∞ ß¿¼ó«½«ó, ºáóÑαΦÑ¡¡á∩ ¡π½Ñóδ¼ ß¿¼ó«½«¼ (#0).
ä½∩ Γ¿»¿α«óá¡¡δσ ¿ ¡ÑΓ¿»¿α«óá¡¡δσ Σá⌐½«ó RecSize ß«ñÑনΓ
ñ½¿¡π ºá»¿ß¿ ó íá⌐Γáσ, ¿ »«½Ñ Private ¡Ñ ¿ß»«½∞ºπÑΓß∩, ¡«
ºáαѺÑαó¿α«óá¡«.
ä½∩ ΓѬßΓ«óδσ Σá⌐½«ó BufPtr - π¬áºáΓѽ∞ ¡á íπΣÑα ñ½¿¡«⌐
BufSize íá⌐Γ, BufPos - ¿¡ñÑ¬ß ß½ÑñπεΘÑú« ß¿¼ó«½á ó íπΣÑαÑ ñ½∩
τΓÑ¡¿∩ ¿½¿ ºá»¿ß¿, BufEnd - ¬«½¿τÑßΓó« «ßΓáóΦ¿σß∩ ß¿¼ó«½«ó ó
íπΣÑαÑ. OpenFunc, InOutFunc, FlushFunc, CloseFunc - π¬áºáΓѽ¿ ¡á
»α«úαá¼¼δ é/é, π»αáó½∩εΘ¿Ñ Σá⌐½«¼. é αáºñÑ½Ñ "äαá⌐óÑα πßΓα«⌐ßΓóá
ΓѬßΓ«ó«ú« Σá⌐½á" ú½áóδ 19 φΓ« «»¿ßá¡« í«½ÑÑ »«ñα«í¡«.
Åα«µÑñπα¡δ⌐ Γ¿».
Åα«µÑñπα¡δ⌐ Γ¿» σαá¡¿Γß∩ ¬á¬ ñó«⌐¡«Ñ ß½«ó« ß τáßΓ∞ε ß¼ÑΘÑ¡¿∩ ó
ß½«óÑ ß ¼½áñΦ¿¼ áñαÑß«¼ ¿ ßÑú¼Ñ¡Γ¡«⌐ τáßΓ∞ε ó ß½«óÑ ß í«½∞Φ¿¼
áñαÑß«¼.
Åα∩¼«⌐ ñ«ßΓπ» ¬ »á¼∩Γ¿.
Turbo Pascal αÑ὿ºπÑΓ Γα¿ »αÑñ«»αÑñѽѡ¡δσ ¼áßß¿óá Mem, MemW,
MemL, ¬«Γ«αδÑ ¿ß»«½∞ºπεΓß∩ ñ½∩ »α∩¼«ú« ñ«ßΓπ»á ¬ »á¼∩Γ¿. èáªñδ⌐
φ½Ñ¼Ñ¡Γ Mem - «ñ¿¡ íá⌐Γ, ¬áªñδ⌐ φ½Ñ¼Ñ¡Γ MemW - «ñ¡« ß½«ó« ¿ ¬áªñδ⌐
φ½Ñ¼Ñ¡Γ MemL - ñó«⌐¡«Ñ ß½«ó« (LongInt).
îáßß¿ó Mem ¿ß»«½∞ºπÑΓ ß»Ñµ¿á½∞¡δ⌐ ß¿¡Γá¬ß¿ß ñ½∩ ¿¡ñѬßá: ñóá
óδαáªÑ¡¿∩ Γ¿»á ß½«ó«, αáºñѽѡ¡δÑ ñó«ÑΓ«τ¿Ñ¼, ¿ß»«½∞ºπεΓß∩ ñ½∩
π¬áºá¡¿∩ ßÑú¼Ñ¡Γá ¿ ß¼ÑΘÑ¡¿∩ »á¼∩Γ¿. Åα¿¼Ñαδ:
Mem [$0040: $0049] := 7;
Data := MemW [Seg(V):Ofs(V)];
MemLong := MemL[64:3*4];
ÅÑαóδ⌐ «»ÑαáΓ«α ºá»¿ßδóáÑΓ º¡áτÑ¡¿Ñ 7 ó íá⌐Γ $0040:$0049.
éΓ«α«⌐ «»ÑαáΓ«α »ÑαÑßδ½áÑΓ º¡áτÑ¡¿Ñ Γ¿»á ß½«ó«, ºá»¿ßá¡¡«Ñ ó »Ñαóδσ
ñóπσ íá⌐Γáσ »ÑαѼѡ¡«⌐ V, ó »ÑαѼѡ¡πε Data. ÆαÑΓ¿⌐ «»ÑαáΓ«α
»ÑαÑßδ½áÑΓ º¡áτÑ¡¿∩ Γ¿»á Longint, σαá¡∩Θ¿Ñß∩ ó $0040:$000C, ó
»ÑαѼѡ¡πε MemLong.