P. Abel - Assembler

Embed Size (px)

Citation preview

IBM PC Peter Abel IBM PC ASSEMBLER LANGUAGE AND PROGRAMMING British Columbia Institute of Technology

__________________________________________________________________________ 1. IBM PC ASCII 2. : : : 3.

4. 5. (DB) (DW) (DD) "" (DQ) (DT) () EQU 6. COM- EXE- COM- COM- COM- 7. JMP LOOP (CALL) : : AND, OR, XOR, TEST, NOT : 8. I: : INT

: DOS : DOS : ASCII : DOS : : DOS : DOS : DOS CR, LF, TAB 9. II: BIOS : , , ASCII / DOS BIOS INT 16H 10. III: (-) : 11. REP: MOVS: LODS: STOS: CMPS: SCAS: () : 12. I: DX:AX

Intel 8087 80287 13. II: ASCII BCD ASCII - (BCD) ASCII ASCII : 14. () (XLAT) : ASCII : TYPE, LENGTH SIZE 15. I: (FAT) 16. II: DOS : FCB FCB : FCB : FCB : : / : 17. III: DOS

ASCIIZ : ASCII DOS 18. IV: / BIOS BIOS : BIOS 19. DOS : ASCII DOS BIOS INT 17H 20. LOCAL (&) : REPT, IRP IRPC EXITM , IF IFNDEF , IFIDN 21. EXTRN PUBLIC : EXTRN PUBLIC : PUBLIC : - - -

C - 22. COMAND.COM COM- EXE- EXE- 23. BIOS DOS BIOS DOS DOS INT 21H 24. 25. 1. 2. 3. 4. ASCII -

__________________________________________________________________________ , IBM PC, . ,

. . , , . , , - . .. " " (1988), ., . "- IBM PC" (1987), .. " " (1987), .. "- " (1987). " " . -, , . , , IBM PC. . Framework. , . .

__________________________________________________________________________ 60- c (). "". , . 70- Intel 8008 . 1974 o Intel 8080. . 1978 Intel Intel 8086, 8080 . / Intel 8086 - 8088, 1981 i . 8088 c 80188, 8086 - 80186, 80286 80386, c . 80286, IBM AT 1984 . Intel iAPX 86, iAPX 88, iAPX 86, iAPX286 iAPX386, APX Intel Advanced Processor Architecture. p . -, , , . -, , .

, , , . , . , , . , , , . c : - IBM PC c - 64 . , , . - IBM PC. - , , , , . - PC-DOS MS-DOS, . C : - . , . - . PC, . --------------------- - y : , (), . PC MS-DOS Microsoft, PC-DOS IBM PC. : 2.0 (), 3.0 AT, 4.0 . UNIX PC XENIX . --------------- : , a . , , p . , . , . . 9, 11, 12, 14, 15, 19, 20 21. 8 10, 12 13, 15 18, 22 25 c . , :

- p ; - ; - , ; - , , ASCII , , /; - , ; - ; - . - . . ----------------------- , .

1 IBM PC __________________________________________________________________________ : . ________________________________________________________________ . . , . , , , . , . , .2 . ________________________________________________________________ . , , , , , 512 . p, . . , , , . . ;

- . , A *. 256 : " " (00000000) " " (11111111). , A 01000001, c * 00101010 ( ). , . , . A , * - . , . , . , , . , "", 01000001 A. A, . 01000001. , , A. 0 7 , A: : : 7 6 5 4 3 2 1 0 0 1 0 0 0 0 0 1

2 1024, . , 512 512 1024, .. 524288 . PC 16- , 16- , . 16- () . 0 15 , PC: : 15 14 13 12 11 10 9 8 : 0 1 0 1 0 0 0 0 7 6 5 4 3 2 1 0 0 1 0 0 0 0 1 1

ASCII ________________________________________________________________ a ASCII (American National Standard Code for Information Interchange). [ "" (. )]. 01000001 A. . 8- ASCII-, PC 256 , . .1 ASCII , .8 256 . ________________________________________________________________ , 2

. c "BInary digiT" ( ). () . . : : : 128 64 32 16 8 4 2 1 1 1 1 1 1 1 1 1

1, - 2, - 4 .. 1 + 2 + 4 + ... + 128, 255 (2 - 1). 01000001 1 64, .. 65. 01000001 A! , , . 01000001 65, A: - , 01000001 65; - ( ), , , , , 01000001 "". , . . 8088 16- , o 16- . 2 16 1 65535, 32 (2 32 1 4294967295) . -------------------- . : 0 1 1 1 + 1 + + + + 0 0 1 1 = = = = 0 1 10 11

. , 01000001 00101010. A *? , 65 42: 01000001 00101010 -------01101011 65 42 --107

, 01101011 107. :

00111100 00110101 -------01110001

60 53 --113

-------------------- , () . . .., 1. : 65: : 1: 01000001 10111110 10111111 ( -65)

10111111, 65 . , 1. , : 1: : 10111111 : 01000000 1: 01000001 ( +65) +65 -65 : 01000001 (+65) 10111111 (-65) -------(1) 00000000 . . , p , . : . , , 42 65. 42 00101010, e : - 11010110: 65 +(-42) ----23 01000001 11010110 -------(1) 00010111

23 . . , : 00000001, 00000000? -1. 11111111: 00000001 11111111 -------(1) 00000000

:

(1), , 11111111 -1 : 0 -(+1) ----1 00000000 -00000001 -------11111111

c : +3 +2 +1 0 -1 -2 -3 00000011 00000010 00000001 00000000 11111111 11111110 11111101

: , . .12 13. ________________________________________________________________ , p ( ). o ( ), . 32 , "" . . : : 0101 1001 0011 0101 1011 1001 1100 1110 : 5 9 3 5 11 9 12 14 , , 10=A, 11=B, 12=C, 13=D, 14=E, 15=F. , : 59 35 B9 CE

"" 0 F, 16, e. .1.1. , 0 15. __________________________________________________________________________ . . 0000 0001 0010 0 1 2 . 0 1 2 . . 1000 1001 1010 8 9 10 . 8 9 A

0011 3 3 1011 11 B 0100 4 4 1100 12 C 0101 5 5 1101 13 D 0110 6 6 1110 14 E 0111 7 7 1111 15 F __________________________________________________________________________ .1.1. , . . , . DOS DEBUG . , . c . , F 10, 16. 6 4 A 5 8 D F 1 -10 F F -1E 10 FF 10 1 -- --20 100

, .20 32, .100 256 .100 - 4096. , , .4B, .01001011, , 75 ( - ). , . . "H", , 25H ( 37). . c 0-9, , B8H 0B8H. .2 p . c PC, x .2. ________________________________________________________________ , , .. , 16 . 64 , , c . : 1. . , . . (CS) . 2. . , , . (DS) . 3. . , .

(SS) . , (ES), . p.1.2 SS, DS CS. . . __________________________________________________________________________ ================ D O S -------- - - - - - - - - SS +-> + - - - + - - - - - - - - DS +-> + - - - + - - - - - - - - CS +-> L-------- - - - - - - - - L================ __________________________________________________________________________ .1.2. . c. . (16-) .0000 .FFFF 0 65535. , . , 0, - 01 65535. , , .045F 0032. p , 045F, 045F0, .. . a : DS: : : 045F0 0032 ----04622

8086/8088 ? 16 . , p . .FFF0 65520 ( ) . , , . c . nnnn, , ( . ), .. . nnnn0. , .FFFF0 1048560 . e, .F 1111, . 80286 24 , FFFFF0 16 , 80386 .

________________________________________________________________ 8086/8088 14 , y , . (16 ) . : 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 80286 80386 , 16-. . CS, DS, SS ES ------------------------------------ 64 , . , c p . 1. CS. . (IP) , . CS. 2. DS. . , , . 3. SS. . 4. ES. . ES DI. ES, . : AX, BX, CX DX -------------------------------------------- " ". , o . (high), a - (low). , CX : CH CL, . CX, CH CL, : MOV CX,00 MOV CH,00 MOV CL,00 1. AX. AX -, . , , AX. ,

AX. AX: AH AL

2. BX. BX . , "" . - . BX: BH BL

3. CX. CX . . CX . CX: CH CL

4. DX. DX . / , DX AX. DX: DH DL

c 8-, 16- . : SP BP ------------------------------- SP BP . . 1. SP. , . SS . 2. BP. : . : SI DI ---------------------------- . 1. SI. . SI DS. 2. DI. . DI ES. : IP --------------------------------- IP , . , DOS DEBUG .

----------------- 16 . . : O () D () I () T ( ) . ( ). . . , DOS DEBUG , . (0 - , 1 - ). (0 - , 1 - ). 3- 8- . 8- (1 0 - ). , , .

S () Z () A ( ) P ( ) C ()

O, S, Z, C , D . p. PC ________________________________________________________________ : c , , , , () . , . : (Intel); (ROM 40); (RAM 512 ); -.

, (), , . , o

, , "" 20 . "" , . 8088 16- , o. 8088 8086, : 8088 8- ( 16-) , , . . 80286 80386 8086. .1.3 : o () (). , . c - (), y () . , o ( , ). __________________________________________________________________________ : ---------T-------- AH AL +--------+--------+ BH BL +--------+--------+ CH CL +--------+--------+ DH DL +--------+--------+ SP +-----------------+ BP +-----------------+ SI +-----------------+ DI L----------------- :

----------------- CS +----------------+ DS +----------------+ SS +----------------+ ES L-------T-------- -------- - =====================+==============> 8088 L------------------------ ----+--- : - ----+ 1 +-------+ 2 ->+ - - - - - - - - + +-------+ : 3 ( ) +-------+ + - - - - - - - - + 4 L------- L----------------- ------------------ L-+ DEBUG -E CS:100 B8 23 01 05 25 00 -E CS:106 8B D8 03 D8 8B CB -E CS:10C 2B C8 2B C0 90 CB -R AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0100 NV UP EI PL NZ NA PO NC 13C6:0100 B8230 MOV AX,0123 -T AX=0123 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0103 NV UP EI PL NZ NA PO NC 13C6:0103 052500 ADD AX,0025 -T AX=0148 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0106 NV UP EI PL NZ NA PE NC 13C6:0106 8BD8 MOV BX,AX -T AX=0148 BX=0148 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0108 NV UP EI PL NZ NA PO NC 13C6:0108 03D8 ADD BX,AX -T AX=0148 BX=0290 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=010A NV UP EI PL NZ AC PO NC 13C6:010A 8BCB MOV CX,BX -T AX=0148 BX=0290 CX=0290 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=010C NV UP EI PL NZ AC PO NC 13C6:010C 2BC8 SUB CX,AX

-T AX=0148 BX=0290 CX=0148 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0100 NV UP EI PL NZ AC PO NC 13C6:010E 2BC0 SUB AX,AX -T AX=0000 BX=0290 CX=0148 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0110 NV UP EI PL ZR NA PO NC 13C6:0110 90 NOP -T AX=0000 BX=0290 CX=0148 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0111 NV UP EI PL ZR NA PO NC 13C6:0111 CB RETF __________________________________________________________________________ .2.1. . R 0100 . CS .2.1 CS=13C6 ( ), : 13C6:0100 B82301 MOV AX,0123

CS=13C6 , 13C6 13C60. 13C6:0100 100 (.) 13C6 CS. B82301 - , CS:100. MOV AX,0123 - , . , . . AX. MOV . T ( ) Return. MOV , , . , AX 0123. AX B8 2301. B8 23 AX, .. AL, 01 - AX, .. AH: AX: 01 23

IP:0103 : 13C6:0103 052500 ADD AX,0025

T. 25 (AL) AX 00 (AH) AX, .. 0025 AX. AX 0148, IP

0106 - c . T. AX BX BX 0148. AX e 0148, MOV p . T . c AX BX, 0290. p BX CX, AX CX, AX . , c NZ ( ) ZR (), ( AX 0). T NOP RET, . D : D CS:100 16 . (32 . ) ASCII ( . ). ASCII . . 00 CS:100 CS:10F. c CS:110 CS:11F. , CS:111, Dump a CS:100 CS:170. IP . R IP, 100, T. Return. .2.2 D CS:100. CS:100 111 ; . __________________________________________________________________________ -D CS:100 13C6:0100 B8 23 01 05 25 00 8B D8-03 D8 8B CB 2B C8 2B C0 .#..%.......+.+. 13C6:0110 90 CB 8D 46 14 50 51 52-FF 76 28 E8 74 00 8B E5 ...F.PQR.v(.t... 13C6:0120 B8 01 00 50 FF 76 32 FF-76 30 FF 76 2E FF 76 28 ...P.v2.v0.v..v( 13C6:0130 E8 88 15 8B E5 BF 36 18-12 FF 36 16 12 8B 76 28 ......6...6...v( 13C6:0140 FF 74 3A 89 46 06 E8 22-CE 8B E5 30 E4 3D 0A 00 .t:.F.."...0.=.. 13C6:0150 75 32 A1 16 12 2D 01 00-8B 1E 18 12 83 DB 00 53 u2...-.........S 13C6:0160 50 8B 76 28 FF 74 3A A3-16 12 89 1E 18 12 E8 FA P.v(.t:......... 13C6:0170 CD 8B E5 30 E4 3D 0D 00-74 0A 83 06 16 12 01 83 ...0.=..t....... -Q __________________________________________________________________________ .2.2. . DEBUG Q (Quit - ). DOS A> C>. , c Ctrl/PrtSc.

: ________________________________________________________________ , (MOV ADD). , 0123 0025 . DS . , c : DS 0000 0002 0004 0006 . . 2301 2500 0000 2A2A2A 0 2 4 6, 7 1 3 5 8

, . , o, , 23 0 ( ) , 01 - 1 (.. ). , : A10000 03060200 A30400 CB ( ), DS 0000, AX. ( ), DS 0002, AX. AX , DS 0004. DOS.

, MOV p : A1 A3. , , ( ), ( ) . DEBUG . , . E (Enter) : E DS:00 23 01 25 00 00 00 ( Return) E DS:06 2A 2A 2A ( Return) ( ) , DS:00. , , 0123 2301, a 0025 2500. MOV c, 2301 0123, 2500 - 0025. (***) , D (Dump) - . , CS:100: E CS:100 A1 00 00 03 06 02 00 E CS:107 A3 04 00 CB

CS:100 CS:10A. . .2.3 , E. , CS DS . D (Dump) : : : D DS:000 (Return) D CS:100 (Return)

, .2.3. DS:00 DS:08 CS:100 CS:10A .2.3. __________________________________________________________________________ D>DEBUG -E DS:23 01 25 00 00 -E DS:2A 2A 2A -E CS:100 A1 00 00 03 06 02 00 -E CS:107 A3 04 00 CB -D DS:0 13C6:0000 23 01 25 00 00 9A 2A 2A-2A F0 F5 02 2C 10 2E 03 #.%...***...,... 13C6:0010 2C 10 BD 02 2C 10 B1 0D-01 03 01 00 02 FF FF FF ,...,........... 13C6:0020 FF FF FF FF FF FF FF FF-FF FF FF FF EF 0F 64 00 ..............d. 13C6:0030 61 13 14 00 18 00 C7 13-FF FF FF FF 00 00 00 00 a............... 13C6:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 13C6:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20 .!........... 13C6:0060 20 20 20 20 20 20 20 20 00 00 00 00 00 20 20 20 ..... 13C6:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00 ........ -R AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0100 NV UP EI PL NZ NA PO NC 13C6:0100 A10000 MOV AX,[0000] DS:0000=0123 -T AX=0123 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0103 NV UP EI PL NZ NA PO NC 13C6:0103 03060200 ADD AX,[0002] DS:0002=0025 -T AX=0148 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0107 NV UP EI PL NZ NA PE NC 13C6:0107 A30400 MOV [0004],AX DS:0004=9A00 -T AX=0148 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13C6 ES=13C6 SS=13C6 CS=13C6 IP=0108 NV UP EI PL NZ NA PO NC 13C6:010A CB RETF -D DS:0 13C6:0000 23 01 25 00 00 9A 2A 2A-2A F0 F5 02 2C 10 2E 03 #.%...***...,... 13C6:0010 2C 10 BD 02 2C 10 B1 0D-01 03 01 00 02 FF FF FF ,...,........... 13C6:0020 FF FF FF FF FF FF FF FF-FF FF FF FF EF 0F 64 00 ..............d. 13C6:0030 61 13 14 00 18 00 C7 13-FF FF FF FF 00 00 00 00 a............... 13C6:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 13C6:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20 .!........... 13C6:0060 20 20 20 20 20 20 20 20 00 00 00 00 00 20 20 20 ..... 13C6:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00 ........ -Q __________________________________________________________________________

.2.3. . R . , . : 13C6:0100 A10000 MOV AX,[0000]

, CS 13C6, CS:100 A10000. MOV [0000] . , . , MOV AX,0000 o AX 0000. T. MOV AX,[0000] c , , AX. 2301 0123 AX. ADD , T. DS 0002 AX. AX 0123 0025, .. 0148. MOV [0004],AX T. AX 0004. D DS:00. : : 23 01 25 00 48 01 2A 2A 2A : 00 01 02 03 04 05 06 07 08 0148, AX 04 05, 4801. . ASCII. , .23 e #, .25 - %. . 2A (***). , . () . D DS:100 , .2.3. Q . ________________________________________________________________ CS IP. , , CS .04AF ( 04AF0), IP . 0023: CS: IP: : 04AF0 0023 ----04B13

, , 04B13 :

A11200 04B13

MOV AX,[0012]

04B13 . (A1) o - 3 . [0012] a, DS ( ) c . DS .04B1 ( 04B10), c : DS: : : 04B10 0012 ----04B22

, 04B22 04B23 : : : 24 04B22 01 04B23

24 04B22 AL, 01 04B23 - AH. AX 0124. IP , IP 0026. p , CS (04AF0) IP (0026), .. 04B16. ----------------- 8086, 80286 80386 , e , . o 4B22 . , . , , , c 04B23 AX: : 24 01

: 04B23 4B22 4B23 4B23 AL. 4B24 4B25 4B23 AH. AX 0124. - , . , , -, , , -, , , .

, , , , . , , - . EVEN, . : ________________________________________________________________ (RAM), . BIOS ( /) ROM , p . BIOS INT, c 12H. BIOS AX . DEBUG INT 12H RET : E CS:100 CD 12 CB R ( Return) . IP 0100, INT 12H. T ( Return) BIOS ( , ): STI PUSH MOV MOV MOV POP IRET DS AX,0040 DS,AX AX,[0013] DS

AX p . T BIOS . RET CB, . ________________________________________________________________ DOS 2.0 DEBUG , . . A ---------- A (Assemble) DEBUG . : A 100 [Return]

:0100. , Return. , Return . : MOV AL,25 MOV BL,32 ADD AL,BL RET [Return] [Return] [Return] [Return]

: :0100 :0102 :0104 :0106 MOV AL,25 MOV BL,32 ADD AL,BL RET

. Return . , . , . U ---------- U (Unassemble) . , ( c 100 106). : U 100,106 [ Return] :0100 :0102 :0104 :0106 B025 B332 00D8 C3 MOV AL,25 MOV BL,32 ADD AL,BL RET

, R . T . , . , , - . DEBUG . ---------------------------------- DEBUG : 1. . : - : DEBUG n: [Return] - D

E, - : W [Return] 2. DEBUG . : - DEBUG, - A (assemble) E (enter) , - : N .COM [Return]. COM (. .6 COM-), - , , . :0106 C3 RET

106 () 100 (), .. 6. - CX : R CX [Return] - CX 0000 ( ) - - 6, - : W [Return] DEBUG "Writing nnnn bytes." ( nnnn ). nnnn 0, , c. ________________________________________________________________ DOS DEBUG , . , E (). . "" , DOS DEBUG . - , , , . , , , , E, . , p . E . , (IP) 0100. R (register) : R IP [Return] IP . 0100 R ( IP). 0 , . , T, . - , . y CS, DS, SP SS,

. DOS DEBUG. : o: (D), (E), (H), (N), (Q), (R), (T) (W). o .

________________________________________________________________ 2.1. ) . 4629 AX; ) . 036A AX. 2.2. , : E CS:100 B8 45 01 05 25 00 . 45 54. E , .. 45 54. 2.3. , : E CS:100 B8 04 30 05 00 30 CB ) ? ( ). ) AX 0460, 6004. ? ) . ? 2.4. : B0 25 D0 E0 B3 15 F6 E3 CB : - . 25 AL; - AL ( AL 4A); - . 15 BL; - AL BL. (E) CS:100. , . D CS:100 . R T RET. AX ? 2.5. (E) : : 25 15 00 00 : A0 00 00 D0 E0 F6 26 01 00 A3 02 00 CB

: - DS:00 (25) AL; - AL ( 4A); - AL DS:01 (15); - AX , DS:02. D . R T (RET). AX 0612. D DS:00 , DS:02 1206. 2.6. (2.5) TRIAL.COM. 2.7. A , : MOV ADD SHL SUB NOP RET BX,25 BX,30 BX,01 BX,22

NOP.

3 __________________________________________________________________________ : , . ________________________________________________________________ .2 . . , - , "" () . , . , , . DOS EDLIN . , . , DOS LINK , .

, . ________________________________________________________________ , o , . p (;) , , ; . , . , : 1. 2. ; ADD AX,BX ;

, , . , ( ). ________________________________________________________________ : [] [()]

( ), ( ) p . - 132 , , 80 ( ). : COUNT DB MOV 1 ;, , AX,0 ;,

------ : : : : A Z a z 0 9 (?) (.) ( ) " " (@) (-) ($)

. . - 31 . : COUNT, PAGE25, $E10. . , ,

AX, DI AL . , ADD AX,BX "", AX BX . , MOV REGSAVE,AX REGSAVE , . .3 c . -------- . ( ) , o . , , (MOV) (ADD). -------- , ) ) , . COUNTER : COUNTER DB 0 ; (DB)

, . : RET INC ADD CX AX,12 ; ; CX ; 12 AX

, - . , y . , , DOS EDLIN . ________________________________________________________________ , p . . . . .24 . .24 .

: PAGE TITLE --------------------------------------------- , ( ). PAGE TITLE . PAGE. , , . c PAGE. 60 132 PAGE 60,132 10 255, - 60 132. PAGE 66,80. , 60. , 60 , e. , , . PAGE . p PAGE. TITLE. , () , p TITLE : TITLE :

, . , ASMSORT, 60 : TITLE ASMSORT - SUBTTL, , . SEGMENT ------------------ . . c SEGMENT : SEGMENT . . . ENDS []

, . ENDS

. SEGMENT ENDS . SEGMENT , , . 1. . . PARA, . 16 , .. . nnn0. PARA. 2. . ( . " "). : STACK, COMMON, PUBLIC, AT MEMORY. : SEGMENT PARA STACK , : PUBLIC, COMMON MEMORY. , , . 3. . , , : SEGMENT PARA STACK 'Stack'

.3.1. SEGMENT . PROC --------------- . , PROC. , : - SEGMENT PARA - PROC FAR . . . RET - ENDP - ENDS , . FAR DOS, . ENDP , PROC. RET DOS. (. .7). ASSUME ----------------- SS , DS CS c .

. ASSUME, : ASSUME SS:_,DS:__,CS:__ , SS:_ , SS. . ES . ES, ES:NOTHING. END -------------- , ENDS , ENDP . END : END [_]

, , , , () . o , PROC, o FAR. ________________________________________________________________ , . , WORDA : MOV AX,BX ; BX AX MOV AX,WORDA ; WORDA AX MOV AX,[BX] ; ; BX AX MOV AX,25 ; 25 AX MOV AX,[25] ; 25 , . ________________________________________________________________ : EXE COM. EXE-, COM- .6. DOS EXE-: 1) , c , 2) , DS, , 3) 4) DS . DOS RET. .3.1 :

1. ASSUME - , ; , CODESG - CS, DATASG - DS STACKSG - SS. DATASG STACKSG , : STACKSG SEGMENT PARA STACK Stack 'Stack' DATASG SEGMENT PARA 'Data' , . , : 0, , 2 .. 2. 256- (.100) , PSP. DS PSP. , . , RET DOS. 3. , (, ). SUB AX, AX, PUSH . 4. DOS SS CS. DS , DS MOV, .3.1. " . II" DS. 5. RET DOS, , PUSH DS. INT 20H. __________________________________________________________________________ SEGMENT PARA 'CODE' PROC FAR 1. ASSUME CS:CODESG,DS:DATASG,SS:STACKG 2. PUSH DS ; DS 3. SUB AX,AX ; AX PUSH AX ; 4. MOV AX,DATASG ; MOV DS,AX ; DATASG DS . . . 5. RET ; DOS BEGIN ENDP CODESG ENDS END BEGIN __________________________________________________________________________ .3.1. EXE-. , - . CODESG BEGIN

, . ________________________________________________________________

.3.2 . - STACKSG CODESG. __________________________________________________________________________ page 60,132 TITLE EXASM1 (EXE) ;-----------------------------------------------STACKSG SEGMENT PARA SACK 'Stack' DB 12 DUP('STACKSEG') STACKSG ENDS ;-----------------------------------------------CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ASSUME SS:STACKSG,CS:CODESG,DS:NOTHING PUSH DS ; DS SUB AX,AX ; PUSH AX ; MOV ADD MOV ADD MOV SUB SUB NOP RET ENDP AX,0123H AX,0025H BX,AX BX,AX CX,BX CX,AX AX,AX ; .0123 AX ; .25 AX ; AX BX ; BX AX ; BX CX ; AX CX ; AX ; DOS ;

BEGIN

CODESG ENDS ; END BEGIN ; __________________________________________________________________________ .3.2. . STACKSG DB ( ), 12 'STACKSEG'. p , , . CODESG , ASSUME . ASSUME SS STACKSG CS CODESG. , , STACKSG SS CODESG - CS. SS CS. , , , ASSUME p DS. , ASSUME - PUSH, SUB PUSH

DS . , , DOS, DOS . ( , ). , p.2.1 , . ________________________________________________________________ - " " . - ENDS, ENDP, - END. - ASSUME . - EXE- ( COM-, . .6) 32 , PUSH, SUB PUSH DS . ________________________________________________________________ 3.1. ? 3.2. : ) PC_AT, ) $50, ) @$_Z, ) 34B7, ) AX? 3.3. , ? 3.4. END, ) , ) , ) ? 3.5. . 3.6. RET END. 3.7. , CDSEG, DATSEG STKSEG . ASSUME. 3.8. DS .

4 __________________________________________________________________________ : , . ________________________________________________________________

, , , . , .

________________________________________________________________ .3.2 , . DOS EDLIN . EDLIN, DOS. EDLIN DOS A B. , CHKDSK B:. C: B:. EXASM1, EDLIN :EXASM1.ASM [Return] DOS EDLIN "New file" "*-". I , , p .3.2. , , , , , y. EDLIN . . E ( Return) EDLIN. , DIR B: DIR B:EXASM1.ASM ( ) ( )

, . . PRINT ( DOS 2.0 ). DOS : PRINT B:EXASM1.ASM [Return] EXASM.ASM - . p . ________________________________________________________________ EXASM1.ASM , . p , . ,

. OBJ-. .2 x . OBJ- , . OBJ- EXE () , . LINK, DOS, : 1. OBJ- , . ----R. 2. , , () ; , , . 3. EXE- . OBJ- ( ) EXE-, EXE- . , EXE-, , OBJ- OBJ- EXE-. , , , , , EXE- . : EXE- o COM-. , , c . 6. ________________________________________________________________ , , . a. ASM.EXE - MASM.EXE . , MASM ( . ). , A, B. p C A B. MASM ( ASM), . : source filename [.ASM]: object filename [filename.OBJ]: source listing [NUL.LST]: cross-reference [NUL.CRF]: , . ( ) : B:EXASM1. ASM, . - ( ). , B:. , . B B: Return.

, c . B, B: Return. , Return. , c OBJ, LST CRF-. , , , . source filename [.ASM]:B:EXASM1 [Return] object filename [filename.OBJ]:B: [Return] source listing [NUL.LST]:B: [Return] cross-reference [NUL.CRF]:B: [Return] , , OBJ- - . LST-, , . CRF- , , . , LST- , CRF-. .4 " " () 1.0 2.0. . , (, MOVE MOV), p . ASM , , ASM , . 100 . , , (EXASM1.ASM) . .4.1 , c EXASM1.LST. __________________________________________________________________________ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 page 60,132 TITLE EXASM1 (EXE) ;----------------------------------------------STACKSG SEGMENT PARA SACK 'Stack' DB 12 DUP('STACKSEG') 53 54 41 43 4B 53 45 47 ] 0060 0000 0000 0000 1E 0001 2B C0 0003 50 0004 0007 000A 000C B8 05 8B 03 0123 0025 D8 D8 STACKSG ENDS ;----------------------------------------------CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ASSUME SS:STACKSG,CS:CODESG,DS:NOTHING PUSH DS ; DS SUB AX,AX ; PUSH AX ; MOV ADD MOV ADD AX,0123H AX,0025H BX,AX BX,AX ; .0123 AX ; .25 AX ; AX BX ; BX AX

0000 0000 0C [

23 000E 8B CB MOV CX,BX ; BX CX 24 0010 2B C8 SUB CX,AX ; AX CX 25 0012 2B C0 SUB AX,AX ; AX 26 0014 90 NOP 27 0015 CB RET ; DOS 28 0016 BEGIN ENDP ; 29 30 0016 CODESG ENDS ; 31 END BEGIN ; ------------------------------------------------------------------------Segments and Groups: N a m e Size Align Combine Class CODESG . . . . . . . . . . . . 0016 PARA NONE 'CODE' STACKSG. . . . . . . . . . . . 0060 PARA STACK 'STACK' Symbols: N a m e Type Value Attr BEGIN. . . . . . . . . . . . . F PROC 0000 CODESG Length=0016 __________________________________________________________________________ .4.1. . PAGE TITLE. , SEGMENT, PROC, ASSUME END . , . . . 0000. p SS p. SEGMENT 16- , . . DB, 0000, 12 'STACKSEG'; .0C ( 12) . ASCII . ( ). .0060, 96 (128). 0000. p CS . ASSUME , , PUSH DS - (1E), . SUB AX,AX (2B C0), 0001. . -, - . END BEGIN, e PROC 0000. , . EXASM1.LST, PAGE p 132 . . MODE LPT1:132,6 -------------------------

. , . - ( ) , ( ). , , /N MASM, .. MASM/N. ------------------------ , . , , , . p , , .. a . , . , . , . , , : OBJ, LST CRF. ________________________________________________________________ , c - . EXASM1.OBJ . , . , () . LINK ( ) . , DOS A, B. LINK C. LINK Return. , ( MASM), : Object Modules [.OBJ]: Run file [EXASM1.EXE]: List file [NUL.MAP]: Libraries [.LIB]: B:EXASM1 B: CON [Return] EXASM1.OBJ EXASM1.EXE EXASM1.MAP

- , OBJ . - (), ( A:EXASM1.EXE). B: , . ( ) . , LINK y -

NUL.MAP (.. MAP ). MAP- , LINK. . CON , , . . MAP- : Start 00000H 00020H Stop 00015H 0007FH Length 0016H 0060H Name CODESG STACKSG

- Return, LINK y. DOS. y . LINK. .4 p LINK. ________________________________________________________________ . .4.2 , B, B:EXASM1.EXE (-!) EXASM1. EXE- :

B:EXASM1

DOS , EXE ( COM), . , DEBUG. DEBUG B:EXASM1.EXE DOS DEBUG, , , EXE-. (-) . D SS:0 12- STACKSEG. D CS:0 : 1E2BC050B823010525008BD803 ... , 0123 0025 2301 2500 . . () . __________________________________________________________________________ __________________________________________________________________________

.4.2. , . R p T (). PUSH - DS . . RET, Q (Quit - ) . dir, : DIR B:EXASM1.* : EXASM1.BAK ( EXASM1.ASM EDLIN), EXASM1.ASM, EXASM1.OBJ, EXASM1.LST, EXASM1.EXE EXASM1.CRF. , . , . DOS CHKDSK. OBJ-, CRF-, BAK- LST- ERASE ( DEL): ERASE B:EXASM1.OBJ, ... () ASM- EXE- . . c.

________________________________________________________________ , .4.1, , . , -. 2 (.2.3) , . .4.3 , . . __________________________________________________________________________ 1 2 3 4 5 6 7 8 9 10 11 page 60,132 TITLE EXASM2 (EXE) ;------------------------------------------------STACKSG SEGMENT PARA SACK 'Stack' DB 32 DUP(?) ] 0040 0000 STACKSG ENDS ;------------------------------------------------DATASG SEGMENT PARA 'Data'

0000 0000 20 [ ????

12 0000 00FA FLDA DW 250 13 0002 007D FLDB DW 125 14 0004 ???? FLDC DW ? 15 0006 DATASG ENDS 16 ;------------------------------------------------17 0000 CODESG SEGMENT PARA 'Code' 18 0000 BEGIN PROC FAR 19 ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:NO THING 20 0000 1E PUSH DS ; DS 21 0001 2B C0 SUB AX,AX ; 22 0003 50 PUSH AX ; 23 0004 B8 ---- R MOV AX,DATASG ; DATASG 24 0007 8E D8 MOV DS,AX ; DS 25 26 0009 A1 0000 R MOV AX,FLDA ; 0250 AX 27 000C 03 06 0002 R ADD AX,FLDB ; 0125 AX 28 0010 A3 0004 R MOV FLDC,AX ; FLDC 29 0013 CB RET ; DOS 30 0014 BEGIN ENDP 31 0014 CODESG ENDS 32 END BEGIN -----------------------------------------------------------------------Segments and Groups: N a m e Size Align Combine Class CODESG . . . . . . . . . . . . 0014 PARA NONE 'CODE' DATASG . . . . . . . . . . . . 0006 PARA NONE 'DATA' STACKSG. . . . . . . . . . . . 0040 PARA STACK 'STACK' Symbols: N a m e Type Value Attr BEGIN. . . . . . . . . . . . . F PROC 0000 CODESG Length=0014 FLDA . . . . . . . . . . . . . L WORD 0000 DATASG FLDB . . . . . . . . . . . . . L WORD 0002 DATASG FLDC . . . . . . . . . . . . . L WORD 0004 DATASG __________________________________________________________________________ .4.3. . DW (Define Word - c), 32 , (?). 32 , "" - . 'STACKSEG' p.3.2 DEBUG. : 32 . , . .4.3 DATASG, 0000. DW. FLDA ( ), 250, .00FA (. ). FLDB 125, p .007D. - FA00 7D00 , c DEBUG.

FLDC , (?). CODESG , . -, ASSUME DATASG DS. ES, . -, PUSH, SUB PUSH, , , : 0004 B8 ---- R 0007 8E D8 MOV AX,DATASG MOV DS,AX

MOV DATASG AX. , - DATASG. : B8 ---- R , a DATASG; . p , c R; . MOV AX DS. , ASSUME, DS , , DS DATASG. . -, DS, MOV DS,DATASG ? , c DS. , DS . -, DS, SS CS ? , SS CS , DS , ES, . , c . . . , , , , . , , .4.3, . DEBUG , , . ________________________________________________________________ (CRF),

, . , , o B:, , B: cross-reference [NUL.CRF]:B: [Return] CRF- p . . CREF. : Cref filename [.CRF]: List filename [cross-ref.REF]: CRF-, .. B:EXASM1. . CRF EXASM1.REF B. DOS PRINT. 4 CREF. __________________________________________________________________________ EXASM2 (EXE) Symbol Cross Reference (# is definition) 18# 17 17# 11 11# 12# 13# 14# 4 4# 30 19 15 26 27 28 9 19 32 31 19 23 Cref-1

BEGIN. . . . . . . . . . . . CODE . . . . . . . . . . . . CODESG . . . . . . . . . . . DATA . . . . . . . . . . . . DATASG . . . . . . . . . . . FLDA . . . . . . . . . . . . FLDB . . . . . . . . . . . . FLDC . . . . . . . . . . . . STACK. . . . . . . . . . . . STACKSG. . . . . . . . . . .

10 Symbols __________________________________________________________________________ .4.4. . .4.4 , .4.3. c p , . p. n# LST-, . , , c . , CODESG 17 19 32.

________________________________________________________________ - OBJ-, - OBJ- EXE-. - (M)ASM, LINK CREF Return. . - CREF . - . CHKDSK . , . ________________________________________________________________ 4.1. MASM TEMPY.ASM LST, OBJ CRF, , B. 4.2. TEMPY ( 4.1) ) DEBUG, ) DOS. 4.3. : ) file.BAK, ) file.ASM, ) file.LST, ) file.CRF, ) file.OBJ, ) file.EXE, ) file.MAP. 4.4. DS, , - DATSEG. 4.5. : .30 ( ) AL; AL ( SHL) .18 ( ) BL; AL BL ( MUL BL).

RET. . ( ) . . DEBUG, , () . 4.6. 4.5 : - ( DB) FLDA, .28, FLDB, .14; - ( DW) FLDC, ; - FLDA AL ; - AL FLDB (MUL FLDB); - AX FLDC.

. , DEBUG.

5 __________________________________________________________________________ : . ________________________________________________________________ , -. : , DB , DW o . , . , .. , : MOV AL,20H 20 . o , , , , c.

________________________________________________________________ : -, , -, c. : [] Dn

( ), , . " " 3. : DB (), DW (), DD ( ), DQ ( ) DT ( ). , : FLD1 DB 25

, FLDB DB ?

,

: FLD3 DB 11, 12, 13, 14, 15, 16, ...

c . FLD3 , 11, FLD3+1 - , 12. (FLD3 FLD3+0). MOV AL,FLD3+3 AL 14 (. 0E). : [] Dn - DUP () ...

: DW DB DB 10 DUP(?) ; 5 DUP(14) ; , .14 3 DUP(4 DUP(8));

8 (8888), , p . . ------------------ , , , . o , , 'PC' - "PC". ASCII. DB, p . , DB . .5.1 . __________________________________________________________________________ page 60,132 TITLE EXDEF (EXE) DATASG SEGMENT PARA 'Data' ; ; FLD1DB DB 72 73 6F 6E FLD2DB DB 20 43 6F 6D 74 65 72 FLD3DB DB FLD4DB DB FLD5DB DB 41 4E 02 46 FLD6DB DB 03 4D 41 52 36 35 34 FLD7DB DB [ 00 ] FLD8DB DB - DB: ---------------------? ; 'Personal Computer' ;. 32 ; 20H ;. 01011001B ; 01,'JAN',02,'FEB',03,'MAR' ;- '32654' ; 10 DUP(0) ;

0000

0000 ?? 0001 50 65 61 6C 70 75 0012 20 0013 20 0014 59 0015 01 4A 45 42 0021 33 32 0026 0A

0030 0032 0034 0036

FFF0 0059 0021 R 0003 0004 0007 0008 0009 0040 05 [ 0000 ]

; ; FLD1DW FLD2DW FLD3DW FLD4DW

DW DW DW DW

- DW: ---------------------0FFF0H ;. 01011001B ; FLD7DB ; 3,4,7,8,9 ; 5 DUP(0) ; - DD: ------------------------------? ; 'PC' ; 32572 ; FLD3DB - FLD2DB ; 14,49 ; . - DQ: --------------------------------? ; 04D47H ;. 32572 ;.

FLD5DW DW

004A 004E 0052 0056 005A

???????? 43 50 00 3C 7F 00 11 00 00 0E 00 00 00 00

00 00 00 00

; ; FLD1DD FLD2DD FLD3DD FLD4DD 31 00 FLD5DD

DD DD DD DD DD

0062 006A 0072

007A 0084 008E

; ; ???????????????? FLD1DQ DQ 47 4D 00 00 00 00 FLD2DQ DQ 00 00 3C 7F 00 00 00 00 FLD3DQ DQ 00 00 ; ; ?????????????????? FLD1DT DT ?? 43 50 00 00 00 00 FLD2DT DT 00 00 00 00

- DT: ---------------------------? ; 'PC' ;

DATASG ENDS END -----------------------------------------------------------------------Segments and Groups: N a m e Size Align Combine Class DATASG . . . . . . . . . 008E PARA NONE 'DATA' Symbols: FLD1DB FLD1DD FLD1DQ FLD1DT FLD1DW FLD2DB FLD2DD FLD2DQ FLD2DT FLD2DW FLD3DB FLD3DD FLD3DQ FLD3DW FLD4DB FLD4DD FLD4DW FLD5DB FLD5DD FLD5DW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . m . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L L L L L L L L L L L L L L L L L L L L Type BYTE DWORD QWORD TBYTE WORD BYTE DWORD QWORD TBYTE WORD BYTE DWORD QWORD WORD BYTE DWORD WORD BYTE DWORD WORD Value 0000 004A 0062 007A 0030 0001 004E 006A 0084 0032 0012 0052 0072 0034 0013 0056 0036 0014 005A 0040 Attr DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG DATASG Length =0005

FLD6DB . . . . . . . . . L BYTE 0015 DATASG FLD7DB . . . . . . . . . L BYTE 0021 DATASG FLD8DB . . . . . . . . . L BYTE 0026 DATASG Length =000A __________________________________________________________________________ .5.1. . ------------------- a . . - . . . 0 9 D, , , 125 125D. , , . . , 125 . 7D. . . 0 F H. , , . 0 9. , 2EH 0FFFH, 2E FF0F ( ). . 0 1 B. AND, OR, XOR TEST. 12, . C 1100B : . 0C 0000 1100 , . . 0 7 Q O, , 253Q. . ASM. .

, , , , DB '12', ASCII .3132, , o DB 12, .0C. .5.1 . , (). (DB) ________________________________________________________________ , , DB ( ). p DB ,

(. FLD2DB FLD7DB .5.1). , FLD2DB 'Personal Computer'. ASCII . .20 . DB . . p. . 7F, "" 80 FF . +127 -128. .5.1 FLD3DB, FLD4DB, FLD5DB FLD8DB. FLD6DB , . (DW) ________________________________________________________________ DW , ( ). DW , , , , 'PC' 'CP'. DW . DW . . . . 7FFF; "" 8000 FFFF . +32767 -32768. .5.1 FLD1DW FLD2DW . FLD3DW - FLD7DB. 0021 (R ). , , FLD7DB 0021. FLD4DW . , o ( ). DW, DD DQ . , . 12345 .3039, 3930. (DD) ________________________________________________________________ DD , c ( ). , ( . ). . 7FFFFFFF; "" 80000000 FFFFFFFF . +2147483647 -2147483648. .5.1 FLD3DD . FLD4DD , FLD2DB. FLD5DD . DD . , . 12345 .00003039, o 39300000. DD .

, FLD2DD . (DQ) ________________________________________________________________ DQ , ( ). , 16 . . . - 15 F. , , . 1 15 : 1152921504606846976 . 5.1 FLD2DQ FLD3DQ . DQ . , , DD DW. DQ a DD DW. (DT) ________________________________________________________________ DT , . " " (. .13). DT , ; a. .5.1 DT . .5.1 . X c , LINK MAP : "Warning: No STACK Segment" (: ), LINK "There were 1 errors detected" ( 1 ). DEBUG , .5.2. __________________________________________________________________________ D:\ D>DEBUG D:EXDEF.EXE -D 1421:0000 00 50 65 72 73 1421:0010 65 72 20 20 59 1421:0020 52 33 32 36 35 1421:0030 F0 FF 59 00 21 1421:0040 00 00 00 00 00 1421:0050 00 00 3C 7F 00 1421:0060 00 00 00 00 00 1421:0070 00 00 3C 7F 00 -D 1421:0080 00 00 00 00 43 1421:0090 3E 36 33 33 73 1421:00A0 1C 06 63 63 3E 1421:00B0 18 18 18 18 3C 1421:00C0 63 63 63 63 3E 1421:00D0 C3 C3 66 3C 18 1421:00E0 DB DB FF 66 66

6F 01 34 00 00 00 00 00 50 00 00 00 00 00 00

6E 4A 00 03 00 11 00 00 00 00 00 00 00 00 00

61-6C 41-4E 00-00 00-04 00-00 00-00 00-00 00-00 00-00 00-0A 00-0A 00-0A 00-0A 00-0A 00-0A

20 02 00 00 00 00 00 00 00 0E 0E 0E 0E 0E 0E

43 46 00 07 00 0E 47 00 00 00 00 00 00 00 00

6F 45 00 00 00 00 4D 00 00 00 00 00 00 00 00

6D 42 00 08 00 00 00 00 00 3E FF 63 C3 C3 C3

70 03 00 00 00 00 00 00 00 63 DB 63 C3 C3 C3

75 4D 00 09 43 31 00 00 33 63 99 63 C3 C3 66

74 41 00 00 50 00 00 00 33 30 18 63 C3 C3 3C

.Personal Comput .er Y.JAN.FEB.MA R32654.......... ..Y.!........... ..............CP ..cc0 ..cc>........... ............... ..f 0D CTR,08H D30 CTR,0DH D40 ; 08? ; - ; / 0D? ; -

: DOS ________________________________________________________________ , . , DOS, c , , INT. -, . , ; , . -, , . , . LABEL BYTE. . , - .FF 255. DOS . , . NAMEPAR MAXLEN ACTLEN NAMEFLD LABEL DB DB DB BYTE 20 ? 20 DUP (' ') ; : ; ; ;

LABEL , NAMEPAR MAXLEN a . MASM STRUC. , , , , , c .24 " ". AH 10 (. 0AH), (NAMEPAR ) DX INT 21H: MOV AH,0AH LEA DX,NAMEPAR INT 21H ; ; ; DOS

INT , , c , (20 ). Return. (. 0D) (NAMEFLD ). , , BROWN (Return), c : .: 20 5 R O W N # ... .: 14 05 42 52 4F 57 4E 0D 20 20 20 20 ... (ACTLEN ) - 05. Return NAMEFLD +5. # , . 0D . 20 .0D, 19 . : ________________________________________________________________

EXE-, . 8.2, , . , Return . , TED SMITH: 1. 09 2 4, 2. 40, 36 SHR E10CENT 09 o , 2. 00001001 00000100. NEG +4 -4. ADD 40, DL - 36. 12 36 : 12: : TED SMITH 36 40

E10CODE , c (07) : MOV NAMEFLD[BX],07 BX , MOV , BX NAMEFLD, 07. , 05 07 NAMEFLD+05 ( Return). E10CODE "$" 07. , F10CENT , p . __________________________________________________________________________ page 60,132 TITLE CTRNAME (EXE) ;-------------------------------------------------------STSCKSG SEGMENT PARA STACK 'Stack' DW 32 DUP(?) STACKSG ENDS ;-------------------------------------------------------DATASG SEGMENT PARA 'Data' NAMEPAR LABEL BYTE ; : MAXNLEN DB 20 ; . NAMELEN DB ? ; NAMEFLD DB 20 DUP(' '),'$' ; PRIMPT DB 'Name? ', '$' DATASG ENDS ;-------------------------------------------------------CODESG SEGMENT PARA 'Code" BEGIN PROC FAR ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASC PUSH DS SUB AX,AX PUCH AX MOV AX,DATASC MOV DS,AX MOV ES,AX

CALL A20LOOP: MOV CALL CALL CALL CALL CMP JE CALL CALL JMP A30: BEGIN ENDP ; ; B10PRMP PROC MUV LEA INT RET B10PRMP ENDP ; ; D10INPT PROC MOV LEA INT RET D10INPT ENDP ; ; E10CODE PROC MOV MOV MOV MOV RET E10CODE ENDP ; ; F10CENT PROC MOV SHR NEG ADD MOV CALL MOV LEA INT RET F10CENT ENDP ; ; Q10CLR PROC MOV MOV

Q10CLR DX,0000 Q20CURS B10PRMP D10INPT Q10CLR NAMELEN,00 A30 E10CODE F10CENT A20LOOP RET

; ; 00,00 ; ; ; ; ? ; - ; ; '$' ; ; DOS

: -------------------NEAR AN,09 ; DX,PROMPT 21H : ----------------------NEAR AN,0AN ; DX,NAMEPAR 21H '$': -----------------------------------NEAR BN,00 ; Return (0D) BL,NAMELEN ; . (07) NAMEFLD[BX],07 NAMEFLD[BX+1],'$' ; : -----------------------------------NEAR DL,NAMELEN ; : DL,1 ; 2, DL ; , DL,40 ; 40 DH,12 ; Q20CURS ; AN,09 DX,NAMEFLD ; 21H : -------------NEAR AX,0600H ; BH,30 ; (07 /)

MOV MOV INT RET Q10CLR ; ; Q20CURS PROC MOV MOV INT RET Q20CURS ENDP

CX,0000 DX,184FH 10H

; 00,00 ; 24,79 ; BIOS

(/): ---------------------------------NEAR ;DX AH,02 ; BH,00 ; #0 10H ; BIOS

CODESG ENDS END BEGIN __________________________________________________________________________ .8.2. . Return ---------------------------------- , , , o Return. , Return, y : (.): 14 00 0D ...

Return . p . Return ---------------------- , : , , . , , Return (.0D) NAMEFLD (.20). NAMELEN c 0D. , , NAMELEN 05, 0D NAMEFLD+5. BX NAMEFLD: MOV BH,00 MOV BL,NAMELEN MOV NAMEFLD[BX],20H ; BX ; 0005 ; 0D

MOV (.20) , o : NAMEFLD BX, .. NAMEFLD+5. ---------------------- , . :

NAMEPAR (.)

1. BROWN 14 05 42 52 4F 57 4E 0D 20 20 20 ... 20 2. HAMILTON 14 08 48 41 4D 49 4C 54 4F 4E 0D ... 20 3. ADAMS 14 05 41 44 41 4D 53 0D 4F 4E 0D ... 20 HAMILTON BROWN. HAMILTON, HAMIL. T. - ON o NAMEFLD MOV CX,20 MOV SI,0000 B30: MOV NAMEFLD[si],20H INC SI LOOP B30 ; ; ;20 , ADAMS Return ADAMS. :

; 20 ;

SI DI BX. , , . , NAMEFLD DB (), , WORD, a PTR (), : MOV CX,10 LEA SI,NAMEFLD B30: MOV INC INC LOOP WORD PTR[SI],2020H ; SI ; SI ; B30 ;10 ; 10 ;

MOV B30 , SI. p LEA SI MOV 30, , , : MOV WORD PTR[NAMEFLD],2020H ; , . c , . : DOS ________________________________________________________________ , DOS 2.0 ( UNIX). DOS, . (file handle), y BX, /. : 0 1 ( ) CON ( ) CON

2 3 4

( ) CON / AUX LPT1 PRN

DOS / - INT 21H, AH: .3F - , .40 - . CX /, DX - /. / (CF) AX , . o CF, ( 6) AX. AX , , - CF, - . o , o / . - , p. : DOS ________________________________________________________________ DOS: DISAREA DB ... MOV MOV MOV LEA INT 20 DUP(' ') AH,40H BX,01 CX,20 DX,DISAREA 21H ; ; ; ; ; ; DOS

LEA DX DISAREA DOS , . ( ), AX . , y . CF ( 6) AX. AX , , - CF. : --------------------------- DEBUG . DEBUG A 100 ( ) p 100. , DEBUG , : 100 102 105 108 10B 10D 10E MOV MOV MOV MOV INT RET DB AH,40 BX,01 CX, DX,10E 21 ' '

( )

AH . 10F DX - DB, . , Return. U (U 100,10D) . R T . INT 21H BIOS, 10B GO (G 10D) RET. . Q DOS. : DOS ________________________________________________________________ , DOS: INAREA DB MOV MOV MOV LEA INT 20 DUP (' ') AH,3FH BX,00 CX,20 DX,INAREA 21H ; ; ; ; ; ; DOS

LEA INAREA DX. INT , c , CX (20 ). Return ( . 0D) . , "PC Users Group" INAREA : PC Users Group, .0D, .0A (.0D), , (.0A), . p . c , . CF ( ) AX , . 14 2 , .. 16. . YES NO, p , , , . , . CF AX (6 ). AX , , - CF. , , y CX, . , CX 08, "PC Exchange". "PC Excha" . AX 08. INT , , . ,

"ng", , AX 05. CF . INT: INT: PC Excha ng,0D,0A AX = 08 AX = 05

, ) AX , CX ) AX CX , - 0D 0A. DOS 0AH . . : ------------------------ c DEBUG. 12 , . DEBUG A 100 , c 100. , DEBUG , . 100 102 105 108 10B 10D 10F MOV MOV MOV MOV INT JMP DB AH,3F BX,00 CX,0C DX,10F 21 100 ' '

AH BX c , CX DX 10F - DB . . , Return. U 100,108 . R T MOV. 10B, G 10D INT ( BIOS ). , Return. AX, CF D 10F, . Q. , ________________________________________________________________ , : ASCII CR LF TAB 13 10 09 0DH 0AH 09H

- , DOS. : MESSAGE DB MOV MOV MOV LEA INT 09,'PC Users Group Annual Report',13,10 AH,40H ; BX,01 ; CX,31 ; DX,MESSAGE ; 21H ; DOS

EQU : CR LF TAB MESSAGE DB EQU EQU EQU TAB, 'PC 13 10 09 Users Group Annual' ; EQU 0DH ; EQU 0AH ; EQU 09H DB 'Report', CR, LF

________________________________________________________________ - INT 10 BIOS . INT 21H DOS -. - , INT 21 INT 21H - . - A, BX, CX DX -. - INT 21H DOS - ($) . - -. . - DOS . INT 21H , , . - DOS A 40, BX - 01. - DOS 3FH, BX 00. . , . ________________________________________________________________ 8.1. 2540?

8.2. : 12, 8. 8.3. , 0- 12- 79- 22- . 8.4. ' (//)'. . : ) DOS, ) DOS . 8.5. 8.4. : ) DOS, ) DOS . 8.6. , . 8.7. .8.2 , , : ) 12 15; ) 0 15. 8.8. .8.2 DOS. , .

9 II: __________________________________________________________________________ : , , , , - . ________________________________________________________________ .8 . , - , , . ( BIOS 10) , , . c- . -------------------- 4, . B0000 ( ). : - 2 (25 80 ); - 2 -, , , .

/ ---------------------------- 16 ( ), .B8000. ( ASCII-) , - (BW) . p , 0 3 80 c 0 7 40 . - 0. . ________________________________________________________________ , , ( ) . - 8 : : : BL R G B 7 6 5 4 I R G B 3 2 1 0

RGB , (red), (green) (blue) . 7 (BL) , 3 (I) - . , - (BW). o: ( ) ( ) ( ) ( ) RGB 000 000 000 111 RGB 000 001 111 000

; . , , , : 0000 0000 0000 0111 1000 0111 0000 1111 0111 0000 1111 0000 . 00 ( ) 07 () 87 () 0F () 70 () F0 (. )

, , . , . INT 10H. BL -, AH : 06 ( ), 07 ( ), 08 ( ), 09 ( ). p , ,

. .00, . BIOS INT 10H ________________________________________________________________ INT 10H . AH , . c BX, CX, DX, SI BP. . AH=00: . . p c INT 10H. . AL : 00 01 02 03 04 05 06 07 08 - 0A 0D 0E 0F 10 40 25 - 40 25 i6- 80 25 - 80 25 16- 320 200 4- 320 200 - 640 200 - 80 25 - PCjr 320 200 16- (EGA) 640 200 16- (EGA) 640 350 - (EGA) 640 350 64- (EGA)

EGA (Enhanced Graphics Adapter) - . 16- : MOV AH,00 MOV AL,03 INT 10H ; ; 80 25 ; BIOS

, , BIOS INT 11H. AX , 5 4 : 01 10 11 40 25 80 25 80 25 - - - -

, , p AX INT 11H . AH=01: . ASCII-. . INT . p . INT 10H, : 4-0 CH , 4-0 CL - . p : 0 13 EGA p 0 7 .

: MOV MOV MOV INT AH,01 CH,00 CL,13 10H ; ; ; ; BIOS

. , , 04/08, 03/10 .. , . 12/13 ( ) 6/7 ( ) . AH=02: . c c . 0, 0 3 80 . AH 02, BH DX : MOV MOV MOV MOV INT AH,02 BH,00 DH, DL, 10H ; ; 0 ; ; ; BIOS

AH=03: . ( ), p , : MOV AH,03 MOV BH,00 INT 10H ; ; 0 ; BIOS

DH , DL - . CH c, CL - . AH=04: . e p. AH=05: . 0 3. 40 25 8 ( 0 7), 80 25 - 4 ( 0 3). MOV AH,05 MOV AL, INT 10H ; ; ; BIOS

AH=06: . , . p , , . . 06 . AL 00 , . AL . , .

: MOV MOV MOV MOV INT AX,0601H BH,07 CX,0000 DX,184FH 10H ; ;: , - ; 00,00 ; 24,79 ( ) ; BIOS

AL. BH , , .. CX DX . : 1. ROW () 0 . 2. . 3. , (CMP ROW,22). 4. , ROW (INC ROW) . 5. , , ROW . AH=07: . . AH 07, p 06 . AH=08: / . , , : MOV AH,08 MOV BH,00 INT 10H ; ./. ; 0 ( .) ; BIOS

AL , AH - . .00 ASCII-. c, . AH=09: / . , .. : MOV MOV MOV MOV MOV INT AH,09 AL, BH, BL, CX, 10H ; ; ; (..) ; ; ; BIOS

AL . CX . . . "" : MOV AH,09 MOV AL,03H ; ; ( )

MOV MOV MOV INT

BH,00 BL,0F0H CX,05 10H

; 0 (. ) ;, ; ; BIOS

( ) . , CX 01 AL . CX , LOOP. , ( 02). BL . 7 0, , 7 1, XOR. AH=0A: . 0A 09 , 0A : MOV MOV MOV MOV INT AH,0AH AL, BH, CX, 10H ; ; ; ( ) ; ; BIOS

DOS INT 21H . AH=0E: . , . AH . 0E, p AL , ( ) BL - BH. ( 07H), (08H), (0AH) (0DH) , . , c, . AH=0F: . AL (. AH=00), p AH - (20, 40 80), BH - . AH=13: ( AT). AT : MOV MOV MOV LEA MOV MOV INT AH,13H AL, BH, BP, CX, DX, 10H ; ;0, 1, 2 3 ; ; ES:BP ; ; ; BIOS

: 0 - ; 1 - ;

2 - , ; 3 - , . : , ________________________________________________________________ , . 9.1, . , , 40 : Name? Francis Bacon 0 Francis Bacon [] 40

ROW ( ) COL ( ). INT 10H . , 20- . . __________________________________________________________________________ page 60,132 TITLE NMSCROLL (EXE) , , ; ------------------------------------------------------STACKSG SEGMENT PARA STACK 'Stack' DW 32 DUP(?) STACKSG SEGMENT PARA STACK 'Stack' DW 32 DUP(?) STACKG ENDS ; ------------------------------------------------------DATASG SEGMENT PARA 'Data' NAMEPAR LABEL BYTE ; : MAXNLEN DB 20 ; . ACTNLEN DB ? ; NAMEFLD DB 20 DUP(' ') ; COL DB 00 COUNT DB ? PROMPT DB 'Name? ' ROW DB 00 DATASG ENDS ; ------------------------------------------------------CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG PUSH DS SUB AX,AX PUSH DS MOV AX,DATASG MOV ES,AX MOV AX,0600H CALL Q10CLR ; A20LOOP: MOV COL,00 ; 0 CALL Q20CURS CALL B10PRMP ;

CALL CMP JNE MOV CALL RET A30: BEGIN ; ; B10PRMP PROC LEA MOV B20: MOV CALL INC INC CALL DEC JNZ RET B10PRMP ENDP ; ; D10INPT PROC MOV LEA INT RET D10INPT ENDP ; ; E10NAME PROC LEA MOV E20: CALL MOV CALL INS INS DES JNZ CMP JAE INC RET E30: MOV CALL RET E10NAME ENDP ; ; F10DISP PROC MOV MOV MOV CALL JMP ENDP

D10INPT ACTNLEN,00 A30 AX,0600H Q10CLR E10NAME A20LOOP

; ; ? (.. ) ; , , ; ;

: -------------------NEAR SI,PROMPT ; COUNT,05 BL,70H F10DISP SI COL Q20CURS COUNT B20 ; ; ; ; ; ; n

: ---------------------NEAR AN,0AH DX,NAMEPAR 21H : ---------------------------------NEAR SI,NAMEFLD ; COL,40 ; Q20CURS BL,0FOH F10DISP SI COL ACTNLEN E20 ROW,20 E30 ROW AX,0601H Q10CLR ; ; ; ; ; ; ; n ; ? ; ; -;

: ---------------------NEAR ;BL () AN,09 ; AL,[SI] ; BH,00 ;

MOV CX,01 ; INT 10H ; BIOS RET F10DISP ENDP ; : ; -------------Q10CLR PROC NEAR ;AX MOV BH,07 ; / MOV CX 0000 MOV DX,184FH INT 10H ; BIOS RET Q10CLR ENDP ; (/): ; ---------------------------------Q20CURS PROC NEAR MOV AN,02 MOV BH,00 MOV DH,ROW MOV DL,COL INT 10H RET Q20CURS ENDP CODESG ENDS END BEGIN __________________________________________________________________________ .9.1. , . D10INPT DOS INT 21H. BIOS INT 10H : 1. . 2. INT 10H ( 08) 08 AH 00 BH. AL. 3. AL RETURN , . 4. AL . 5. AL RETURN, . 6. . 7. . 8. 2. RETURN, - . ASCII ________________________________________________________________ ASCII- 128 255 (. 80-FF) , , . , c : .

DA BF C0 D9 C4 B3

INT 10H 25 : MOV MOV MOV MOV MOV MOV AH,09 AL,0C4H BH,00 BL,0FH CX,25 10H ; ; ; 0 ; ;25 ; BIOS

, . , . B3. : . B0 B1 B2 ( ) ( ) ( )

, , . / DOS ________________________________________________________________ DOS, . AH , , INT 21H. AH=01: . AL. AL , ASCII- c, , . AL , , , , F1 PgUp. - , (. " " ). Ctrl/Break. AH=02: . p DL. , . AH=07: . 01 : , .. , o Ctrl/Break. AH=08: . 01 :

, .. . AH=0B: . . FF AL, , 00. 01, 07 08, . BIOS INT 16H ________________________________________________________________ BIOS INT 16H , AH . AH=00: . AL o ASCII , , - AH. (- ). , , F1, AL 00. . AH=01: . (ZF=0), ; - AL AH . AH=02: . AL .417: 7 6 5 4 3 2 1 0 (Ins) (Caps Lock) (Num Lock) (Scroll Lock) Alt/Shift Ctrl/Shift Shift Shift

________________________________________________________________ : 1. (-) : a z, 0 9, %, $, # .. 2. : , End, , , Return, Del, Ins, PgUp, PgDn - . 3. : Alt, Ctrl Shift, . - , . - . , , , End .

. - 1 (Esc) 83 (Del) .01 .53. - . , 00 AH BIOS INT 16H: MOV AH,00 ; INT 16H ; BIOS , . (, A) : 1. ASCII- A (.41) AL; 2. - A (.1E) AH. (, Ins) : 1. AL; 2. - Ins (.52) AH. , INT 16H AL. AL , , , . : MOV INT CMP JZ AH,00 16H AL,00 exit ; ; BIOS ; ? ; -

- ---------- .9.2 - . *, + -. "", , .2A AL - AH , : .09 8 .29 PrtSc. - : CMP JNE CMP JE AL,2AH EXIT1 AH,09H EXIT2 ;? ; - ; -?

__________________________________________________________________________ Alt/A - Alt/Z F1 - F10 Home PgUp - 1E - 2C 3B - 44 47 48 49 4B 4D

End 4F 50 PgDn 51 Ins 52 Del 53 __________________________________________________________________________ .9.2. - 0 c 0 (- 47): MOV INT CMP JNE CMP JNE MOV MOV MOV INT AH,00 16H AL,00 EXIT1 AH,47H EXIT2 AH,02 BH,00 DX,00 10H ; ; ; ? ; -- ;- Home? ; -- ; ; ; 0,0 ; BIOS

F1 - F10 - .3B .44. F10: CMP AH,44H ; F10? JE EXIT1 ; ! EXIT1 . - BASIC. IBM PC -, Alt, Ctrl Shift. ________________________________________________________________ - 4 , 2 2 . - 16 - (BW) . , ASCII-, . - - . , . RGB , . - BIOS INT 10H : , , , . - , , . - ,

. - INT 10H, , . - BIOS INT 16H .

- .

- -, 1 (Esc) 83 (Del), .01 .53. - AL - AH. - AL - AH. ________________________________________________________________ 9.1. ) , ) , ) . 9.2. ) BW (-) 80 , ) , 5 12 , ) 10 , ) (. B1). 9.3. - : ) , ) F3, ) Home, ) PgUp. 9.4. DEBUG, AX . A 100 (Return). : MOV AH,00 INT 16H JMP 100 U 100,104, G 104 MOV INT. INT . AH . G 104, , , . Q. 9.5. : PgDn, - 24 0.

10 III: __________________________________________________________________________

: , . ________________________________________________________________ . p, ( p ): 1. ( ), . 2. , , . . 3. RGB-, - , . , RGB- . (CGA Color/Graphics Adapter) 16 , .B8000, 8 - 8 . 8025 (0-3) 4 . 4025 (0-7) 2 . ( ). . (EGA - Enhanced Graphics Adapter) , (CGA) . 320200, 640200 640350 . : (-) , . . 9 "p BIOS INT 10H" (AH=0). BIOS INT 10H, : MOV AH,00 ; MOV AH,00 ; MOV AL,03 ;+ MOV AL,04 ; INT 10H INT 10H ; (-) ________________________________________________________________ . - (BW) , . ASCII (256 ), - (BW), . 16 . 16 .

------ , . , , , . , 16 : I 0 0 0 0 0 0 0 0 R 0 0 0 0 1 1 1 1 G 0 0 1 1 0 0 1 1 B 0 1 0 1 0 1 0 0 - - - - - - I 1 1 1 1 1 1 1 1 R 0 0 0 0 1 1 1 1 G 0 0 1 1 0 0 1 1 B 0 1 0 1 0 1 0 1

o 16 . . , . , . - ------------- , p .9. , BL (BLinking), RGB - , , I - : : : BL R G B 7 6 5 4 I R G B 3 2 1 0

. : : 7 BL 0 0 0 0 - 0 , 1 6 R 0 0 0 0 1 0 5 G 0 0 0 1 1 1 4 B 0 0 1 0 1 0 3 I 0 0 0 0 1 1 2 R 0 0 1 0 1 0 1 G 0 0 0 1 0 0 0 B . 0 00 1 01 0 14 1 23 1 7D 0 A8

- - (BW) . INT 11H. BW 07 . . , . INT 10H AH=06, AH=07 AH=09. , - : MOV AH,09 MOV AL,'*' ; ;

MOV MOV MOV INT

BH,00 BL,0DAH CX,05 10H

; 0 ; ; ; BIOS

________________________________________________________________ - (pixel). (CGA) : 1. ( ROM) 100 160 (.. ). 16 , "". Motorola 6845 CRT. : .3D4 3D5. 2. 200 320 . (.. ). 3. 200 640 . 16 , - (BW) . 8 (.. ). , - . , ROM 128 ASCII-. INT 1FH 1 , 128 . (8 ). , , p. ________________________________________________________________ 0 3: : : C1 C0 C1 C0 C1 C0 C1 C0 0 1 2 3 ,

, 0 3. 4 , 4 : 00, 01, 10 11. p 00 16 01, 10, 11 . p : C1 0 0 1 1 C0 0 1 0 1 0 1

INT 10H. p, , , 0, : , , . ,

10101010, . - 1, : , , . , 00011011, , , . BIOS INT 10H ------------------------------------ AH=00 INT 10H . AH=11 INT 10H . AH : AH=00: . AH 04 p AL : MOV AH,00 MOV AL,04 INT 10H ; ; 320200

. 9. AH=0BH: . BH BL: BH=00 p BL. 1 16 . o 0 F; BH=01 BL (0 1): MOV MOV MOV INT AH,0BH BH,01 BL,00 10H ; ; ; 0 (, , .) ; BIOS , , . AH=0BH , , , .

, . 0

AH=0CH: . 0C AH ( ). , 320200 DX ( 0 199), CX - ( 0 319). AL ( 0 3): MOV MOV MOV MOV INT AH,0CH AL, CX, DX, 10H ; ; ; ; ; BIOS

AH=0DH: . . DX ( 0 199), CX - ( 0 319). AH 0D. AL.

: ________________________________________________________________ , .10.1, INT 10H , (40 320 ). 1 . , . __________________________________________________________________________ TITLE GRAPHIX (COM) CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG ORG 100H MAIN PROC MOV MOV MOV MOV MOV INT MOV MOV MOV NEAR AN,00 AL,0DH AH,0BH BH,00 BL,02 10H BX,00 CX,00 DX,00 ; ; EGA (CGA=04) ; ; ; ; , ; ;

A50: MOV AH,0CH ; MOV AL,BL ; INT 10H ;BX, CX, DX INC CX ; CMP CX,320 ; 320? JNE A50 ; - , MOV CX,00 ; - INS BL ; INS DX ; CMP DX,40 ; 40? JNE A50 ; - , RET ; - MAIN ENDP CODESG ENDS END MAIN __________________________________________________________________________ .10.1 . . DOS MODE (MODE CO80) COM , INT 10H. ________________________________________________________________ - 16 (). 80 40 .

- ( ROM), ( ) ( - ). - ( ) (, ). - (CGA) , 16 , . _________________________________________________________________ 10.1. (CGA) ? 10.2. ) -, ) , ) . 10.3. , , . 10.4. "" - . 10.5. ) 320200 CGA ) 640200 EGA. 10.6. . 10.7. 12 13 . 10.8. .10.1 : ) ; ) ; ) 10 30; ) 20 300.

11 __________________________________________________________________________ : . ,

________________________________________________________________ , , , . , , , . , , . , .

: MOVS LODS STOS CMPS SCAS ; AX; ; AL AL AX ; , AL AX .

REP . ________________________________________________________________ p . , "" "" . , ( ). , DI SI : MOVS LODS STOS CMPS SCAS DI,SI AL,SI AX,SI DI,AL DI,AX SI,DI DI,AL DI,AX MOVSB LODSB STOSB CMPSB SCASB MOVSW LODSW STOSW CMPSW SCASW

, MOVS, MOVSB MOVSW. , p DI SI , ( LEA). SI - DS:SI. DI - ES:DI. , MOVS, STOS, CMPS SCAS ES ( DS). REP: ________________________________________________________________ , , REP . , , REP MOVSB. REP CX. REP 1 CX . , . : - - CLD DF 0; STD DF 1.

20 STRING1

STRING2. , DS ES : STRING1 STRING2 DB DB ... CLD MOV LEA LEA REP 20 DUP('*') 20 DUP(' ') CX,20 DI,STRING2 SI,STRING1 MOVSB ; DF ; 20 ; "" ; "" ;

CMPS SCAS , . REP : REP REPZ REPE REPNE REPNZ , CX 0; , ZF " ". ZF, CX 0; , ZF " ". ZF, " " CX 0.

8086, 80286 80386, o , , , . MOVS: ________________________________________________________________ .7.5 . . MOVS REP CX . , , , p ES, DI , . DS, SI . , MOVS ES DS, DI SI. DF MOV S 1 ( ) 2 ( ) DI SI. , REP MOVSB: LABEL1: JCXZ MOV MOV INC/DEC UNC/DEC LOOP ... LABEL2 AL,[SI] [DI],AL DI SI LABEL1

; ;

LABEL2:

.11.1 C10MVSB MOVSB NAME1 NAME2. CLD 0 . DF

CLD . __________________________________________________________________________ page 60,132 TITLE STRING (EXE) ; --------------------------------------------------STACKSG SEGMENT PARA STACK 'Stack' DW 32 DUP(?) STACKG ENDS ; --------------------------------------------------DATASG SEGMENT PARA 'Data' NAME1 DB 'Assemblers' ; NAME2 DB 10 DUP(' ') NAME3 DB 10 DUP(' ') DATASG ENDS ; --------------------------------------------------CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ; ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG PUSH DS SUB AX,AX PUSH AX MOV AX,DATASG MOV DS,AX MOV ES,AX CALL C10MVSB ; MVSB CALL D10MVSW ; LODS CALL E10LODS ; LODS CALL F10STOS ; CMPS CALL H10SCAS ; SCAS RET BEGIN ENDP ; MOVSB: ; ------------------C10MVSB PROC NEAR CLD LEA SI,NAME1 LEA D1,NAME2 MOV CX,10 ; 10 REP MOVSB ; NAME1 NAME2 RET C10MVSB ENDP ; MOVSW: ; ------------------D10MVSW PROC NEAR CLD LEA SI,NAME2 LEA DI,NAME3 MOV CX,05 ; 5 REP MOVSW ; NAME2 NAME3 RET D10MVSW ENDP ; LODSW: ; ------------------E10LODS PROC NEAR CLD LEA SI,NAME1 ; LODSW ; NAME1 AX RET

E10LODS ENDP ; STOSW: ; ------------------F10STOS PROC NEAR CLD LEA D1,NAME3 MOV CX,05 MOV AX,2020H ; REP STOSW ; NAME3 RET F10STOS ENDP ; CMPSB: ; ------------------G10CMPS PROC NEAR CLD MOV CX,10 LEA SI,NAME1 LEA DI,NAME2 REPE CMPSB ; NAME1 NAME2 JNE G20 ; ? MOV BH,01 G20: MOV CX,10 LEA SI,NAME2 LEA DI,NAME3 REPE CMPSB JE G30 MOV BL,02 G30: RET G10CMPS ENDP

; NAME2 NAME3 ; ,

; SCASB: ; ------------------H10SCAS PROC NEAR CLD MOV CX,10 LEA DI,NAME1 MOV AL,'m' ; 'm' REPNE SCASB ; NAME1 JNE H20 ; - MOV AH,03 H20: RET H10SCAS ENDP CODES ENDS END BEGIN __________________________________________________________________________ .11.1. . LEA SI DI NAME1 NAME2 . DS ES DATASG, NAME1 NAME2 ES:DI DS:SI. (COM ES DS). MOV CX 10 - NAME1 NAME2. REP MOVSB : - NAME1 (

p ES:DI) NAME2 ( DS:SI). - 1 DI SI . - CX 1. - ( 10 ), CX . DF , MOVSB DI SI, , .. NAME1+1 NAME2+1 .. DF 1, MOVSB DI SI, . SI DI , .. NAME1+9 NAME2+9 . D10MVSW (.11.1) MOVSW, . MOVSW DS SI 2, . SI NAME1+8, DI - NAME2+8. LODS: ________________________________________________________________ LODS AL AX . DS:SI. DF SI. LODS , REP . MOV LODS, MOV , LODS - , SI. LODS , ( ), . , LODSB: MOV AL,[SI] INC SI .11.1 E10LODS LODSW. : NAME1 ( As) AL, - AH. AX sA. STOS: ________________________________________________________________ STOS () AL AX . ES:DI. DF STOS DI 1 2 . STOS REP - , , . ( c) AX. , REP STOSB: LABEL1: JCXZ MOV LABEL2 [DI],AL

LABEL2:

INC/DEC LOOP ...

DI LABEL1

;

.11.1 F10STOS STOSW. . 2020 () NAME3, AL , AH - . DI NAME3+10. CMPS: ________________________________________________________________ CMPS ( DS:SI) ( ES:DI). DF CMPS SI DI 1 2 . CMPS AF, CF, OF, PF, SF ZF. REP CX . CMPS . , JEAN JOAN. : J E A N : : : : J O A N (E O)

N:N p/. " ", , " ". REP REPE, , , CX p . : REPE CMPSB .11.1 G10CMPS CMPSB. NAME1 NAME2. MOVSB NAME1 NAME2, CMPSB p/: SF 0 () ZF - 1(). NAME2 NAME3. STOSW NAME3 , CMPB "/": SF 0 () ZF - 0 ( ). "/" 01 BH. "" 02 BL. DEBUG , G10CMPS BX 0102. ! CMPSB . CMPSW , p CX 5. , CMPSW . , SAMUEL ARNOLD CMPSW SA AR , .. AS RA. "" "", ..

. CMPSW , , DW, DD DQ. SCAS: ________________________________________________________________ SCAS CMPS , () . SCAS ( p ES:DI) AL AX. DF SCAS DI 1 2 . SCAS AF, CF, OF, PF, SF ZF. REP CX SCAS . SCAS , , , , : , . .11.1 H10SCAS NAME1 "m". SCASB , - " " CX , REPNE: REPNE SCASB NAME1 "Assemblers", SCASB "m" . DEBUG H10SCAS AH 03 , "m" . REP SCASB CX 10 06. SCASW AX. LODSW MOV AX, , AL, - AH. SCAS , o . ________________________________________________________________ , , . c STRING (&) . SCASB & ( STRING+8), DI a STRING+9. & DI . STRLEN STRING EQU 15 ; STRING DB 'The time&is now' ... CLD MOV AL,'&' ; MOV CX,STRLEN ; STRING LEA DI,STRING ; STRING REPNE SCASB ; JNZ K20 ; ?

K20:

DEC DI ; - MOV BYTE PTR[DI],20H ; RET

________________________________________________________________ MOVSB . MOVS . , FLDA REP MOVS FLDA,FLDB MOVSW FLDB (DB),

FLDB FLDA. : REP MOVS ES:BYTE PTR[DI],DS:[SI] DI SI FLDA FLDB o . ________________________________________________________________ STOS o . , , MOVS . , : ***---***---***---***---***--- . . . , , . : PATTERN DISAREA DB DB . . CLD MOV LEA LEA REP '***---' 42 DUP(?)

CX,21 DI,DISAREA SI,PATTERN MOVSW

MOVSW (**) PATTERN DISAREA, - (*-), (--): ***---***--PATTERN DISAREA

DI DISAREA+6, p SI PATTERN+6, DISAREA. MOVSW , DISAREA

DISAREA+6, DISAREA+2, DISAREA+8, DISAREA+4 DISAREA+10 .. DISAREA: ***---***---***---***---***--- . . . ***--PATTERN DISAREA+6 DISAREA+12 DISAREA+42

. . : ________________________________________________________________ COM-, .11.2, , . : B10INPT - 30 , . D10SCAS - SCASB , "". E10RGHT - MOVSB . ACTNLEN , : JEROME KERN OSCAR HAMMERSTEIN RICHARD ROGERS F10CLNM - STOSW . __________________________________________________________________________ page 60,132 TITLE EXRING (COM) , CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG ORG 100H BEGIN: JMP SHORT MAIN ;-------------------------------------------------------NAMEPAR LABEL BYTE ; MAXNLEN DB 31 ;. ACTNLEN DB ? ; NAMEFLD DB 31 DUP(' ') ; PROMPT DB 'Name?', '$' NAMEDSP DB 31 DUP(' '), 13, 10, '$' ROW DB 00 ;-------------------------------------------------------MAIN PROC NEAR ; MOV AX,0600H CALL Q10SCR ; SUB DX,DX ; 00,00 CALL Q20CURS A10LOOP: CALL B10INPT ; TEST ACTNLEN,0FFH ; ? (.. ) JZ A90 ; -

A90: MAIN ; : ; ----------------------------B10INPT PROC MOV AH,09 LEA DX,PROMPT ; INT 21H RET B10INPT ENDP ; : ; ----------------------D10SCAS PROC CLD MOV AL,'*' MOV CX,30 ; - 30 LEA DI,NAMEFLD REPNE SCASB ; ? JE D20 ; - , MOV AL,20H ; * AL D20: RET D10SCAS ENDP ; : ; -----------------------------------E10RGHT PROC STD SUB CH,CH MOV CL,ACTNLEN ; CX REP LEA SI,NAMEFLD ; ADD SI,CX ; DEC SI ; LEA DI,NAMEDSP+30 ; . REP MOVSB ; MOV DH,ROW MOV DL,48 CALL Q20CURS ; MOV AH,09 LEA DX,NAMEDSP ; INT 21H CMP ROW,20 ; ? JAE E20 ; INC ROW ; , JMP E90 E20: MOV AX,0601H ; CALL Q10SCR ; MOV DH,ROW ; MOV DL,00 CALL Q20CURS E90: RET E10RGHT ENDP ; : ; ---------------------F10CLNM PROC CLD

CALL CMP JE CALL CALL RET ENDP

D10SCAS AL,'*' A10LOOP E10RGHT A10LOOP

; ;? ; - ;

MOV AX,2020H MOV CX,15 ; 15 LEA DI,NAMEDSP REP STOSW RET F10CLNM ENDP ; : ; ---------------Q10SCR PROC ;AX MOV BH,30 ; ( 07 /) MOV CX,00 MOV DX,184FH INT 10H RET Q10SCR ENDP ; (/): ; ---------------------------------Q20CURS PROC ;DX MOV AH,02 SUB BH,BH INT 10H RET Q20CURS ENDP CODESG ENDS END BEGIN __________________________________________________________________________ .11.2. . ________________________________________________________________ - MOVS, STOS, CMPS SCAS ES. - (CLD) (STD) . - DI SI . , MOVS DI,SI, CMPS - SI,DI. - CX , . - REP MOVS STOS (REPE REPNE) CMPS SCAS. - c CMPSW SCASW. - . , , NAME1 10 , , LEA, NAME1+9. - NAME1+8.

________________________________________________________________ 11.1. ) MOVSB, ) LODSB ) STOSB REP. ) MOVSW, ) LODSW ) STOSW REP. 11.2. , , .11.1. ES. MOVSB MOVSW . H10SCAS NAME1 "mb". DEBUG , . 11.3. : DATASG SEGMENT CONAME PRLINE PARA DB 'SPACE EXPLORERS INC.' DB 20 DUP(' ')

, : ) ) ) ) ) CONAME PRLINE ; CONAME PRLINE ; CONAME AX; AX PRLINE+5; CONAME PRLINE ( ); ) CONAME PRLINE, . , BH. 11.4. H10SCAS (.11.1) , NAME1 "er". , "er" NAME1 : /As/se/mb/le/rs/. : ) SCASW , NAME1, - NAME1+1; ) SCASB "" "r". 11.5. , . 03, 04, 05 B4. 20 .

12 I: __________________________________________________________________________ : , , . ________________________________________________________________ , ( 10), ( 2). , , 16- , . , ,

. . ASCII . ________________________________________________________________ ADD SUB , . : 1, . , , . .12.1 ADD SUB, . B10ADD ADD , C10SUB SUB . : / / / / / -; -; -; -.; -..

__________________________________________________________________________ page 60,132 TITLE EXADD () CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG ORG 100H BEGIN: JMP SHORT MAIN ; -------------------------------------------BYTEA DB 64H ; BYTEB DB 40H BYTEC DB 16H WORDA DW 4000H WORDB DW 2000H WORDC DW 1000H ; -------------------------------------------MAIN PROC NEAR ; : CALL B10ADD ; ADD CALL C10SUB ; SUB RET MAIN ENDP ; : ; -------------------B10ADD PROC MOV AL,BYTEA MOV BL,BYTEB ADD AL,BL ; ADD AL,BYTEC ; ADD BYTEA,BL ; ADD BL,10H ;. ADD BYTEA,25H ;. RET B10ADD ENDP ; :

; --------------------C10SUB PROC MOV AX,WORDA MOV BX,WORDB SUB AX,BX ; SUB AX,WORDC ; SUB WORDA,BX ; SUB BX,1000H ;. pe. SUB WORDA,256H ;. . RET C10SUB ENDP CODESG ENDS END BEGIN __________________________________________________________________________ .12.1. ADD SUB. - , o . WORDB WORDA, DW: MOV AX,WORDA ADD AX,WORDB MOV WORDB,AX ------------- . , .. -128 +127. . , AL, , AH. , AL .60, ADD AL,20H AL - .80. "". , .80 1000 0000 . .. , +128, -128. AL AX. CBW (Convert Byte to Word ) .60 AL .0060 AX, (0) AH. ADD AX : .0080, +128: CBW ADD AX,20H ; AL AX ; AX

: 15 , -32768 +32767. , . ---------------------- +32767

. . - , , - , . __________________________________________________________________________ page 60,132 TITLE EXDBADD (COM) CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG ORG 100H BEGIN: JMP SHORT MAIN ; ------------------------------------------WORD1A DW 0123H ; WORD1B DW 0BC62H WORD2A DW 0012H WORD2B DW 553AH WORD3A DW ? WORD3B DW ? ; ------------------------------------------MAIN PROC NEAR ;0 : CALL D10DWD ; 1 CALL E10DWD ; 2 RET MAIN ENDP ; : ; ---------------------------D10DWD PROC MOV AX,WORD1B ; ADD AX,WORD2B MOV WORD3B,AX MOV AX,WORD1A ; ADC AX,WORD2A ; MOV WORD3A,AX RET D10DWD ENDP ; : ; -------------------------E10DWD PROC CLC ; MOV CX,2 ; LEA SI,WORD1B ; DWORD1 LEA DI,WORD2B ; DWORD2 LEA BX,WORD3B ; 20: MOV AX,[SI] ; AX ADC AX,[DI] ; MOV [BX],AX ; DEC SI DEC SI DEC DI DEC DI DEC BX DEC BX LOOP 20 ; RET E10DWD ENDP CODESG ENDS END BEGIN __________________________________________________________________________

.12.2. . .12.2 D10DWD (WORD1A WORD1B) (WORD2A WORD2B) (WORD3A WORD3B). : WORD1B WORD2B : BC62 553A ----1119C

- .1119C AX. 1. , , ADD ADC (ADd with Carry). , CF , 1: WORD1A WORD2A : 0123 0012 1 ---0136

DEBUG 0136 AX, p 3601 WORD3A 9C11 WORD3B. .12.2 E10DWD . . c, , . SI, DI BX 2. DEC . SUB reg,02 , .. , . , ADC. CLC (CLear Carry - ) . : 1) , 2) 3) CX . SBB (SuBtract with Borrow - ) ADC. E10DWD (.12.2) ADC SBB, . ________________________________________________________________ , , , a . , , , , . , . , , , .

+32767 +65535. . ADD SUB , . , . 249, - -7: 11111001 00000010 11111011 249 2 --251 -7 +2 --5

. , +251 -5 . , . "" , p . "" , . , : 11111100 00000101 00000001 CF 252 -4 5 +5 ---1 1 1 () OF

0

, : 01111001 00001011 10000100 121 11 --132 CF +121 +11 ----124 0 () OF

1

, : 11110110 10001001 01111111 CF OF 246 -10 137 -119 -----127 +127 1 1 () ()

________________________________________________________________ MUL, - IMUL (Integer MULtiplication - ).

. : " ". AL, . AX. p , AH. AH : AL AX :

" ". AX, - . , : () DX, () AX. , DX. AX : DX AX : . .

MUL IMUL . : MUL MULTR MULTR (DB), AL MULTR. MULTR (DW), AX MULTR. , , : MUL CL ;-: AL, . AX MUL BX ;-: AX, . DX:AX : MUL ----------------------------------- MUL (MULtiplication - ) . .12.3 C10MUL : , . MUL .80 (128) .47 (64). .2000 (8192) AX. __________________________________________________________________________ page 60,132 TITLE EXMULT (COM) CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG OR6 100H BEGIN: JMP SHORT MAIN ; ------------------------------------------BYTE1 DB 80H BYTE2 DB 40H WORD1 DW 8000H WORD2 DW 4000H ; ------------------------------------------MAIN PROC NEAR ; :

MAIN ; ; C10MUL PROC MOV MUL MOV MUL MOV SUB MUL RET C10MUL ENDP ; ; D10IMUL PROC MOV IMUL MOV IMUL MOV CBW IMUL RET D10IMUL ENDP

CALL CALL RET ENDP

C10MUL D10IMUL

; . MUL ; . IMUL

MUL: -------------------AL,BYTE1 BYTE2 AX,WORD1 WORD2 AL,BYTE1 A,A WORD1 ; * ; A ; * ; DX:AX ; * ; . . A ; DX:AX

IMUL: --------------------AL,BYTE1 BYTE2 AX,WORD1 WORD2 AL,BYTE1 WORD1 ; * ; A ; * ; . DX:AX ; * ; . . A ; . DX:AX

CODESG ENDS END BEGIN __________________________________________________________________________ .12.3. . MUL .10000000 p DX:AX. MUL BYTE1 . , AH . ( CBW p AL 0 1). - .00400000 DX:AX. : IMUL --------------------------------- IMUL (Integer MULtiplication - ) . .12.3 D10IMUL , C10MUL, MUL IMUL. IMUL .80 ( ) .40 ( ). - .E000 AX. , MUL .2000, MUL IMUL. MUL .80 +128, IMUL - -128. -128 +64 -8192 .E000. ( .000 ). IMUL .8000 ( ) .2000 ( ). .F0000000 DX:AX

o . IMUL BYTE1 AX. , CBW AH: .80 p AL .FF80 AX. WORD1 , . : .00400000 DX:AX - , MUL, . , , MUL IMUL . , , MUL , IMUL - . , DEBUG . : 2 (2,4,8 ..) . 1 CL. , AL AX: 2: 8: SHL AL,1 MOV CL,3 SHL AX,CL

----------------------- : " " " ". , +32767. . . : 1365 12 ----2730 1365 ----16380 , . 13 65 12 , c : 13 12 --26 13 --156 65 12 --130 65 --780

, 13 , 15600: 15600

+780 ----16380 , ( ) . . E10XMUL .12.4 . , MULTCND, , .3206 .2521. (DW) (DD) MOV, AX. MULTPLR .6400. , PRODUCT, . MUL MULTPLR c MULTCND; - .0E80 E400 PRODUCT+2 PRODUCT+4. MUL MULTPLR MULTCND, . 138A 5800. : 1: 2: : 0000 0E80 E400 138A 5800 -------------138A 6680 E400

ADD , c ADC (ADd with Carry). p 8086/8088, PRODUCT 8A13 8066 00E4. , PRODUCT 0000. __________________________________________________________________________ TITLE EXDWMUL - CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG ORG 100H BEGIN: JMP SHORT MAIN ; --------------------------------------------MULTCND DW 3206H ; DW 2521H MULTPLR DW 6400H DW 0A26H PRODUCT DW 0 DW 0 DW 0 DW 0 ; --------------------------------------------MAIN PROC NEAR ; CALL E10XMUL ; 1- CALL Z10ZERO ; CALL F10XMUL ; 2- RET MAIN ENDP ; : ; ----------------------------------------------E10XMUL PROC MOV AX,MULTCND+2 ; MUL MULTPLR ;

MOV MOV

PRODUCT+4,AX PRODUCT+2,DX

;

MOV AX,MULTCND ; MUL MULTPLR ; ADD PRODUCT+2,AX ; ADC PRODUCT,DX RET E10XMUL ENDP ; : ; -------------------------------------------F10XMUL PROC MOV AX,MULTCND+2 ;-2 MUL MULTPLR+2 ; * -2 MOV PRODUCT+6,AX ; MOV PRODUCT+4,DX MOV MUL ADD ADC ADC AX,MULTCND+2 MULTPLR PRODUCT+4,AX PRODUCT+6,DX PRODUCT,00 ;-2 ; * -1 ; ;

MOV AX,MULTCND ;-1 MUL MULTPLR+2 ; * -2 ADD PRODUCT+4,AX ; ADC PRODUCT+6,DX ADC PRODUCT,00 ; MOV AX,MULTCND ;-1 MUL MULTPLR ; * -1 ADD PRODUCT+2,AX ; ADC PRODUCT,DX RET F10XMUL ENDP ; : ; ---------------------------------------Z10XMUL PROC MOV PRODUCT,0000 MOV PRODUCT+2,0000 MOV PRODUCT+4,0000 MOV PRODUCT+6,0000 RET Z10XMUL ENDP CODESG ENDS END BEGIN __________________________________________________________________________ .12.4. . " ". : 2 2 1 2 1 2

1

1

DX AX . F10XMUL .12.4. MULTCND .3206 2521, MULTPLR - .6400 0A26. PRODUCT, . , , ADD/ADC ADC, 0 PRODUCT. , ADC , . ADC 0, , 1, . ADD/ADC ADC, PRODUCT . 138A 687C 8E5C CCE6 PRODUCT . DEBUG. DX:AX ________________________________________________________________ p DX:AX . , (, , ) CX. , . MOV C20: SHL SHL A