home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
progjour
/
1988
/
03
/
case
next >
Wrap
Text File
|
1988-04-05
|
15KB
|
528 lines
Code from "A CASE of the Jumps" by Tom Swan. No commercial use
of this code without express permission of the author.
.RR L----!----!----!----!----!----!----!----!----!---------R
.MT 5
.HM 4
.UJ 0
.PN 1
.OP
.HE CASE Copyright (C) 1988 by Tom Swan Page-#
.FO
.LS 2
ááááááááááì
ááááááááááSubmitteΣ to║ Programmer'≤ Journa∞ ì
ááááááááááDate║ Februar∙ 8¼ 198╕ ì
ááááááááááRight≤ offered║ Firs⌠ Seria∞ Right≤ ì
ááááááááááNo« oµ words║ 170░ ½ │ listing≤ ½ ▒ figure ì
ááááááááááAddress║ 10╢ Sharonß Drive¼ Litit· P┴ 1754│ ì
ááááááááááPhone║ (717⌐ 62╖-191▒ (╣-╡ Easterε time⌐ ì
ááááááááááì
ááááááááááì
ááááááááááì
ááááááááááì
ááááááááááì
ááááááááááì
áááááááááá ┴ CAS┼ oµ thσ Jump≤ ì
ááááááááááì
áááááááááá b∙ Toφ Swaε ì
ááááááááááì
ááááááááááì
áááááááááá Turb∩ Pasca∞ 4.0░ cheat≤ wheε i⌠ compile≤ ß CAS┼ ì
ì
áááááááááástatement« InsteaΣ oµ creatinτ ß jum≡ tablσ oµ CAS┼-ì
ì
áááááááááálabe∞ addresse≤ a≤ yo⌡ migh⌠ expect¼ thσ compile≥ ì
ì
áááááááááágenerate≤ ß serie≤ oµ conditiona∞ jumps« Thi≤ sleigh⌠ ì
ì
ááááááááááoµ hanΣ turn≤ ß potentiall∙ fas⌠ CAS┼ int∩ ß sluggisΦ ì
ì
ááááááááááserie≤ oµ I╞-THE╬-ELS┼ statement≤¡-aε illusioε iε whicΦ ì
ì
ááááááááááprograφ speeΣ caε vanisΦ iε ß pufµ oµ smoke« ì
áááááááááá T∩ understanΣ thσ problem¼ let'≤ sa≈ thσ lad∙ iε ì
ì
ááááááááááhalµ¡-exposinτ thσ innard≤ oµ ß simplσ Pasca∞ CAS┼ ìèì
áááááááááástatement« Then¼ let'≤ looδ a⌠ ß simila≥ prograφ iε ì
ì
ááááááááááassembl∙ language« Finally¼ let'≤ reassemblσ ou≥ victiφ ì
ì
áááááááááá(volunteer⌐ addinτ fas⌠ jum≡ tablσ CAS┼ statement≤ t∩ ì
ì
ááááááááááTurb∩ Pascal« A≤ you'l∞ see¼ thσ resul⌠ caε bσ ß ì
ì
áááááááááátremendou≤ boos⌠ iε prograφ speed« ì
ááááááááááì
ááááááááááì
áááááááááá"He∙ Rocky¼ Wannß Seσ Mσ Pul∞ ß Rabbi⌠ Ou⌠ oµ M∙ Hat┐ ì
ì
áááááááááá...Oops¼ Wronτ Hat!ó ì
ááááááááááì
áááááááááá Listinτ ▒ illustrate≤ ß typica∞ CAS┼ statemen⌠ iε ì
ì
ááááááááááTurb∩ Pascal« ┴ FO╥ loo≡ execute≤ thσ CAS┼ statemen⌠ ì
ì
ááááááááááfou≥ times¼ selectinτ amonτ thσ fou≥ labeleΣ statement≤ ì
ì
ááááááááááanΣ callinτ procedure≤ proc0ô througΦ proc3,ô whicΦ ì
ì
áááááááááádispla∙ thσ digit≤ ░-3« Oµ course¼ thi≤ i≤ ß prett∙ ì
ì
áááááááááádumΓ wa∙ t∩ displa∙ fou≥ digits¼ bu⌠ wσ neeΣ ß voluntee≥ ì
ì
áááááááááát∩ illustratσ thσ inside≤ oµ ß typica∞ CAS┼ statemen⌠ ì
ì
ááááááááááanΣ thi≤ simplσ examplσ suits« ì
áááááááááá Figurσ ▒ disassemble≤ thσ compileΣ CAS┼ statemen⌠ ì
ì
ááááááááááfroφ Listinτ 1« Thσ firs⌠ MO╓ instructioε load≤ A╪ witΦ ì
ì
ááááááááááthσ valuσ oµ thσ FO╥-loo≡ contro∞ variable¼ i« Afte≥ ì
ì
ááááááááááthi≤ come≤ thσ codσ fo≥ thσ fou≥ labeleΣ Pasca∞ ì
ì
áááááááááástatements« EacΦ oµ thesσ statement≤ begin≤ b∙ ì
ì
áááááááááácomparinτ A╪ witΦ thσ label'≤ value¼ 0000¼ 0001¼ 0002¼ ì
ì
ááááááááááo≥ 0003« Iµ thσ CM╨ fails¼ thσ JN┌ instructioε jump≤ t∩ ì
ì
ááááááááááthσ nex⌠ comparisoε o≥ t∩ thσ enΣ oµ thσ CAS┼ statement« ì
ìèááááááááááIµ thσ CM╨ doe≤ no⌠ fail¼ theε thσ CAL╠ instructioε ì
ì
áááááááááácall≤ PROC0¼ PROC1¼ PROC2¼ o≥ PROC│¡-thσ assembl∙ ì
ì
áááááááááálanguagσ label≤ fo≥ thσ Pasca∞ procedure≤ oµ thσ samσ ì
ì
áááááááááánames« Afte≥ thσ CALL¼ ß JM╨ instructioε jump≤ t∩ thσ ì
ì
ááááááááááenΣ oµ thσ CAS┼ statement« ì
áááááááááá Froφ thi≤ analysis¼ eveε iµ you'rσ no⌠ aε assembl∙ ì
ì
áááááááááálanguagσ wizard¼ yo⌡ caε seσ tha⌠ i⌠ take≤ fou≥ CM╨ anΣ ì
ì
ááááááááááJN┌ instructioε pair≤ t∩ cal∞ PROC3¼ threσ sucΦ ì
ì
ááááááááááinstructioε pair≤ t∩ cal∞ PROC2¼ anΣ s∩ on« Thσ CAS┼ ì
ì
áááááááááástatemen⌠ ma∙ seeφ magicall∙ efficien⌠ iε thσ Pasca∞ ì
ì
áááááááááásourcσ code¼ executinτ labeleΣ statement≤ a⌠ randoφ likσ ì
ì
áááááááááárabbit≤ pulleΣ froφ ß hat« Bu⌠ it'≤ thσ wronτ hat« ì
ì
ááááááááááInsteaΣ oµ ß fas⌠ hare¼ iε thσ compileΣ code¼ wσ ge⌠ ß ì
ì
áááááááááátediou≤ I╞-THE╬-ELS┼ tortoise« AnΣ thi≤ i≤ onl∙ ß ì
ì
áááááááááásimplσ fou≥-labe∞ CAS┼ statement« Ever∙ additiona∞ ì
ì
áááááááááálabe∞ add≤ anothe≥ CM╨ anΣ JN┌ pair¼ makinτ thσ prograφ ì
ì
ááááááááááworδ harde≥ anΣ harde≥ t∩ reacΦ thσ las⌠ labeleΣ ì
ì
áááááááááástatement« ì
ááááááááááì
ááááááááááì
ááááááááááImprovinτ CAS┼ Statemen⌠ SpeeΣ ì
ááááááááááì
áááááááááá Withou⌠ resortinτ t∩ assembl∙ language¼ therσ arσ ß ì
ì
ááááááááááfe≈ prestidigitation≤ yo⌡ caε perforφ t∩ improvσ CAS┼ ì
ì
áááááááááástatemen⌠ speed« Onσ trick¼ suggesteΣ b∙ Joε Greenblat⌠ ì
ì
ááááááááááiε "┴ Notσ oε Optimizinτ Turb∩ Pascal,ó (P╩ ì
ì
ááááááááááSeptember/Octobe≥ 1987¼ p≡ 4▓-43)¼ i≤ t∩ placσ thσ morσ ìèì
ááááááááááfrequentl∙ useΣ label≤ neare≥ t∩ thσ CAS┼ ke∙ word« Oµ ì
ì
áááááááááácourse¼ thσ tradeofµ i≤ ß los≤ oµ speeΣ fo≥ thσ labeleΣ ì
ì
áááááááááástatement≤ moveΣ farthe≥ down« ì
áááááááááá Avoidinτ compounΣ statement≤ is anothe≥ gooΣ idea« ì
ì
ááááááááááFo≥ example¼ conside≥ thi≤ CAS┼ statement║ ì
ááááááááááì
.ls1
ááááááááááCASE Θ OF
áááááááááá ░ ║ Proc0;
áááááááááá ▒ ║ BEGIN
áááááááááá Writeln¿ 'Firs⌠ lineº );
áááááááááá Writeln¿ 'Inde° valuσ ╜ '¼ Θ );
áááááááááá Writeln¿ 'Inde° squareΣ ╜ '¼ Θ ¬ Θ );
áááááááááá Writeln¿ 'Inde° cubeΣ ╜ '¼ Θ ¬ Θ ¬ Θ )
áááááááááá END;
áááááááááá ▓ ║ Proc2
ááááááááááEND;
.ls2
ì
ì
áááááááááá Thσ largσ compounΣ statemen⌠ a⌠ labe∞ ▒ prevent≤ ì
ì
ááááááááááTurb∩ Pasca∞ froφ usinτ thσ CMP/JN┌ instructioε pai≥ a≤ ì
ì
ááááááááááiε Figurσ ▒ becausσ JN┌ caε jum≡ onl∙ 12╖ byte≤ forward« ì
ì
ááááááááááInstead¼ thσ compile≥ generate≤ thσ followinτ codσ t∩ ì
ì
áááááááááájum≡ t∩ thσ statemen⌠ a⌠ labe∞ 2║ ì
ááááááááááì
.ls1
ááááááááááCM╨ AX,000▒ ╗ I≤ selecto≥ ╜ 1?
ááááááááááJ┌ @+1D ╗ Yes¼ jum≡ int∩ compounΣ statement
ááááááááááJM╨ @+C╡ ╗ No¼ jum≡ t∩ nex⌠ casσ label
.ls2
ááááááááááì
ááááááááááì
áááááááááá Thi≤ arrangemen⌠ require≤ executinτ threσ ì
ì
ááááááááááinstructions¼ CMP¼ JZ¼ anΣ JMP¼ fo≥ eacΦ labe∞ no⌠ ì
ì
áááááááááámatchinτ thσ CAS┼ selector« Yo⌡ caε avoiΣ thσ ì
ì
ááááááááááadditiona∞ JM╨ b∙ convertinτ thσ compounΣ statemen⌠ int∩ ìèì
ááááááááááß procedure¼ althougΦ thi≤ add≤ thσ overheaΣ associateΣ ì
ì
ááááááááááwitΦ callinτ subroutine≤ plu≤ thσ miscellaneou≤ chore≤ ì
ì
ááááááááááperformeΣ insidσ thσ procedurσ codσ itself« Eveε so¼ ì
ì
ááááááááááthσ CAS┼ statemen⌠ a≤ ß wholσ operate≤ faste≥ witΦ ì
ì
áááááááááásimplσ labeleΣ statement≤ tha⌠ takσ 12╖ byte≤ o≥ less« ì
áááááááááá BeyonΣ thesσ tw∩ suggestion≤¡-movinτ frequentl∙ ì
ì
ááááááááááuseΣ CAS┼ label≤ a≤ higΦ a≤ possiblσ anΣ avoidinτ ì
ì
áááááááááálargσ compounΣ statement≤¡-therσ isn'⌠ mucΦ yo⌡ caε d∩ ì
ì
áááááááááát∩ improvσ ß CAS┼ statement'≤ performance« Iµ you'rσ ì
ì
ááááááááááwillinτ t∩ usσ assembl∙ language¼ though¼ witΦ thσ hel≡ ì
ì
ááááááááááoµ ß constructioε calleΣ ß jum≡ table¼ ß littlσ machinσ ì
ì
áááááááááácodσ i≤ likσ pixiσ dus⌠¡-i⌠ caε makσ ß CAS┼ statemen⌠ ì
ì
ááááááááááreall∙ fly« ì
ááááááááááì
ááááááááááì
ááááááááááUnderstandinτ Jum≡ Table≤ ì
ááááááááááì
áááááááááá Iµ you'rσ queas∙ abou⌠ assembl∙ language¼ thσ ì
ì
ááááááááááfollowinτ migh⌠ givσ yo⌡ butterflies« Bea≥ witΦ me« ì
ì
ááááááááááWe'l∞ returε t∩ Pasca∞ iε ß moment« ì
áááááááááá Listinτ ▓ i≤ ß MAS═ 5.░ examplσ oµ aε assembl∙ ì
ì
áááááááááálanguagσ jum≡ tablσ¡-thσ rougΦ equivalen⌠ oµ thσ Pasca∞ ì
ì
ááááááááááCAS┼ statemen⌠ examplσ iε Listinτ 1« Thσ tablσ iε thσ ì
ì
áááááááááádatß segmen⌠ store≤ thσ fou≥ offse⌠ addresse≤ oµ thσ ì
ì
áááááááááálabels¼ case0¼ case1¼ case2¼ anΣ case3« Afte≥ ì
ì
ááááááááááinitializinτ ß fe≈ items¼ thσ prograφ execute≤ thσ codσ ì
ì
ááááááááááa⌠ onσ oµ thesσ labels¼ jumpinτ indirectl∙ t∩ thσ ìèì
ááááááááááappropriatσ addres≤ storeΣ iε thσ table« Savσ thσ ì
ì
ááááááááááprograφ a≤ CASE.ASM« Assemblσ anΣ ruε thσ tes⌠ witΦ ì
ì
ááááááááááthesσ DO╙ commands║ ì
ááááááááááì
.ls1
ááááááááááMAS═ CASE;
ááááááááááLIN╦ CASE;
ááááááááááCASE
.ls2
ááááááááááì
ááááááááááì
áááááááááá Typσ 0¼ 1¼ 2¼ o≥ │ t∩ executσ onσ oµ thσ fou≥ ì
ì
áááááááááálabeleΣ cases« Typinτ anythinτ elsσ end≤ thσ prograφ ì
ì
ááááááááááwitΦ aε erro≥ message« Examinσ thσ instruction≤ jus⌠ ì
ì
ááááááááááabovσ case0« Afte≥ gettinτ anΣ testinτ ß keypress¼ thσ ì
ì
ááááááááááprograφ load≤ B╠ witΦ thσ digi⌠ iε AL¼ theε AND≤ thσ ì
ì
ááááááááááresul⌠ witΦ 03¼ creatinτ ß 1╢-bi⌠ valuσ ranginτ froφ ░ ì
ì
áááááááááát∩ 3« Shiftinτ thi≤ valuσ onσ bi⌠ t∩ thσ lef⌠ ì
ì
áááááááááámultiplie≤ B╪ b∙ 2¼ forminτ ß worΣ inde° int∩ thσ ì
ì
ááááááááááaddres≤ table« Afte≥ this¼ thσ JM╨ instructioε execute≤ ì
ì
ááááááááááthσ selecteΣ casσ b∙ jumpinτ indirectl∙ t∩ thσ ì
ì
ááááááááááappropriatσ address« ì
áááááááááá Becausσ thσ samσ JM╨ instructioε execute≤ al∞ oµ ì
ì
ááááááááááthσ labeleΣ sections¼ case░ througΦ case3¼ i⌠ take≤ n∩ ì
ì
áááááááááámorσ timσ t∩ star⌠ runninτ thσ codσ a⌠ case│ thaε i⌠ ì
ì
áááááááááádoe≤ t∩ star⌠ thσ codσ a⌠ case0« EacΦ casσ i≤ giveε ì
ì
ááááááááááequa∞ time¼ ß democratiπ arrangemen⌠ anΣ primar∙ ì
ì
ááááááááááadvantagσ oµ jum≡ tables« ì
áááááááááá Despitσ thi≤ advantage¼ though¼ therσ i≤ onσ maiε ì
ì
áááááááááádisadvantagσ t∩ usinτ jum≡ tables« Iµ you≥ casσ ìèì
ááááááááááselecto≥ value≤ (thσ digit≤ iε A╠ iε thi≤ example⌐ arσ ì
ì
ááááááááááwidel∙ separated¼ yo⌡ mus⌠ inser⌠ dumm∙ offset≤ int∩ thσ ì
ì
áááááááááátable« Fo≥ example¼ supposσ you≥ selector≤ arσ 0¼ 2¼ 4¼ ì
ì
ááááááááááanΣ 6« Thσ jum≡ tablσ mus⌠ reservσ spacσ fo≥ thσ unuseΣ ì
ì
áááááááááávalues¼ 1¼ 3¼ anΣ 5« Thσ easies⌠ methoΣ i≤ t∩ usσ thσ ì
ì
ááááááááááendcasσ labe∞ fo≥ unuseΣ selecto≥ values¼ rewritinτ thσ ì
ì
áááááááááájum≡ tablσ s∩ tha⌠ thσ illega∞ value≤ 1¼ 3¼ anΣ ╡ simpl∙ ì
ì
áááááááááájum≡ t∩ thσ enΣ oµ thσ casσ selections║ ì
ááááááááááì
.ls1
áááááááááátablσ d≈ case0¼ endcase¼ case1¼ endcase
áááááááááá d≈ case2¼ endcase¼ case3
.ls2
ááááááááááì
ááááááááááì
áááááááááá WitΦ greatl∙ separateΣ values¼ sa∙ onl∙ ╢ possiblσ ì
ì
áááááááááávalue≤ iε thσ rangσ ░ t∩ 255¼ thσ numbe≥ oµ endcasσ ì
ì
ááááááááááentrie≤ fo≥ unuseΣ value≤ migh⌠ causσ thσ jum≡ tablσ t∩ ì
ì
áááááááááágro≈ to∩ largσ fo≥ you≥ requirements« Iε thi≤ event¼ ì
ì
ááááááááááyo⌡ mus⌠ conside≥ whethe≥ thσ timσ saving≤ oµ jum≡ ì
ì
áááááááááátable≤ arσ wortΦ thσ wasteΣ memor∙ yo⌡ caε savσ witΦ ß ì
ì
ááááááááááserie≤ oµ conditiona∞ jumps« ì
ááááááááááì
ááááááááááì
ááááááááááWritinτ Jum≡ Table≤ iε Pasca∞ ì
ááááááááááì
áááááááááá Okay¼ we'vσ saweΣ thσ lad∙ iε tw∩ anΣ we'vσ seeε ì
ì
ááááááááááwha⌠ she'≤ go⌠ inside« Wσ kno≈ ho≈ t∩ codσ ß jum≡ tablσ ì
ì
ááááááááááiε assembl∙ language« We'vσ seeε tha⌠ jum≡ table≤ ì
ìèááááááááááoperatσ morσ efficientl∙ thaε compileΣ Pasca∞ CAS┼ ì
ì
áááááááááástatement≤ b∙ givinτ equa∞ acces≤ t∩ labeleΣ statements« ì
ì
ááááááááááThσ question≤ remain║ Ho≈ caε wσ teacΦ Turb∩ Pasca∞ t∩ ì
ì
ááááááááááusσ jum≡ tables¼ anΣ wha⌠ arσ thσ practica∞ benefits┐ ì
áááááááááá Listinτ │ illustrate≤ onσ solution¼ thσ functiona∞ ì
ì
ááááááááááequivalen⌠ oµ Listinτ 1« Thσ globa∞ tableô variablσ ì
ì
ááááááááááhold≤ thσ offse⌠ addresse≤ oµ thσ procedures¼ proc0¼ ì
ì
ááááááááááproc1¼ proc2,ô anΣ proc3« Thσ firs⌠ fou≥ statement≤ iε ì
ì
ááááááááááthσ maiε prograφ initializσ thi≤ array« ì
áááááááááá Thσ inlinσ procedure¼ jump,ô replace≤ thσ CAS┼ ì
ì
áááááááááástatemen⌠ iε Listinτ 1¼ duplicatinτ thσ actioε oµ thσ ì
ì
ááááááááááassembl∙ languagσ jum≡ tablσ iε Listinτ 2« Fo≥ ì
ì
ááááááááááreference¼ here'≤ thσ assembl∙ languagσ fo≥ thσ inlinσ ì
ì
áááááááááácode║ ì
ááááááááááì
.ls1
áááááááááá5┬ PO╨ BX
ááááááááááD▒ E│ SH╠ BX,1
ááááááááááF╞ 9╖ tablσ CAL╠ table[BX]
.ls2
ááááááááááì
ááááááááááì
áááááááááá Thσ inlinσ jumpô procedurσ take≤ ß singlσ worΣ ì
ì
ááááááááááparameter¼ index,ô thσ counterpar⌠ t∩ thσ CAS┼ statemen⌠ ì
ì
ááááááááááselector« Inlinσ procedure≤ (anΣ functions⌐ operatσ ì
ì
áááááááááásimilarl∙ t∩ assembl∙ languagσ macros« Wheε Turb∩ ì
ì
ááááááááááPasca∞ compile≤ thσ FO╥ loop¼ i⌠ replace≤ jumpô witΦ thσ ì
ì
ááááááááááinlinσ bytes« Jus⌠ beforehand¼ thσ compile≥ als∩ ì
ì
áááááááááágenerate≤ codσ t∩ pusΦ an∙ parameter≤ ont∩ thσ stack« ì
áááááááááá Thσ firs⌠ joΓ fo≥ thσ inlinσ code¼ then¼ i≤ t∩ po≡ ì
ìèááááááááááthσ stackeΣ indexô valuσ int∩ BX« Then¼ thσ SH╠ ì
ì
ááááááááááinstructioε multiplie≤ B╪ b∙ two¼ forminτ ß 1╢-bi⌠ inde° ì
ì
ááááááááááint∩ thσ jum≡ table« Finally¼ thσ CAL╠ instructioε ì
ì
áááááááááácall≤ thσ procedurσ a⌠ thσ addres≤ previousl∙ storeΣ iε ì
ì
ááááááááááthσ table« (Thi≤ examplσ use≤ CAL╠ wherσ Listinτ ▓ use≤ ì
ì
ááááááááááJMP¼ bu⌠ thσ ideß i≤ thσ same.⌐ ì
áááááááááá Listinτ │ doe≤ no⌠ perforφ an∙ rangσ check≤ oε ì
ì
áááááááááávariablσ i« Iε mos⌠ programs¼ thi≤ i≤ somethinτ you'l∞ ì
ì
ááááááááááwan⌠ t∩ add« Yo⌡ mus⌠ bσ certaiε neve≥ t∩ usσ indexe≤ ì
ì
ááááááááááoutsidσ oµ thσ jum≡ tablσ range¼ o≥ ß prograφ crasΦ i≤ ì
ì
áááááááááácertain« ì
ááááááááááì
ááááááááááì
ááááááááááUsinτ Jum≡ Table≤ ì
ááááááááááì
áááááááááá Beforσ rushinτ ou⌠ t∩ perforφ you≥ owε jum≡ tablσ ì
ì
áááááááááátricks¼ bσ awarσ tha⌠ thσ tableô oµ offset≤ (Listinτ 3⌐ ì
ì
áááááááááámus⌠ bσ ß globa∞ variablσ storeΣ iε Pascal'≤ datß ì
ì
áááááááááásegment« Thσ inlinσ jumpô procedurσ assume≤ tha⌠ D╙ ì
ì
ááááááááááaddresse≤ thσ datß segmen⌠ a≤ D╙ normall∙ doe≤ iε Turb∩ ì
ì
ááááááááááPascal« Declarinτ tableô loca∞ t∩ ß procedurσ o≥ ì
ì
ááááááááááfunctioε wil∞ no⌠ worδ becausσ loca∞ variable≤ arσ ì
ì
áááááááááástoreΣ oε thσ stack¼ no⌠ iε thσ datß segment« ì
áááááááááá Onσ disadvantagσ t∩ thσ jum≡ tablσ solutioε i≤ tha⌠ ì
ì
ááááááááááyo⌡ mus⌠ usσ procedurσ call≤ a≤ showε iε Listinτ 3« Yo⌡ ì
ì
áááááááááácan'⌠ jum≡ t∩ othe≥ kind≤ oµ labeleΣ statement≤ becausσ ì
ì
ááááááááááOF╙ can'⌠ calculatσ thσ addres≤ oµ ß statemen⌠¡-onl∙ ìèì
ááááááááááprocedures¼ functions¼ anΣ variables« ì
áááááááááá Arσ thσ advantage≤ wortΦ thσ troublσ oµ usinτ jum≡ ì
ì
áááááááááátable≤ iε Pascal┐ A≤ ß tes⌠ (no⌠ listeΣ here)¼ ╔ ì
ì
ááááááááááextendeΣ Listing≤ ▒ anΣ │ t∩ cal∞ 2▒ procedure≤ insteaΣ ì
ì
ááááááááááoµ 4« ╔ removeΣ thσ Writelε statement≤ anΣ theε ì
ì
ááááááááááexecuteΣ thσ FO╥ loo≡ iε eacΦ prograφ 50,00░ time≤ oε aε ì
ì
áááááááááá8038╢-baseΣ system« Listinτ ▒ (witΦ thσ Pasca∞ CAS┼ ì
ì
áááááááááástatement⌐ tooδ 23.7▓ second≤ t∩ run« Listinτ ▓ ¿witΦ ì
ì
ááááááááááthσ inlinσ jumpô procedure⌐ tooδ 12.3╢ seconds¼ almos⌠ ì
ì
áááááááááátwicσ a≤ fast« ì
áááááááááá A≤ yo⌡ caε see¼ jum≡ table≤ caε dramaticall∙ ì
ì
ááááááááááimprovσ thσ performancσ oµ Turb∩ Pascal'≤ CAS┼ ì
ì
áááááááááástatement« Thi≤ isn'⌠ ß tricδ you'l∞ usσ al∞ thσ time¼ ì
ì
áááááááááábu⌠ t∩ squeezσ extrß speeΣ froφ you≥ programs¼ yo⌡ migh⌠ ì
ì
áááááááááátr∙ givinτ you≥ CAS┼ statement≤ ß casσ oµ thσ jumps« ì
ááááááááááì
áááááááááá ##ú ì