home *** CD-ROM | disk | FTP | other *** search
- âïÇéÇ 23.
-
- ÉàäÇèÆêÉÄéÇìêà ÇææàîüïàÉìÄâÄ èÄäÇ.
-
- Åα«µÑñπαδ ¿ Σπ¡¬µ¿¿, ¡á»¿ßá¡¡δÑ ¡á áßßѼí½ÑαÑ ¼«úπΓ íδΓ∞
- ßó∩ºá¡δ ß »α«úαἼἿ ¿ ¼«ñπ½∩¼¿ Turbo Pascal ß »«¼«Θ∞ε ñ¿αÑ¬Γ¿óδ
- ¬«¼»¿½∩Γ«αá $L. êßσ«ñ¡δ⌐ Σá⌐½ ¡á áßßѼí½ÑαÑ ñ«½ªÑ¡ íδΓ∞
- áßßÑ¼í½¿α«óá¡ ó «íΩÑ¬Γ¡δ⌐ Σá⌐½ (.OéJ) ß »«¼«Θ∞ε Turbo Assembler. æ
- »α«úαá¼¼«⌐ ¿½¿ ¼«ñπ½Ñ¼ ¼«ª¡« ßó∩ºáΓ∞ ¡Ñ߬«½∞¬« «íΩÑ¬Γ¡δσ Σá⌐½«ó ß
- »«¼«Θ∞ε ¡Ñ߬«½∞¬¿σ ñ¿αÑ¬Γ¿ó $L.
- Åα«µÑñπαδ ¿ Σπ¡¬µ¿¿, ¡á»¿ßá¡¡δÑ ¡á áßßѼí½ÑαÑ, ñ«½ª¡δ íδΓ∞
- «íΩ∩ó½Ñ¡δ ó »α«úαá¼¼Ñ ¿½¿ ¼«ñπ½Ñ ¡á Åá߬á½Ñ, ¬á¬ external,
- ¡á»α¿¼Ñα:
-
- function LoCase(Ch: Char): Char; external;
-
- é ß««ΓóÑΓßΓóπεΘÑ⌐ ¿ßσ«ñ¡«⌐ »α«úαá¼¼Ñ ¡á áßßѼí½ÑαÑ, óßÑ
- »α«µÑñπαδ ¿ Σπ¡¬µ¿¿ ñ«½ª¡δ íδΓ∞ αáß»«½«ªÑ¡δ ó ßÑú¼Ñ¡ΓÑ ß ¿¼Ñ¡Ñ¼
- CODE ¿½¿ CSEG, ¿½¿ ó ßÑú¼Ñ¡ΓÑ, τ∞Ñ ¿¼∩ «¬á¡τ¿óáÑΓß∩ _TEXT ¿ ¿¼Ñ¡á
- ó¡ÑΦ¡¿σ »α«µÑñπα ¿ Σπ¡¬µ¿⌐ ñ«½ª¡δ íδΓ∞ ó ñ¿αÑ¬Γ¿óÑ PUBLIC.
- éδ ñ«½ª¡δ íδΓ∞ πóÑαÑ¡δ, τΓ« »α«µÑñπαá ¿½¿ Σπ¡¬µ¿∩ ¡á
- áßßѼí½ÑαÑ ß««ΓóÑΓßΓóπÑΓ ÑÑ «»αÑñѽѡ¿ε ¡á Åá߬á½Ñ »« ¼«ñѽ¿ ó맮óá
- (NEAR ¿½¿ FAR), τ¿ß½π »áαá¼ÑΓα«ó, Γ¿»π »áαá¼ÑΓα«ó ¿ Γ¿»π
- αѺπ½∞ΓáΓá.
- êßσ«ñ¡δ⌐ Σá⌐½ ¡á áßßѼí½ÑαÑ ¼«ªÑΓ «íΩ∩ó½∩Γ∞ ¿¡¿µ¿á½¿º¿α«óá¡¡δÑ
- »ÑαѼѡ¡δÑ ó ßÑú¼Ñ¡ΓÑ ß ¿¼Ñ¡Ñ¼ CONST ¿½¿ ó ßÑú¼Ñ¡ΓÑ, τ∞Ñ ¿¼∩
- «¬á¡τ¿óáÑΓß∩ _DATA ¿ ¡Ñ¿¡¿µ¿á½¿º¿α«óá¡¡δÑ »ÑαѼѡ¡δÑ ó ßÑú¼Ñ¡ΓÑ ß
- ¿¼Ñ¡Ñ¼ DATA ¿½¿ DSEG, ¿½¿ ó ßÑú¼Ñ¡ΓÑ, τ∞Ñ ¿¼∩ «¬á¡τ¿óáÑΓß∩ _BSS.
- Æá¬¿Ñ »ÑαѼѡ¡δÑ ∩ó½∩εΓß∩ ½«¬á½∞¡δ¼¿ ó »α«úαá¼¼Ñ ¡á ÇßßѼí½ÑαÑ ¿ ¬
- ¡¿¼ ¡Ñ½∞º∩ «íαáΓ¿Γ∞ß∩ ¿º »α«úαá¼¼δ ¿½¿ ¼«ñπ½∩ ¡á Åá߬á½Ñ. Äñ¡á¬«,
- «¡¿ αẼÑΘáεΓß∩ ó Γ«¼ ªÑ ßÑú¼Ñ¡ΓÑ, τΓ« ¿ ú½«íá½∞¡δÑ »ÑαѼѡ¡δÑ
- Åá߬á½∩ ¿ ¬ ¡¿¼ ¼«ª¡« «íαáΓ¿Γ∞ß∩ τÑαѺ ßÑú¼Ñ¡Γ¡δ⌐ αÑú¿ßΓα DS.
- è« óßѼ »α«µÑñπαá¼, Σπ¡¬µ¿∩¼ ¿ »ÑαѼѡ¡δ¼, «íΩ∩ó½Ñ¡¡δ¼ ó
- »α«úαá¼¼Ñ ¿½¿ ¼«ñπ½Ñ ¡á Åá߬á½Ñ ¿ «íΩ∩ó½Ñ¡¡δ¼ ó ßѬµ¿¿ interface
- ¿ß»«½∞ºπѼδσ ¼«ñπ½Ñ⌐, ¼«ª¡« «íαáΓ¿Γ∞ß∩ ¿º »α«úαá¼¼δ ¡á ÇßßѼí½ÑαÑ
- τÑαѺ ñ¿αÑ¬Γ¿óπ EXTRN. è«¡Ñτ¡«, éδ ñ«½ª¡δ ¿ß»«½∞º«óáΓ∞ ¬«ααÑ¬Γ¡δ⌐
- Γ¿» ó «»¿ßá¡¿¿ EXTRN.
- è«úñá ó ñ¿αÑ¬Γ¿óÑ $L »«∩ó½∩ÑΓß∩ «íΩÑ¬Γ¡δ⌐ Σá⌐½, Turbo Pascal
- »αÑ«íαáºπÑΓ φëà Σá⌐½ ¿º »ÑαѼÑΘáѼ«ú« Σ«α¼áΓá «íΩÑ¬Γ¡«ú« ¼«ñπ½∩
- Intel (.OBJ) ó ßó«⌐ ó¡πΓαÑ¡¡¿⌐ »ÑαѼÑΘáѼδ⌐ Σ«α¼áΓ. ¥Γ«
- »αÑ«íαẫóá¡¿Ñ ó«º¼«ª¡« Γ«½∞¬« »α¿ ß«í½εñÑ¡¿¿ »αáó¿½:
-
- - éßÑ »α«µÑñπαδ ñ«½ª¡δ íδΓ∞ αẼÑΘÑ¡δ ó ßÑú¼Ñ¡ΓÑ ß ¿¼Ñ¡Ñ¼ CODE
- ¿½¿ CSEG, ¿½¿ ó ßÑú¼Ñ¡ΓÑ, τ∞Ñ ¿¼∩ «¬á¡τ¿óáÑΓß∩ ¡á _TEXT. éßÑ
- ¿¡¿µ¿á½¿º¿α«óá¡¡δÑ ½«¬á½∞¡δÑ »ÑαѼѡ¡δÑ ñ«½ª¡δ αẼÑΘáΓ∞ß∩ ó
- ßÑú¼Ñ¡ΓÑ ß ¿¼Ñ¡Ñ¼ CONST ¿½¿ ßÑú¼Ñ¡ΓÑ ß ¿¼Ñ¡Ñ¼, «¬á¡τ¿óáεΘ¿¼ß∩ ¡á
- _DATA. éßÑ ¡Ñ¿¡¿µ¿á½¿º¿α«óá¡¡δÑ ½«¬á½∞¡δÑ »ÑαѼѡ¡δÑ ñ«½ª¡δ íδΓ∞
- αẼÑΘÑ¡δ ó ßÑú¼Ñ¡ΓÑ ß ¿¼Ñ¡Ñ¼ DATA ¿½¿ DSEG, ¿½¿ ó ßÑú¼Ñ¡ΓÑ ß
- ¿¼Ñ¡Ñ¼, «¬á¡τ¿óáεΘ¿¼ß∩ ¡á _BSS. éßÑ ñαπú¿Ñ ßÑú¼Ñ¡Γδ ¿ú¡«α¿απεΓß∩,
- ΓᬪÑ, ¬á¬ ¿ ñ¿αÑ¬Γ¿óá GROUP. Ä»¿ßá¡¿∩ ßÑú¼Ñ¡Γ«ó ¼«úπΓ π¬áºδóáΓ∞
- óδαáó¡¿óá¡¿Ñ BYTE ¿½¿ WORD; »α¿ αÑñá¬Γ¿α«óá¡¿¿ ¬«ñ«óδÑ ßÑú¼Ñ¡Γδ
- óßÑúñá óδαáó¡Ñ¡δ ¡á íá⌐Γ, á ßÑú¼Ñ¡Γδ ñá¡¡δσ óßÑúñá óδαáó¡Ñ¡δ ¡á
- ß½«ó«. Ä»¿ßá¡¿Ñ ßÑú¼Ñ¡Γ«ó ¼«úπΓ π¬áºδóáΓ∞ PUBLIC ¿ ¿¼∩ ¬½áßßá, ¡«
- «¡¿ ¿ú¡«α¿απεΓß∩.
-
- - Turbo Pascal ¿ú¡«α¿απÑΓ óßÑ ñá¡¡δÑ ñ½∩ ßÑú¼Ñ¡Γ«ó, «Γ½¿τ¡δσ
- «Γ ßÑú¼Ñ¡Γ«ó ¬«ñá (CODE, CSEG ¿½¿ xxxσ_TEXT) ¿ ßÑú¼Ñ¡Γδ
- ¿¡¿µ¿á½¿º¿α«óá¡¡δσ ñá¡¡δσ (CONST ¿½¿ xxxx_DATA). è«úñá «íΩ∩ó½∩ÑΓß∩
- »ÑαѼѡ¡δÑ ó ßÑú¼Ñ¡ΓÑ ¡Ñ¿¡¿µ¿á½¿º¿α«óá¡¡δσ ñá¡¡δσ (DATA, DSEG ¿½¿
- xxxx_BSS), óßÑúñá ¿ß»«½∞ºπ⌐ΓÑ º¡á¬ (?) ñ½∩ π¬áºá¡¿∩ º¡áτÑ¡¿⌐,
- ¡á»α¿¼Ñα:
-
- Count DW ?
- Buffer DB 128 DUP(?)
-
- - Äñ¡«íá⌐Γ«óδÑ ßß佬¿ ¬ EXTRN ß¿¼ó«½á¼ ¡Ññ«»πßΓ¿¼δ. ¥Γ«
- «º¡áτáÑΓ, τΓ« «»ÑαáΓ«αδ HIGH ¿ LOW ¡Ñ ¼«úπΓ íδΓ∞ ¿ß»«½∞º«óá¡δ ß
- EXTRN ß¿¼ó«½á¼¿.
-
-
- Turbo Assembler ¿ Turbo Pascal.
-
- Turbo Assembler (TASM) »«ºó«½∩ÑΓ »α«ßΓ« »¿ßáΓ∞ »α«úαá¼¼δ ¡á
- áßßѼí½ÑαÑ ¿ ßó∩ºδóáΓ∞ ¿σ ß éáΦ¿¼¿ »α«úαἼἿ ¡á Turbo Pascal.
- Turbo Assembler «íÑß»Ñτ¿óáÑΓ »α«ßΓπε ßÑú¼Ñ¡Γᵿε, ¼«ñѽ¿ »á¼∩Γ¿ ¿
- ∩ºδ¬«óπε »«ññÑ᪬π ñ½∩ »α«úαá¼¼¿ßΓ«ó ¡á Turbo Pascal.
- êß»«½∞º«óá¡¿Ñ TPASCAL ß ñ¿αÑ¬Γ¿ó«⌐ .MODEL πßΓá¡áó½¿óáÑΓ
- ß«ú½áΦÑ¡¿∩ « ó맮óáσ Åá߬á½∩, «»αÑñѽ∩ÑΓ ¿¼Ñ¡á ßÑú¼Ñ¡Γ«ó, ñѽáÑΓ
- PUSH BP ¿ MOV BP,SP ¿ Γá¬ªÑ πßΓá¡áó½¿óáÑΓ ó«ºóαáΓ τÑαѺ POP BP ¿
- RET N (úñÑ N τ¿ß½« íá⌐Γ«ó »áαá¼ÑΓα«ó).
- ä¿αÑ¬Γ¿óá PROC »«ºó«½∩ÑΓ éá¼ «»αÑñѽ∩Γ∞ óáΦ¿ »áαá¼ÑΓαδ ó Γ«¼
- ªÑ »«α∩ñ¬Ñ, ¬á¬ «¡¿ «»αÑñѽѡδ ó éáΦÑ⌐ »α«úαá¼¼Ñ ¡á Åá߬á½Ñ. àß½¿
- éδ «»αÑñѽ∩ÑΓÑ Σπ¡¬µ¿ε, ¬«Γ«αá∩ ó«ºóαáΘáÑΓ ßΓ᫬π, »«¼¡¿ΓÑ, τΓ«
- ñ¿αÑ¬Γ¿óá PROC ¿¼ÑÑΓ «»µ¿ε RETURNS, ¬«Γ«αá∩ »«ºó«½∩ÑΓ éá¼
- «íαáΘáΓ∞ß∩ ¬ π¬áºáΓÑ½ε ¡á óαѼѡ¡πε ßΓ᫬π ó ßΓÑ¬Ñ íѺ πτÑΓá τ¿ß½á
- íá⌐Γ »áαá¼ÑΓα«ó, ñ«íáó½Ñ¡¡δσ ¬ «»ÑαáΓ«απ RET.
- Åα¿¼Ñα ¬«ñá ß ¿ß»«½∞º«ó᡿Ѽ ñ¿αÑ¬Γ¿ó .MODEL ¿ PROC:
-
- .MODEL TPASCAL
- .CODE
- MyProc PROC FAR I: Byte, J: Byte RETURNS Result: DWORD
- PUBLIC MyProc
- les DI,Result ; »«½πτ¿Γ∞ áñαÑß óαѼѡ¡«⌐ ßΓ᫬¿
- mov AL,I ; »«½πτ¿Γ∞ »Ñαóδ⌐ »áαá¼ÑΓα I
- mov BL,J ; »«½πτ¿Γ∞ óΓ«α«⌐ »áαá¼ÑΓα J
- ...
- ret
-
- Ä»¿ßá¡¿Ñ Σπ¡¬µ¿¿ ¡á Åá߬á½Ñ:
-
- function MyProc(I, J: Char): string; external;
-
-
- Åα¿¼Ñαδ »α«úαá¼¼ ¡á ÇßßѼí½ÑαÑ.
-
- çñÑß∞ »αÑñßΓáó½Ñ¡ »α¿¼Ñα ¼«ñπ½∩, ¬«Γ«αδ⌐ αÑ὿ºπÑΓ ñóÑ
- »α«úαá¼¼δ «íαáí«Γ¬¿ ßΓ᫬ ¡á ÇßßѼí½ÑαÑ. öπ¡¬µ¿∩ UpperCase
- »αÑ«íαáºπÑΓ óßÑ ß¿¼ó«½δ ó ßΓα«¬Ñ ó ºáú½áó¡δÑ. öπ¡¬µ¿∩ StringOf
- ó«ºóαáΘáÑΓ ßΓ᫬π ß¿¼ó«½«ó ºáñá¡¡«⌐ ñ½¿¡δ.
-
- unit Strings;
- interfase
- function UpperCase(S: String): String;
- function StringOf(Ch: Char; Count: Byte): String;
- implementation
- {$L STRS}
- function UpperCase; external;
- function StringOf; external;
- end.
-
- Åα«úαá¼¼á ¡á ÇßßѼí½ÑαÑ, αÑ὿ºπεΘá∩ Σπ¡¬µ¿¿ UpperCase ¿
- StringOf, »«¬áºá¡á ¡¿ªÑ. Ä¡á ñ«½ª¡á íδΓ∞ áßßÑ¼í½¿α«óá¡á ó Σá⌐½
- Strs.OBJ ñ« ¬«¼»¿½∩µ¿¿ ¼«ñπ½∩ Strings. çá¼ÑΓ¿¼, τΓ« »α«úαá¼¼δ
- ¿ß»«½∞ºπεΓ ñá½∞¡εε ¼«ñѽ∞ ó맮óá, Γᬠ¬á¬ «¡¿ «íΩ∩ó½Ñ¡δ ó
- ¿¡ΓÑαΣÑ⌐ß¡«⌐ τáßΓ¿ ¼«ñπ½∩.
-
- CODE SEGMENT BYTE PUBLIC
- ASSUME CS:CODE
- PUBLIC UpperCase, StringOf ; «íΩ∩ó½Ñ¡¿Ñ Σπ¡¬µ¿⌐
-
- ; function UpperCase(S: String): String;
-
- UpperRes EQU DWORD PTR [BP+10]
- UpperStr EQU DWORD PTR [BP+6]
-
- UpperCase PROC FAR
- push bp ; ß«σαá¡¿Γ∞ bp
- mov bp,sp ; πßΓá¡«ó¿Γ∞ ßΓѬ
- push ds ; ß«σαá¡¿Γ∞ ds
- lds si,UpperStr ; ºáúαπº¿Γ∞ áñαÑß ßΓ᫬¿
- les di,UpperRes ; ºáúαπº¿Γ∞ áñαÑß αѺπ½∞ΓáΓá
- cld
- lodsb ; ºáúαπº¿Γ∞ ñ½¿¡π ßΓ᫬¿
- stosb ; ¬«»¿α«óáΓ∞ ó αѺπ½∞ΓáΓ
- mov cl,al ; ñ½¿¡π ßΓ᫬¿ ó CX
- xor ch,ch
- jcxz U3 ; »α«»πßΓ¿Γ∞, Ñß½¿ ßΓα«¬á »πßΓá∩
- U1: lodsb ; ºáúαπº¿Γ∞ ß¿¼ó«½
- cmp al,'a' ; »α«»πßΓ¿Γ∞ Ñß½¿ ¡Ñ 'a'..'z'
- jb U2
- cmp al,'z'
- ja U2
- sub al,'a'-'a' ; »αÑ«íαẫóáΓ∞ ó ºáú½áó¡δÑ
- U2: stosb ; ºá»«¼¡¿Γ∞ ó αѺπ½∞ΓáΓ
- loop U1 ; µ¿¬½ ñ½∩ óßÑσ ß¿¼ó«½«ó
- U3: pop ds ; ó«ßΓá¡«ó¿Γ∞ ds
- pop bp ; ó«ßΓá¡«ó¿Γ∞ bp
- ret 4 ; πñ὿Γ∞ »áαá¼ÑΓα ¿ ó«ºóαáΓ
- UpperCase ENDP
-
- ; procedure StringOf(var S :string; Ch : char; Count: byte)
-
- StrOfs EQU DWORD PTR [BP + 10]
- StrOfChar EQU BYTE PTR [BP + 8]
- StrOfCount EQU BYTE PTR [BP + 6]
- StringOf Proc FAR
- push bp ; ß«σαá¡¿Γ∞ bp
- mov bp,sp ; πßΓá¡«ó¿Γ∞ ßΓѬ
- les di,StrOfRes ; ºáúαπº¿Γ∞ áñαÑß αѺπ½∞ΓáΓá
- mov al,StrOfCount ; ºáúαπº¿Γ∞ ßτÑΓτ¿¬
- cld
- stosb ; ß«σαá¡¿Γ∞ ñ½¿¡π
- mov cl,al ; ßτÑΓτ¿¬ ó CX
- xor ch,ch
- mov al, StrOfChar ; ºáúαπº¿Γ∞ ß¿¼ó«½
- rep STOSB ; ß«σαá¡¿Γ∞ ßΓ᫬π ß¿¼ó«½«ó
- pop bp ; ó«ßßΓá¡«ó¿Γ∞ bp
- ret 8 ; πñ὿Γ∞ »áαá¼ÑΓα ¿ ó«ºóαáΓ
- StringOf ENDP
- CODE ENDS
- END
-
-
- ä½∩ Γ«ú« τΓ«íδ áßßÑ¼í½¿α«óáΓ∞ »α¿¼Ñα ¿ «Γ¬«¼»¿½¿α«óáΓ∞ ¼«ñπ½∞,
- ¿ß»«½∞ºπ⌐ΓÑ ¬«¼á¡ñδ:
-
- TASM STRS
- TPC strings
-
- æ½ÑñπεΘ¿⌐ »α¿¼Ñα »«¬áºδóáÑΓ, ¬á¬ »α«úαá¼¼á ¡á ÇßßѼí½ÑαÑ ¼«ªÑΓ
- «íαáΘáΓ∞ß∩ ¬ »α«úαἼἠ¿ »ÑαѼѡ¡δ¼ Åá߬á½∩. Åα«úαá¼¼á Numbers
- τ¿ΓáÑΓ ñ« 100 µÑ½δσ º¡áτÑ¡¿⌐ ¿ ºáΓѼ óδºδóáÑΓ »α«µÑñπαπ ¡á
- ÇßßѼí½ÑαÑ, τΓ«íδ »α«óÑα¿Γ∞ ñ¿á»áº«¡ ¬áªñ«ú« ¿º φΓ¿σ º¡áτÑ¡¿⌐. àß½¿
- º¡áτÑ¡¿Ñ óδσ«ñ¿Γ ¿º ñ¿á»áº«¡á, »α«µÑñπαá ¡á ÇßßѼí½ÑαÑ óδºδóáÑΓ
- »α«µÑñπαπ ¡á Åá߬á½Ñ ñ½∩ Ñú« »ÑτáΓ¿.
-
- program Numbers;
- {$L CHECK}
- var
- Buffer: array[1..100] of Integer;
- Count: Integer;
- procedure RangeError(N: Integer);
- begin
- WriteLn('Range error: ', N);
- end;
-
- procedure CheckRange(Min, Max: Integer); external;
- begin
- Count := 0;
- while not EOF and (Count < 100) do
- begin
- Count := Count + 1;
- ReadLn(Buffer[Count]);
- {ºá¬«¡τ¿Γß∩, ¬«úñá »«½∞º«óáΓѽ∞ óóÑñÑΓ CTRL-Z ¿½¿
- »«ß½Ñ 100 ¿ΓÑαᵿ⌐}
- end;
- CheckRange(-10,10);
- end.
-
- Åα«úαá¼¼á ¡á ÇßßѼí½ÑαÑ, αÑ὿ºπεΘá∩ »α«µÑñπαπ CheckRange,
- »α¿óÑñÑ¡á ¡¿ªÑ.
- Ä¡á ñ«½ª¡á íδΓ∞ áßßÑ¼í½¿α«óá¡á ó Σá⌐½ Check.OBJ ñ« ¬«¼»¿½∩µ¿¿
- »α«úαá¼¼δ Numbers. çá¼ÑΓ¿¼, τΓ« »α«µÑñπαá ¿ß»«½∞ºπÑΓ í½¿ª¡εε ¼«ñѽ∞
- ó맮óá, Γᬠ¬á¬ «íΩ∩ó½Ñ¡á ó »α«úαá¼¼Ñ.
-
- DATA SEGMENT WORD PUBLIC
- EXTRN Buffer: WORD, Count: WORD; ;ÅÑαѼѡ¡δÑ Åá߬á½∩
- DATA ENDS
- CODE SEGMENT BYTE PUBLIC
- ASSUME CS: CODE, DS: Buffer
- EXTRN RangeError: NEAR ;αÑ὿º«óá¡ ó Åá߬á½Ñ
- PUBLIC CheckRange ;αÑ὿º«óá¡ ºñÑß∞
- CheckRange PROC NEAR
- mov bx,sp ;»«½πτ¿Γ∞ π¬áºáΓѽ∞ »áαá¼ÑΓα«ó
- mov ax,ss:[bx+4] ;ºáúαπº¿Γ∞ Min
- mov dx,ss:[bx+2] ;ºáúαπº¿Γ∞ Max
- xor bx,bx ;«τ¿ßΓ¿Γ∞ ¿¡ñÑ¬ß ñá¡¡δσ
- mov cx,Count ;ºáúαπº¿Γ∞ Count
- jcxz SD4 ;»α«»πßΓ¿Γ∞ Ñß½¿ 0
- SD1: cmp Buffer[BX],AX ;ß½¿Φ¬«¼ ¼á½?
- jl SD2 ;ñá, »ÑαÑ⌐Γ¿
- cmp Buffer[BX],DX ;ß½¿Φ¬«¼ óѽ¿¬?
- jle SD3 ;¡ÑΓ, »ÑαÑ⌐Γ¿
- SD2: push ax ;ß«σαá¡¿Γ∞ αÑú¿ßΓα
- push bx
- push cx
- push dx
- push Buffer[BX] ;»ÑαÑñáΓ∞ º¡áτÑ¡¿Ñ ó Åá߬á½∞
- CALL RangeError ;óδºóáΓ∞ »α«µÑñπαπ Åá߬á½∩
- pop dx ;ó«ßßΓá¡«ó¿Γ∞ αÑú¿ßΓαδ
- pop cx
- pop bx
- pop ax
- SD3: inc BX ;»ÑαÑ⌐Γ¿ ¬ ß½ÑñπεΘѼπ φ½Ñ¼Ñ¡Γπ
- inc BX
- loop SD1 ;µ¿¬½ ñ½∩ ¬áªñ«ú« φ½Ñ¼Ñ¡Γá
- SD4: ret ;ó«ºóαáΓ
-
- CheckRange ENDP
- CODE ENDS
- END
-
-
- Åα¿¼Ñα ¡á Turbo Assembler.
-
- çñÑß∞ »αÑñßΓáó½Ñ¡á óÑαß¿∩ »αÑñδñπΘÑ⌐ »α«úαá¼¼δ ¡á ÇßßѼí½ÑαÑ,
- ¬«Γ«αá∩ »«¬áºδóáÑΓ »αÑ¿¼πΘÑßΓóá »α¿¼Ñ¡Ñ¡¿∩ Turbo Assembler »α¿
- ßΓ䬫ó¬Ñ ß Åá߬á½Ñ¼:
-
- .MODEL TPASCAL ;¼«ñѽ∞ ¬«ñá Æπαí«-Åá߬á½∩
- LOCALS @@ ;«»αÑñѽ¿Γ∞ »αÑΣ¿¬ß ½«¬á½∞¡δσ ¼ÑΓ«¬
- .DATA ;ßÑú¼Ñ¡Γ ñá¡¡δσ
- EXTRN Buffer: WORD, Count: WORD; ;ÅÑαѼѡ¡δÑ Åá߬á½∩
- .CODE ;ßÑú¼Ñ¡Γ ¬«ñá
- EXTRN RangeError: NEAR ;αÑ὿º«óá¡ ó Åá߬á½Ñ
- PUBLIC CheckRange ;αÑ὿º«óá¡ ºñÑß∞
-
- ChechRange Proc NEAR Min : WORD, Max : WORD
-
- mov ax,Min ;ºáúαπº¿Γ∞ Min ó ax
- mov dx,Max ;ºáúαπº¿Γ∞ Max ó dx
- xor bx,bx ;«τ¿ßΓ¿Γ∞ ¿¡ñÑ¬ß ñá¡¡δσ
- mov cx,Count ;ºáúαπº¿Γ∞ Count
- jcxz @@4 ;»α«»πßΓ¿Γ∞ Ñß½¿ 0
- @@1: cmp ax,Buffer[BX] ;ß½¿Φ¬«¼ ¼á½?
- jg @@2 ;ñá, »ÑαÑ⌐Γ¿ ¡á @@2
- cmp dx,Buffer[BX] ;ß½¿Φ¬«¼ óѽ¿¬?
- jge @@3 ;¡ÑΓ, »ÑαÑ⌐Γ¿ ¡á @@3
- @@2: push ax ;ß«σαá¡¿Γ∞ αÑú¿ßΓα
- push bx
- push cx
- push dx
- push Buffer[BX] ;»ÑαÑñáΓ∞ º¡áτÑ¡¿Ñ ó Åá߬á½∞
- call RangeError ;óδºóáΓ∞ »α«µÑñπαπ Åá߬á½∩
- pop dx ;ó«ßßΓá¡«ó¿Γ∞ αÑú¿ßΓαδ
- pop cx
- pop bx
- pop ax
- @@3: inc BX ;»ÑαÑ⌐Γ¿ ¬ ß½ÑñπεΘѼπ φ½Ñ¼Ñ¡Γπ
- inc BX
- loop @@1 ;µ¿¬½ ñ½∩ ¬áªñ«ú« φ½Ñ¼Ñ¡Γá
- @@4: ret ;ó«ºóαáΓ
-
- CheckRange ENDP
- END
-
- çá¼ÑΓ¿¼, τΓ« .MODEL TPASCAL Turbo Assembler áóΓ«¼áΓ¿τÑ߬¿
- úÑ¡Ñα¿απÑΓ ¬«ñ óσ«ñá ñ« »Ñαó«⌐ ¿¡ßΓαπ¬µ¿¿ ¿ ¬«ñ óδσ«ñá ñ½∩ RET.
-
-
- éßΓα«Ñ¡¡δ⌐ ¼áΦ¿¡¡δ⌐ ¬«ñ.
-
- ä½∩ «τÑ¡∞ ¬«α«Γ¬¿σ »α«úαá¼¼ ¡á ÇßßѼí½ÑαÑ πñ«í¡« »α¿¼Ñ¡∩Γ∞
- «»ÑαáΓ«α ¿½¿ ñ¿αÑ¬Γ¿óπ Inline. Ä¡¿ »«ºó«½∩εΓ éá¼ óßΓáó¿Γ∞
- ¿¡ßΓαπ¬µ¿¿ ¼áΦ¿¡¡«ú« ¬«ñá »α∩¼« ó ΓѬßΓ »α«úαá¼¼δ ¿½¿ ¼«ñπ½∩ ó¼ÑßΓ«
- ¿ß»«½∞º«óá¡¿∩ «íΩÑ¬Γ¡«ú« Σá⌐½á.
-
-
- Ä»ÑαáΓ«α Inline.
-
- Ä»ÑαáΓ«α Inline ß«ßΓ«¿Γ ¿º ºáαѺÑαó¿α«óá¡¡«ú« ß½«óá Inline ¿
- ß½ÑñπεΘ¿σ ºá ¡¿¼ «ñ¡«ú« ¿½¿ í«½ÑÑ φ½Ñ¼Ñ¡Γ«ó, αáºñѽѡ¡δσ ß½φΦἿ
- (/) ¿ ºá¬½ετÑ¡¡δσ ó ߬«í¬¿:
-
- inline(10/$2345/Count+1/Data-OffSet);
-
- æ¿¡Γá¬ß¿ß «»ÑαáΓ«αá Inline:
-
-
- ┌──────┐ ┌─┐ ┌──────────────┐ ┌─┐
- «»ÑαáΓ«α Inline ───÷│inline├──÷│(├────÷│φ½Ñ¼Ñ¡Γ inline├─┬─÷│)├──÷
- └──────┘ └─┘ ° └──────────────┘ │ └─┘
- │ ┌─┐ │
- └───────┤/│≈────────┘
- └─┘
-
-
- èáªñδ⌐ φ½Ñ¼Ñ¡Γ «»ÑαáΓ«αá Inline ß«ßΓ«¿Γ ¿º 󫺼«ª¡«ú«
- π¬áºáΓѽ∩ αẼÑαá, < ¿½¿ > ¿ ¬«¡ßΓá¡Γδ ¿½¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«αá
- »ÑαѼѡ¡«⌐ ¿ñπΘ¿¼¿ ºá 0 ¿½¿ í«½ÑÑ π¬áºáΓѽ∩¼¿ ß¼ÑΘÑ¡¿∩ (ß¼.
- ß¿¡Γá¬ß¿ß ¡¿ªÑ). ô¬áºáΓѽ∞ ß¼ÑΘÑ¡¿∩ ß«ßΓ«¿Γ ¿º + ¿½¿ - ß
- ¬«¡ßΓá¡Γ«⌐.
-
-
- φ½Ñ¼Ñ¡Γ inline
- │ ┌────────┐
- └─┬───────────÷│ßonstant│─────────────────────────────────────÷
- │ ° └────────┘ °
- │ ┌─┐ │ │
- ├─÷│<├──┤ │
- │ └─┘ │ │
- │ ┌─┐ │ │
- ├─÷│<├──┘ │
- │ └─┘ │
- │ ┌────────────────────────┐ │
- └─÷│¿ñÑ¡Γ¿Σ¿¬áΓ«α »ÑαѼѡ¡«⌐├─┬──────────────────────────┘
- └────────────────────────┘ │ °
- │ ┌────┐ ┌─────────┐ │
- └──÷│º¡á¬├─÷│¬«¡ßΓá¡Γá├─┬┘
- ° └────┘ └─────────┘ │
- └─────────────────────┘
-
-
- èáªñδ⌐ φ½Ñ¼Ñ¡Γ «»ÑαáΓ«αá Inline úÑ¡Ñα¿απÑΓ 1 íá⌐Γ ¿½¿ 1 ß½«ó«
- ¬«ñá. ç¡áτÑ¡¿∩ óδτ¿ß½∩εΓß∩ ¿º º¡áτÑ¡¿∩ »Ñαó«⌐ ¬«¡ßΓá¡Γδ ¿½¿
- ß¼ÑΘÑ¡¿∩ ¿ñÑ¡Γ¿Σ¿¬áΓ«αá »ÑαѼѡ¡«⌐, ¬ ¬«Γ«α«¼π ñ«íáó½Ñ¡«/óδτΓÑ¡«
- º¡áτÑ¡¿Ñ ¬áªñ«⌐ ¿º ¬«¡ßΓá¡Γ, ¬«Γ«αδÑ ß½ÑñπεΓ ºá ¡¿¼.
- ¥½Ñ¼Ñ¡Γ Inline úÑ¡Ñα¿απÑΓ 1 íá⌐Γ ¬«ñá, Ñß½¿ «¡ ß«ßΓ«¿Γ Γ«½∞¬«
- ¿º ¬«¡ßΓá¡Γ ¿ Ñß½¿ ¿σ º¡áτÑ¡¿∩ ó¡πΓα¿ 8-¿ í¿Γ«ó«ú« ñ¿á»áº«¡á
- (0..255). àß½¿ º¡áτÑ¡¿Ñ óδσ«ñ¿Γ ºá 8-¿ í¿Γ«óδ⌐ ñ¿á»áº«¡, ¿½¿ Ñß½¿
- φ½Ñ¼Ñ¡Γ Inline ßßδ½áÑΓß∩ ¬ »ÑαѼѡ¡«⌐ - úÑ¡Ñα¿απÑΓß∩ ¬«ñ ñ½¿¡«⌐ ó
- «ñ¡« ß½«ó« (¼Ñ¡∞Φ¿⌐ º¡áτáΘ¿⌐ íá⌐Γ ßΓ«¿Γ »Ñαóδ¼).
- Ä»ÑαáΓ«αδ < ¿ > ¼«úπΓ íδΓ∞ ¿ß»«½∞º«óá¡δ ñ½∩ Γ«ú«, τΓ«íδ
- »ÑαѬαδΓ∞ áóΓ«¼áΓ¿τÑ߬¿⌐ óδí«α αẼÑαá, «»¿ßá¡¡δ⌐ αá¡ÑÑ. àß½¿
- φ½Ñ¼Ñ¡Γ Inline ¡áτ¿¡áÑΓß∩ ß «»ÑαáΓ«αá <, Γ«½∞¬« ¼Ñ¡∞Φ¿⌐ íá⌐Γ
- º¡áτÑ¡¿∩ íπñÑΓ ¬«ñ¿α«óáΓ∞ß∩, ñáªÑ Ñß½¿ φΓ« 16-¿ í¿Γ«ó«Ñ º¡áτÑ¡¿Ñ.
- àß½¿ φ½Ñ¼Ñ¡Γ Inline ¡áτ¿¡áÑΓß∩ ß «»ÑαáΓ«αá >, Γ« íπñÑΓ ¬«ñ¿α«óáΓ∞ß∩
- ß½«ó«, ñáªÑ Ñß½¿ ¡á¿í«½∞Φ¿⌐ íá⌐Γ αáóÑ¡ 0. ìá»α¿¼Ñα, «»ÑαáΓ«α
-
- Inline(<$1234/>$44);
-
- úÑ¡Ñα¿απÑΓ 3 íá⌐Γá ¬«ñá: $34,$44,$00.
- ç¡áτÑ¡¿Ñ ¿ñÑ¡Γ¿Σ¿¬áΓ«αá »ÑαѼѡ¡«⌐ ó φ½Ñ¼Ñ¡ΓÑ Inline
- »αÑñßΓáó½∩ÑΓ ß«í«⌐ ß¼ÑΘÑ¡¿Ñ áñαÑßá »ÑαѼѡ¡«⌐ ó¡πΓα¿ ÑÑ íẫó«ú«
- ßÑú¼Ñ¡Γá. üẫó«⌐ ßÑú¼Ñ¡Γ ú½«íá½∞¡«⌐ »ÑαѼѡ¡«⌐ - »ÑαѼѡ¡«⌐
- «íΩ∩ó½Ñ¡¡«⌐ ¡á ó¡ÑΦ¡Ñ¼ πα«ó¡Ñ ó »α«úαá¼¼Ñ ¿½¿ ¼«ñπ½Ñ ¿½¿
- Γ¿»¿α«óá¡¡«⌐ ¬«¡ßΓá¡Γδ - φΓ« ßÑú¼Ñ¡Γ ñá¡¡δσ, ¬ ¬«Γ«α«¼π «íαáΘáεΓß∩
- τÑαѺ αÑú¿ßΓα DS. üẫóδ⌐ ßÑú¼Ñ¡Γ ½«¬á½∞¡«⌐ »ÑαѼѡ¡«⌐ -
- »ÑαѼѡ¡«⌐, «íΩ∩ó½Ñ¡¡«⌐ ó¡πΓα¿ ΓѬπΘÑ⌐ »«ñ»α«úαá¼¼δ - φΓ« ßÑú¼Ñ¡Γ
- ßΓѬá. é φΓ«¼ ß½πτáÑ »ÑαѼѡ¡á∩ ß¼ÑΘÑ¡á «Γ¡«ß¿Γѽ∞¡« αÑú¿ßΓαá BP,
- ¬«Γ«αδ⌐ áóΓ«¼áΓ¿τÑ߬¿ ßßδ½áÑΓß∩ ¡á ßÑú¼Ñ¡Γ ßΓѬá.
-
- Åα¿¼Ñτá¡¿Ñ: ÉÑú¿ßΓαδ BP, SP, SS ¿ DS ñ«½ª¡δ íδΓ∞ ß«σαá¡Ñ¡δ
- «»ÑαáΓ«α«¼ Inlile; óßÑ «ßΓá½∞¡δÑ αÑú¿ßΓαδ ¼«úπΓ ¿º¼Ñ¡∩Γ∞ß∩.
-
- æ½ÑñπεΘ¿⌐ »α¿¼Ñα «»ÑαáΓ«αá Inline úÑ¡Ñα¿απÑΓ ¼áΦ¿¡¡δ⌐ ¬«ñ ñ½∩
- ºá»«¼¿¡á¡¿∩ ºáñá¡¡«ú« τ¿ß½á ß½«ó ñá¡¡δσ ó ºáñá¡¡«⌐ »ÑαѼѡ¡«⌐.
- Åα«µÑñπαá FillWord ºá»«¼¿¡áÑΓ Count ß½«ó ó º¡áτÑ¡¿¿ Data ó »á¼∩Γ¿,
- ¡áτ¿¡á∩ ß »Ñαó«ú« íá⌐Γá Dest.
-
- procedure FillWord(var Dest; Count, Data: Word);
- begin
- Inline(
- $C4/$BE/Dest/ {LES DI, Dest[BP]}
- $8B/$8E/Count/ {MOV CX, Count[BP]}
- $8B/$86/Data/ {MOV AX, Data[BP]}
- $FC/ {CLD}
- $F3/$AB); {REP STOSW}
- end;
-
- Ä»ÑαáΓ«α Inline ¼«ªÑΓ íδΓ∞ ßó«í«ñ¡« ß¼ÑΦá¡ ß ñαπú¿¼¿
- «»ÑαáΓ«αἿ ó «»ÑαáΓ«α¡«⌐ τáßΓ¿ í½«¬á.
-
-
- ä¿αÑ¬Γ¿óá Inline.
-
- ä¿αÑ¬Γ¿óá Inline »«ºó«½∩ÑΓ éá¼ »¿ßáΓ∞ »α«µÑñπαδ ¿ Σπ¡¬µ¿¿,
- ó¼ÑßΓ« ¬«Γ«αδσ óßΓáó½∩ÑΓß∩ ñá¡¡á∩ »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ ¿¡ßΓαπ¬µ¿⌐
- ¼áΦ¿¡¡«ú« ¬«ñá, ó Γ«¼ ¼ÑßΓÑ, úñÑ «¡¿ óδºδóáεΓß∩. Ä¡¿ »«ñ«í¡δ
- ¼á¬α«ßá¼ ó ÇßßѼí½ÑαÑ. æ¿¡Γá¬ß¿ß ñ¿αÑ¬Γ¿óδ Inline Γᬫ⌐ ªÑ ¬á¬ ¿
- «»ÑαáΓ«αá Inline:
-
-
- ┌────────────────┐
- ñ¿αÑ¬Γ¿óá Inline ───÷│«»ÑαáΓ«α inline│
- └────────────────┘
-
- è«úñá óδºδóáÑΓß∩ «íδτ¡á∩ »α«µÑñπαá ¿½¿ Σπ¡¬µ¿∩ (ó¬½ετá∩ ¿ ΓÑ,
- ¬«Γ«αδÑ ß«ñÑαªáΓ «»ÑαáΓ«αδ Inline), ¬«¼»¿½∩Γ«α úÑ¡Ñα¿απÑΓ ¬«ñ,
- ¬«Γ«αδ⌐ »«¼ÑΘáÑΓ »áαá¼ÑΓαδ (Ñß½¿ «¡¿ ÑßΓ∞) ó ßΓѬ ¿ ºáΓѼ
- úÑ¡Ñα¿απÑΓ ¿¡ßΓαπ¬µ¿ε CALL ñ½∩ ó맮óá »α«µÑñπαδ ¿½¿ Σπ¡¬µ¿¿.
- Äñ¡á¬«, ¬«úñá óδ óδºδóáÑΓÑ Inline »α«µÑñπαπ ¿½¿ Σπ¡¬µ¿ε, ¬«¼»¿½∩Γ«α
- ó¼ÑßΓ« úÑ¡Ñαᵿ¿ CALL óßΓáó½∩ÑΓ ¬«ñ ¿º φΓ«⌐ ñ¿αÑ¬Γ¿óδ Inline.
- è«α«Γ¬¿⌐ »α¿¼Ñα ñóπσ »α«µÑñπα Inline:
-
- procedure DisableInterrupts; Inline($FA); {CLI}
- procedure EnableInterrupts; Inline($FB); {STI}
-
- è«úñá óδºδóáÑΓß∩ DisableInterrupts - úÑ¡Ñα¿απÑΓß∩ 1 íá⌐Γ ¬«ñá
- - ¿¡ßΓαπ¬µ¿∩ CLI.
- Åα«µÑñπαδ ¿ Σπ¡¬µ¿¿, «íΩ∩ó½Ñ¡¡δÑ ß ñ¿αÑ¬Γ¿ó«⌐ Inline, ¼«úπΓ
- ¿¼ÑΓ∞ »áαá¼ÑΓαδ; «ñ¡á¬«, ¬ »áαá¼ÑΓαá¼ ¡Ñ½∞º∩ «íαáΘáΓ∞ß∩ »« ¿¼Ñ¡¿
- (¡« ¬ ñαπú¿¼ »ÑαѼѡ¡δ¼ ¼«ª¡«). Æá¬ªÑ ¿º-ºá Γ«ú«, τΓ« ΓᬿÑ
- »α«µÑñπαδ ¿ Σπ¡¬µ¿¿ ó ñÑ⌐ßΓó¿Γѽ∞¡«ßΓ¿ ¼á¬α«, ó ¡¿σ ¡ÑΓ
- áóΓ«¼áΓ¿τÑ߬«ú« óσ«ñ¡«ú« ¿ óδσ«ñ¡«ú« ¬«ñá, ¿ ¡Ñ ñ«½ª¡« íδΓ∞
- ¿¡ßΓαπ¬µ¿¿ ó«ºóαáΓá.
- æ½ÑñπεΘá∩ Σπ¡¬µ¿∩ π¼¡«ªáÑΓ ñóá µÑ½δσ º¡áτÑ¡¿∩, ß«ºñáóá∩
- αѺπ½∞ΓáΓ Γ¿»á LongInt:
-
- function LongMul(X, Y: Integer): Longint;
- Inline (
- $5A/ {POP AX; POP X}
- $5E/ {POP DX; POP Y}
- $F7/$EA); { IMUL DX; DX : AX = X * Y}
-
-
- çá¼ÑΓ∞ΓÑ «ΓßπΓßΓó¿Ñ óσ«ñ¡«ú« ¿ óδσ«ñ¡«ú« ¬«ñá ¿ »α«»π߬
- ¿¡ßΓαπ¬µ¿¿ óδσ«ñá. çñÑß∞ «¡¿ ¡Ñ ΓαÑíπεΓß∩, Γᬠ¬á¬ φΓ¿ 4 íá⌐Γá
- óßΓáó½∩εΓß∩ ó «ßΓá½∞¡«⌐ ¬«ñ »α¿ ó맮óÑ LongMul.
- ä¿αÑ¬Γ¿óá Inline »α¿¼Ñ¡∩ÑΓß∩ Γ«½∞¬« ñ½∩ «τÑ¡∞ ¬«α«Γ¬¿σ
- »α«µÑñπα ¿ Σπ¡¬µ¿⌐ ( < 10 íá⌐Γ).
- Æá¬ ¬á¬ Inline »α«µÑñπαδ ¿ Σπ¡¬µ¿¿ - φΓ« ¼á¬α«, «¡¿ ¡Ñ ¼«úπΓ
- ¿ß»«½∞º«óáΓ∞ß∩ ¬á¬ áαúπ¼Ñ¡Γδ «»ÑαáΓ«αá @ ¿ Σπ¡¬µ¿⌐ Addr, Ofs ¿ Seg.
-