, COM-. . EXE- , COM- 64. COM- , EXE-; - COM- 512- EXE-. . EXE- , COM- . , COM-, . . EXE , DS . COM- . . IBM PC. 6 124 . EXE- DS. COM- , , . COM- , (PSP), - 256- (. 100) , DOS COM EXE . . 100 PSP, SEGMENT ORG 100H. . EXE COM OBJ-, EXE-. EXE-, . COM-, : Warning: No STACK Segment (: ) , . EXE- COM- EXE2BIN. , EXE2BIN A, CALC.EXE - B. EXE2BIN B:CALC,B:CALC.COM EXE , EXE. ( CALC.COM). COM, EXE2BIN BIN, COM. OBJ- EXE-. EXE-, , , COM . COM- ------------------------------------------------------------ EXCOM1, . 6.1, . 4.3, COM- . COM-: . ASSUME . CS , (PSP). ORG 100 (.) PSP. IBM PC. 6 125 ORG 100H . . JMP , . : MASM [ ] LINK [ ] EXE2BIN B:EXCOM1,B:EXCOM1.COM DEL B:EXCOM1.OBJ,B:EXCOM1.EXE ( OBJ EXE-) EXE- COM- - 788 20 . COM-, COM-. ( ) RET DEBUG B:EXCOM1.COM. , JMP . , . ------------------------------------------------------------ ------------------------------------------------------------ . 6.1. COM-. COM- ------------------------------------------------------------ COM- DOS o p. 64 , DOS SP c - .FFFE. . 64 , DOS . DOS . . DIR p . COM-. ------------------------------------------------------------ COM- . EXE2BIN o, IBM PC. 6 126 . SEGMENT, ASSUME END. ORG 100H, . COM- DEBUG D CS:100 . RET; Q . INT 20H RET. EXE- , COM-, . ------------------------------------------------------------ COM- 64. COM- , EXE-. , COM- DS. , COM- ORG 100H SEGMENT . EXE2BIN EXE- COM-, COM . DOS COM- , , . ------------------------------------------------------------ 6.1. COM-? 6.2. , COM-? 6.3. COM- ? 6.4. SAMPLE.EXE. DOS COM-. IBM PC. 6 127 6.5. 4.6 COM-, DEBUG. IBM PC. 7 132  7.  ------------------------------------------------------------ : ( ) . ------------------------------------------------------------ . , . , , , . - . , . . , . ( ): : JMP : LOOP : Jnnn (,,) : CALL , : SHORT, NEAR FAR. SHORT , p . NEAR FAR (CALL) , , SHORT. IP; FAR CS. JMP ------------------------------------------------------------ JMP. , .. . IBM PC. 7 133 COM- . 7.1 JMP. p AX, BX, CX 1, : 1 AX, AX BX, CX. AX: 1,2,3,4..., BX: 1,3,6,10..., CX: 1,2,4,8... , , A20: - o, ( BEGIN) . JMP A20 , c A20. , . - . ------------------------------------------------------------ ------------------------------------------------------------ .7.1. JMP. : A20: ADD AX,01 : A20: ADD AX,01 A20 ADD. A20 - NEAR. : . A20 -9 JMP, - EBF7. EB JMP, F7 - (-9). JMP F7 (IP), p JMP (0112): . . : 274 112 JMP: -9 F7 ( ) : 265 109 IBM PC. 7 134 - . 109. , .109. JMP . JMP -128 +127 SHORT. 00 FF. JMP, , FAR, . . , JMP . JMP p ( ): A50: ... JMP A50 . ( ) JMP A90 ... A90: NEAR FAR, 3- . , , SHORT: JMP SHORT A90 ... A90: , , , COM-. , . DEBUG COM- . AX 08, BX CX . 24 (. 36) . 80 (. 128), . Q. LOOP ------------------------------------------------------------ JMP . 7.1 . . LOOP, , CX. LOOP IBM PC. 7 135 CX 1. CX , , , CX 0, LOOP . . 7.2, LOOP, , . 7.1 , . MOV CX 10. LOOP CX, 1 CX DX. JMP A20 LOOP ADD AX,01 INC AX ( AX 1). JMP, LOOP LOOP A20, . LOOP -128 +127 . , "Relative jump out of range" ( ). LOOP , .7.1, , COM-. DEBUG. CX , p AX, BX DX . 000B, 0042 0400. Q. LOOP - LOOPE ( LOOPZ) LOOPNE ( LOOPNZ). CX 1. LOOPE , CX (ZF=1). LOOPNE , CX (ZF=0). ------------------------------------------------------------ ------------------------------------------------------------ . 7.2. LOOP. ------------------------------------------------------------ . p 16 , . , . ( ): : 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IBM PC. 7 136 : * * * * O D I T S Z * A * P * C . CF (Carry Flag) - . "" (0 1) (. .12). PF (Parity Flag) - . p . 0, - 1. . AF (Auxiliary Carry Flag) - . 1, ( 3) . ASCII . ZF (Zero Flag) - . a . , , - . , , , 0 "" (.. ), e "" (.. ). JE JZ . SF (SIgn Flag) - . ( ) p: 0, - 1. JG JL . TF (Trap Flag) - . , DEBUG. c, , .. . IF (Interrupt Flag) - . , - . DF (DIrection Flag) - . . IBM PC. 7 137 SI DI, , - , (. .11). OF (Overflow Flag) - . , .. / ( ) . : CMP AF, CF, OF, PF, SF, ZF. , . - BX : CMP BX,00 ; BX JZ B50 ; B50 . ( ) . B50: ... ; BX=0 BX , CMP ZF , ( ) . JZ ( ) ZF. ZF, , , , .. B50. ------------------------------------------------------------ , LOOP CX : , , . , . , . , . LOOP .7.2 : CX, : LOOP LOOP A20 DEC CX JNZ A20 DEC JNZ LOOP: CX 1 A20, CX . DEC 0 1. JNZ . LOOP , , : DEC JNZ. IBM PC. 7 138 JMP LOOP JNZ c JNZ A20, . -128 +127 . "Relative jump out of range" ( ). . . , : . ; : , . , , , , . . , AX 11000110, BX - 00010110. CMP AX,BX AX BX. , AX , - . . JE/JZ , / ZF JNE/JNZ , / ZF JA/JNBE , / ZF,CF JAE/JNB , / CF JB/JNAE , / CF JBE/JNA , / CF,AF . , JB JNAE , JB , JNAE. JE/JZ , / ZF JNE/JNZ , / ZF JG/JNLE , / ZF,SF,OF IBM PC. 7 139 JGE/JNL , / SF,OF JL/JNGE , / SF,OF JLE/JNG , / ZF,SF,OF (JE/JZ) (JNE/JNZ) . / . JS , () SF JNS , () SF JC , ( JB) CF JNC , CF JO , OF JNO , OF JP/JPE , PF JNP/JP , PF CX . p . JCXZ , CX . . , , , - , . , . , . , JAE JGE , . CALL ------------------------------------------------------------ o , : BEGIN PROC FAR . . BEGIN ENDP FAR , , ENDP . , , IBM PC. 7 140 , PROC ENDP. . 7.3. : PROC B10 C10 NEAR , . , NEAR. ENDP . BEGIN : CALL B10 CALL C10. CALL B10 . RET, CALL B10. CALL - C10, RET. ------------------------------------------------------------ ------------------------------------------------------------ . 7.3. . RET . BEGIN B10 C10, BEGIN. BEGIN DOS RET DOS. B10 RET, B10 C10. C10 RET, , C10 . . , CALL , -128 +127 . NEAR . CALL RET . ------------------------------------------------------------ IBM PC. 7 141 , , - PUSH , DOS, EXE- . o . , CALL , CALL, . RET . , PUSH . POP . SP (.. ) . RET CALL . , CALL , - . , . 32 . PUSH, PUSHF, CALL, INT, INTO . POP, POPF, RET IRET a . EXE- : DS ES: - 256 (. 100) , . CS: ( ). IP: . SS: . SP: , . , 32 (64 ), DW 32 DUP(?) SP 64, . 40. EXE-, .7.4. . . PUSH SP 2 IBM PC. 7 142 DS ( 049f) , .. 4B00+3E. PUSH SP 2 AX (0000) 4B00+3C. CALL B10 SP (0007) 4B00+3A. CALL C10 SP (000B) 4B00+38. C10 RET 000B (4B00+38), IP SP 2. 000B , .. B10. ------------------------------------------------------------ ------------------------------------------------------------ . 7.4. . RET B10 0007 (4B00+3A), IP SP 2. 0007 . RET 0007 , FAR. . DEBUG. 0034 003F SP: SP : 0040 PUSH DS ( 049F) 049F 003E PUSH AX ( 0000) 0000 049F 003C CALL B10 ( 0007) 0700 0000 049F 003A CALL C10 ( 000B) 0B00 0700 0000 049F 0038 RET ( 000B) 0700 0000 049F 003A RET ( 0007) 0000 049F 003C | | | | | | : 0034 0036 0038 003A 003C 003E . -, , 0007 0700. -, DEBUG , IP, . : ------------------------------------------------------------ c , , IBM PC. 7 143 o . p . , . 11 . EXE-, . 7.5, c , NAME1, NAME2, NAME3. - NAME1 NAME2 NAME2 NAME3. , MOV . . BEGIN B10MOVE C10MOVE. B10MOVE NAME1 NAME2. , NAME1 , ..: ------------------------------------------------------------ ------------------------------------------------------------ . 7.5. . NAME1: A B C D E F G H I | | | | | | | | | NAME2: J K L M N O P Q R NAME1 NAME2 CX 9, SI DI . LEA a NAME1 NAME2 SI DI: LEA SI,NAME1 ; LEA DI,NAME2 ; NAME1 NAME2 NAME1 NAME2 SI DI. k MOV , , c. , MOV AL,[SI] : SI (..NAME1) AL. MOV [DI],AL : AL , DI (.. NAME2). IBM PC. 7 144 SI DI SH. CX , ( B20). SI DI 1, MOV NAME1+1 NAME2+1. , NAME1+8 NAME2+8. C10MOVE B10MOVE : NAME2 NAME3 LOOP DEC JNZ. : , .7.5, , DEBUG. , . NAME2 NAME3 D DS:0. : AND, OR, XOR, TEST, NOT ------------------------------------------------------------ . AND, OR, XOR TEST - . ASCII (..13). , CF, OF, PF, SF, ZF. AND: 1, 1; - 0. OR: 1, 1; 0, - 0. XOR: 0, 1, 1; ( - 0 - 1) - 0. TEST: AND- , . , . AND, OR XOR : AND OR XOR 0101 0101 0101 0011 0011 0011 : 0001 0111 0110 IBM PC. 7 145 , , AL 1100 0101, BH 0101 1100: 1. AND AL,BH ; AL 0100 0100 2. OR BH,AL ; BH 1101 1101 3. XOR AL,AL ; AL 0000 0000 4. AND AL,00 ; AL 0000 0000 5. AND AL,0FH ; AL 0000 0101 6. OR CL,CL ; SF ZF 3 4 . 5 AL. CMP , OR : 1. OR CX,CX ; CX JZ ... ;, 2. OR CX,CX ; CX JS ... ;, TEST AND, , . : 1. TEST BL,11110000B ; BL JNZ ... ; ? 2. TEST AL,00000001B ; AL