Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 367

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 | 7 6 5 4 3 2 1 0
: 0 1 0 1 0 0 0 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 ( )

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


.

(
).
.

. , DOS DEBUG
,

.

(0 - , 1 - ).

(0 - , 1 -
).
3- 8-

.
8- (1 0 - ).
,
,
.


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-+
<-+--
|
L------------------ |
__________________________________________________________________________

.1.3. .
: ,
: -,
,
/. -,
1 .
.
,
. 4 ,
, " " ,
.
,
. c

/.
. ,
.
, c .

------- .
() ROM (read-only memory). ROM
, p ( )
. ROM
"" .
ROM
: ROM p
(RAM)
(, DOS).
ROM BIOS (Basic Input/Output System)
/, . (Basic -
, ). ROM
.
, , RAM
(Random Access Memory) , .. ,
, . RAM
.
RAM ,
.

e
, ROM DOS RAM.
( DOS, DOS).
o DOS
DOS .
RAM. DOS
, ()
. RAM

, .
RAM.
()
RAM.
.
64 ,
RAM : 4 64 = 256.
. , c,

.
RAM , ROM -
. ,
.1.4, 256 RAM
. RAM ,
640 ,
DOS. ROM 768 o
/ c
. ROM, c 960
, ,
.
__________________________________________________________________________

.
. -----------------------------
0K
00000 RAM 256K


+----------------------------+
256K
40000 RAM 384K -
I/O
+----------------------------+
640K
A0000 RAM 128K /


+----------------------------+
768K
C0000 ROM 192K


+----------------------------+
960K
F0000 ROM 64K


L----------------------------__________________________________________________________________________
.1.4. .
RAM - .
.
00 - .
. 1025.
. - 0401 .
c - 04 - 01.
:
, - . ,
.0401 5612 5613,
:
|01|04|
| |
5612, 5613

,
.
, a,
.

________________________________________________________________
- ,
. .
- ,
.
- ASCII .
- , : 0
1, .
- .
, 1111 2**3 + 2**2 + 2**1 + 2**0, 15.
- :
+1.
-
. . 0-9 A-F
0000 1111.
- :
,
.
.
- , ,
.
- ROM () RAM ()
.
- ()
.

________________________________________________________________
1.1. ASCII
. ( 1 ):
) P, ) p, ) #, ) 5.
1.2. : ) 5, ) 13,
) 21, ) 27.
1.3. C :
) 00010101
00001101
--------

) 00111110
00101001
--------

) 00011111
00000001
--------

1.4. : )
00010011, ) 00111100, ) 00111001.
1.5.
: ) 11001000, ) 10111101, ) 10000000.

1.6. . ) ASCII Q, ) ASCII


7, ) 01011101, ) 01110111.
1.7. . :
) 23A6
0022
----

) 51FD
3
----

) 7779
887
----

) EABE
26C4
----

1.8. . .
.2.
, .
: ) 19, ) 33, ) 89, ) 255, ) 4095, ) 63398.
1.9. ,
, .

1.10. : )
, ) , ) , )
, ) , )
?
1.11.
?

2

__________________________________________________________________________
: ,
.

________________________________________________________________
DOS
DEBUG, ,
.

.

.
.
,
.
.
c
. - IBM PC
c DOS.

________________________________________________________________
DOS A.
, ; e ,
Ctrl Alt Del.
DOS ,

, ,
A C ( ).
, , Return.
,
.

________________________________________________________________

DOS DEBUG. DEBUG
Return, DEBUG
.
, DEBUG
. , o

, D - .
1. .
.
,
.
.413 414 DEBUG ,
:
400 - , 40
( )
13 - . ,
:
D 40:13 ( Return)
, ,
,
.
. , . .
. .

. .

8000
0001
8001
0002
8002

0080
0100
0180
0200
0280

. ()
128
256
384
512
640

2. . ""
ROM . FE000. , :
D FE00:0 ( Return)

.
3. ROM BIOS. ROM BIOS mm/dd/yy
. FFFF5.
D FFFF:05 ( Return)
()
.

, , D (Display),
.
, D, - DEBUG
, .
DOS Q
(Quit).

DEBUG

.
:
________________________________________________________________
-
, .
:

B82301
052500
8BD8
03D8
8BCB
2BC8
90
CB

. 0123 AX.
. 0025 AX.
AX BX.
AX BX.
BX CX.
AX AX ( AX).
.
DOS.

, : ,
.
.

. , ,
. ,
MOV - .B8, - .8B.

. c
.
- o DEBUG Return.
DEBUG
. Ctrl
PrtSc .

, :
E CS:100 B8 23 01 05 25 00 ( Return)
E Enter (). CS:100 ,
, - .100 (256)
. ( DEBUG).
E p
, CS:100 CS:105.
Enter:
E CS:106 8B D8 03 D8 8B CB (Return)
, CS:106 107, 108,
109, 10A 10B. Enter:
E CS:10C 2B C8 2B C0 90 CB (Return)
, CS:10C 10D, 10E, 10F, 110 111.

. ,
, .
- . p.2.1
, E.
o.
R .
. ,
,
AX=0000, BX=0000, ...
DOS
.2.1. IP (
) IP=0100,
100 . (
E CS:100 .)
.2.1 :
NV UP DI PL NZ NA PO NC
: , ,
, , , ,
.
.
__________________________________________________________________________
D>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,

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

; (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.
__________________________________________________________________________
CODESG
BEGIN

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-.
,
- .

,
.


________________________________________________________________
.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
;

BEGIN

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
;

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')

0000
0000 0C [
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

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

Stop

Length

Name

00000H
00020H

00015H
0007FH

0016H
0060H

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(?)

0000
0000 20 [
????
]
0040
0000

STACKSG ENDS
;------------------------------------------------DATASG SEGMENT PARA 'Data'

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)

Cref-1

BEGIN. . . . . . . . . . . .

18#

30

32

CODE . . . . . . . . . . . .
CODESG . . . . . . . . . . .

17
17#

19

31

DATA . . . . . . . . . . . .
DATASG . . . . . . . . . . .

11
11#

15

19

FLDA . . . . . . . . . . . .
FLDB . . . . . . . . . . . .
FLDC . . . . . . . . . . . .

12#
13#
14#

26
27
28

STACK. . . . . . . . . . . .
STACKSG. . . . . . . . . . .

4
4#

23

19

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
.
__________________________________________________________________________

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

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) ;

;
;
FLD1DW
FLD2DW
FLD3DW
FLD4DW

0030
0032
0034
0036

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

004A
004E
0052
0056
005A

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

FLD5DW DW

;
;
FLD1DD
FLD2DD
FLD3DD
FLD4DD
31 00 FLD5DD

00
00
00
00

DW
DW
DW
DW

DD
DD
DD
DD
DD

0062
006A

;
;
???????????????? 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

0072

007A
0084

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

;.

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

008E

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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Type
BYTE
DWORD
QWORD
TBYTE
WORD
BYTE
DWORD
QWORD
TBYTE
WORD
BYTE
DWORD
QWORD
WORD
BYTE
DWORD
WORD
BYTE
DWORD
WORD

L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L
L

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

6E
4A
00
03
00
11
00
00

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

20
02
00
00
00
00
00
00

43
46
00
07
00
0E
47
00

6F
45
00
00
00
00
4D
00

6D
42
00
08
00
00
00
00

70
03
00
00
00
00
00
00

75
4D
00
09
43
31
00
00

74
41
00
00
50
00
00
00

.Personal Comput
.er Y.JAN.FEB.MA
R32654..........
..Y.!...........
..............CP
..<...........1.
..........GM....
..<.............

50
00
00
00
00
00
00

00
00
00
00
00
00
00

00-00
00-0A
00-0A
00-0A
00-0A
00-0A
00-0A

00
0E
0E
0E
0E
0E
0E

00
00
00
00
00
00
00

00
00
00
00
00
00
00

00
3E
FF
63
C3
C3
C3

00
63
DB
63
C3
C3
C3

33
63
99
63
C3
C3
66

33
30
18
63
C3
C3
3C

....CP........33
>633s.......>cc0
..cc>...........
....<.......cccc
cccc>...........
..f<............
...ff.........f<

1421:00F0 18 3C 66 C3 C3 00 00 00-0A 0E 00 00 C3 C3 C3 66 .<f............f


-Q
__________________________________________________________________________
.5.2. .
, ,
, "Personal Computer".

________________________________________________________________
. 2.1 2
.
MOV

AX,0123H

. 0123 AX.
B82301, B8 "
AX", a
. :
, - .
,

o c
MOV, ,
:
:

AMT1 DW 0123H
MOV AX,AMT1


--------------------------------- .
, ,
AL :
MOV AL,0123H ()
, , ,

ADD AX,25H

( )

, 0025
2500.

------------------------- , p,
0123H; , , 291 (
.0123); , , 100100011 (
. 0123).
,
:
:

MOV, CMP.

:
:
:

ADC, ADD, SBB, SUB.


RCL, RCR, ROL, ROR, SHL, SAR, SHR.
AND, OR, TEST, XOR.

.5.3
.
, .
,
.
__________________________________________________________________________

0000
0000 ??
0001 ????
0003
0000
0000

TITLE
;
;
DATASG
FLD1
FLD2
DATASG

page
60,132
EXIMM (EXE) .
( ,
)
SEGMENT PARA 'Data'
DB
?
DW
?
ENDS

CODESG SEGMENT PARA 'Code'


BEGIN PROC
FAR
ASSUME CS:CODESG,DS:DATASG
;
;

0000 BB 0113
0003 3C 19

MOV
CMP

:
-----------------------------BX,275 ;
AL,H
;

ADC
ADD
SBB
SUB

:
----------------------AL,5
;
BH,12
;
AL,5
;
FLD1,5 ;

RCL
RCR
ROL
ROR
SAL
SAR
SHR

( 1 ):
--------------------------------BL,1
;
AH,1
;
FID2,1 ;
AL,1
;
CX,1
;
BX,1
;.
FLD1,1 ;

;
;
0005
0007
000A
000C

14
80
1C
80

05
C7 0C
05
2E 000 R 05
;
;

0011
0013
0015
0019
001B
001D
001F

D0
D0
D1
D0
D1
D1
D0

D3
DC
06 0001 R
C8
E1
FB
2E 0000 R
;
;

0023
0025
0028
002B
0030
0030

24
80
F6
80

2C
CF 2A
C3 7A
36 0000 R 23

:
------------------AL,00101100B ;AND ()
BH,2AH ;OR ()
BL,7AH ;TEST ()
FLD1,23H ;XOR ()

AND
OR
TEST
OR
BEGIN ENDP
CODESG ENDS
END
__________________________________________________________________________
.5.3. .

, ,
(. .7) (. .11).
EQU
________________________________________________________________
EQU , ,
.
, EQU:
TIMES

EQU 10

, TIMES,
. , -

TIMES 10. ,

FIELDA

DB

TIMES DUP (?)

FIELDA

DB

10 DUP (?)

, EQU,
, :
COUNTR

EQU 05
...
MOV CX,COUNTR

COUNTR MOV 05, c


,
MOV CX,05

; 05

EQU ,
, COUNTR.
,
EQU. , EQU
, . EQU
:
1.
2.

TP EQU TOTALPAY
MPY EQU MUL

, p
TOTALPAY. , TP,
TOTALPAY.
MPY MUL.

________________________________________________________________
-
. ,
EMPWAGE.
- DB,

(-).
- . .
, , AX 25
. 25:
ADD AX,25
ADD AX,25H

; 25
; 37

- , DW, DD DQ
.
- DB (AL, AH, BL
..) DW (AX, BX, CX ..).
, DD DQ .
-

: - (AL,
BH),
- (AX, BX).

________________________________________________________________
5.1. ,
: ) DW, ) DD, ) DT, ) DB, ) DQ?
5.2. TITLE1,
RGB Electronics.

5.3.
FLDA FLDE:
a) ,
.

115;
b) , .
25;
c) , ;
d) ,

25;
e) DW, 16, 19,
20, 27, 30.
5.4. . ) DB '26' )
DB 26.
5.5. . ) DB 26H, ) DW
2645H, ) DD 25733AH, ) DQ 25733AH.
5.6. :
)
)
)
)
)
)

320 AX;
FLDB ;
. 40 BX;
. 40 CX;
FLDB ;
CH .

5.7.
5.2, 5.3 5.6. .

.
DEBUG. LST- (),
. MODE
LPT1:132,6 .

6
COM-
__________________________________________________________________________
: COM-
COM-.

________________________________________________________________
,
EXE-. LINK
EXE-, ()
p 512 . ( .22
).
COM-.
COM- COMMAND.COM. EXE2BIN.COM
DOS EXE- COM-.
BIN () ,

" EXE in (EXE-to-BIN)". in-

COM-.
EXE COM-
________________________________________________________________
, EXE2BIN EXE- COM-,
c ,

EXE- , COM-.
. EXE-
, COM-
64. COM- , EXE-;
- COM- 512-
EXE-.



COM-,

. EXE- ,
COM- .
,
.

. EXE
, DS .
COM- .
.
. 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.
- 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 .

,
.
__________________________________________________________________________
page 60,132
TITLE XCOM1 COM-
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG
100H
; PSP
BEGIN: JMP
MAIN
;
; --------------------------------------------------FLDA
DW
250
;
FLDB
DW
125
FLDC
DW
?
; --------------------------------------------------MAIN
PROC
NEAR
MOV
AX,FLDA
; 0250 AX
ADD
AX,FLDB
; 0125 AX
MOV
FLDC,AX
; FLDC
RET
; DOS
MAIN
ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.6.1. COM-.
COM-
________________________________________________________________
COM- DOS
o p.
64 , DOS
SP c - .FFFE.
. 64 ,
DOS . DOS
.

. DIR p
.

COM-.

________________________________________________________________
COM-
. EXE2BIN o,

. 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-.
6.5. 4.6 COM-,
DEBUG.

7

__________________________________________________________________________
: (
) .

________________________________________________________________

. ,
.
,
, ,
, .

- .
,

.
.
,

.
( ):
:
:
:
:

JMP
LOOP
Jnnn (,,)
CALL

, : SHORT, NEAR FAR.


SHORT , p
. NEAR FAR (CALL)
, , SHORT.
IP; FAR
CS.
JMP
________________________________________________________________

JMP. , ..
.
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. ,
.
- .
__________________________________________________________________________

0000
0100
0100
0100 B8 0001

page 60,132
TITLE EXJUMP (COM) JMP
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H
MAIN

PROC
MOV

NEAR
AX,01

; AX,

0103
0106
0109
0109
010C
010E
0110
0112
0112

BB 0001
B9 0001

MOV
MOV

BX,01
CX,01

;
;

BX,
CX

A20:
05
03
D1
EB

0001
D8
E1
F7

ADD
AX,01
; 01 AX
ADD
BX,AX
; 01 BX
SHL
CX,1
; CX
JMP
A20
; A20
MAIN
ENDP
CODESG ENDS
END
MAIN
__________________________________________________________________________
.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):
:
JMP:
:

.
274
-9
--265

.
112
F7 ( )
--109

- .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

CX 1. CX ,
, , CX 0,
LOOP .
__________________________________________________________________________
page 60,132
TITLE EXLOOP (COM) LOOP
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H

0000
0100
0100
0100
0103
0106
0109
010C
010C
010D
010F
0111

BEGIN
B8
BB
BA
B9

0001
0001
0001
000A

PROC
MOV
MOV
MOV
MOV

NEAR
AX,01
BX,01
DX,01
CX,10

INC
ADD
SHL
LOOP

AX
BX,AX
DX,1
A20

; AX,
;
BX,
;
DX
;

A20:
40
03 D8
D1 E2
E2 F9

0113 C3
0114
0114

; 01 AX
; AX BX
; DX
; CX
; ,
;

RET
ENDP
ENDS
END
BEGIN
__________________________________________________________________________
BEGIN
CODESG

.7.2. 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).

________________________________________________________________

. p 16 ,
.
,
.
( ):
:
:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
* * * * 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) - .
.
SI DI,
, -
, (. .11).
OF (Overflow Flag) - .
, .. ()
.
: CMP

AF, CF, OF, PF, SF, ZF. ,


.
BX :

B50:

CMP BX,00
; BX
JZ 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.
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
JNE/JNZ
JA/JNBE
JAE/JNB
JB/JNAE
JBE/JNA

,
,
,
,
,
,

/
/
/
/
/
/

ZF
ZF
ZF,CF
CF
CF
CF,AF

.
, JB JNAE ,
JB , JNAE.


-----------------------------

JE/JZ
JNE/JNZ
JG/JNLE
JGE/JNL
JL/JNGE
JLE/JNG

,
,
,
,
,
,

/
/
/
/
/
/

ZF
ZF
ZF,SF,OF
SF,OF
SF,OF
ZF,SF,OF

(JE/JZ)
(JNE/JNZ)
. / .

------------------------------------


JS
JNS
JC
JNC
JO
JNO
JP/JPE
JNP/JP

,
,
,
,
,
,
,
,

()
()
( JB)




SF
SF
CF
CF
OF
OF
PF
PF


CX .
p
.
JCXZ ,
CX .
. ,
, ,
- , .
, .
,
. , JAE JGE
, .
CALL
________________________________________________________________
o
, :
BEGIN

PROC FAR
.
.

BEGIN

ENDP

FAR ,
, ENDP .
, , ,
PROC ENDP.

.7.3.
__________________________________________________________________________
-------------------------

CODESG SEGMENT PARA


+------------------------+
BEGIN PROC
FAR

CALL
B10

CALL
C10

RET

BEGIN ENDP

+------------------------+
B10
PROC
NEAR

RET

B10
ENDP

+------------------------+
C10
PROC
NEAR

RET

C10
ENDP

+------------------------+
CODESG ENDS

END
BEGIN
L------------------------__________________________________________________________________________
.7.3. .
:
- PROC B10 C10 NEAR
,
. ,
NEAR.
-
ENDP .
- BEGIN :
CALL B10 CALL C10. CALL
B10 .
RET,
CALL B10. CALL C10,
RET.
- RET .
BEGIN B10 C10,
BEGIN. BEGIN
DOS RET
DOS. B10

RET, B10
C10. C10
RET, ,
C10 .

. , CALL

, -128 +127 .
NEAR
.
CALL
RET .

________________________________________________________________

, , - 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.
.
__________________________________________________________________________
0000
0000

20 [ ???? ]

TITLE CALLPROC (EXE)


STACKSG SEGMENT PARA STACK 'Stack'
DW
32 DUP(?)

0040

STACKG ENDS

0000
0000

CODESG SEGMENT PARA 'Code'


BEGIN PROC
FAR
ASSUME CS:CODESG,SS:STACKSG
0000 1E
PUSH
DS
0001 2B C0
SUB
AX,AX
0003 50
PUSH
AX
0004 E8 0008 R
CALL
B10
; B10
;
...
0007 CB
RET
;
0008
BEGIN ENDP
;------------------------------------0008
B10
PROC
0008 E8 000C R
CALL
C10
; C10
;
...
000B C3
RET
;
000C
B10
ENDP
;
;--------------------------------------------000C
C10
PROC
;
...
000C C3
RET
;
000D
C10
ENDP
;
;--------------------------------------------000D
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.7.4. .

. PUSH SP 2
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.
RET B10 0007
(4B00+3A), IP SP 2.
0007
. RET 0007 ,
FAR.
.
DEBUG.
0034 003F SP:

:
PUSH DS ( 049F)
PUSH AX ( 0000)
CALL B10 ( 0007)
CALL C10 ( 000B)

0B00

SP

0700
0700

0000
0000
0000

049F
049F
049F
049F

0040
003E
003C
003A
0038

RET
RET

( 000B)
( 0007)
|
:
0034

|
0036

|
0038

0700

|
003A

0000
0000
|
003C

049F
049F
|
003E

003A
003C

. -,
, 0007 0700.
-, DEBUG
, IP,
.
:
________________________________________________________________

c , ,
o
. p

.
, . .11

.
EXE-, .7.5, c
, NAME1, NAME2, NAME3. -
NAME1 NAME2 NAME2
NAME3. ,
MOV .
.
__________________________________________________________________________
page
65,132
TITLE EXMOVE (EXE)
;-----------------------------------------------------STACKSG SEGMENT PARA STACK 'Stack'
DW
32 DUP(?)
STACKSG ENDS
;-----------------------------------------------------DATASG SEGMENT PARA 'Data'
NAME1 DB
'ABCDEFGHI'
NAME2 DB
'JKLMNOPQR'
NAME3 DB
'STUVWXYZ*'
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
B10MOVE
; JUMP
CALL
C10MOVE
; CALL
RET
;
BEGIN ENDP

;
;
;
B10MOVE

(JUMP-),
:
----------------------------------------PROC
LEA
SI,NAME1
;
LEA
DI,NAME2
; NAME1 NAME2
MOV
CX,09
; 9

B20:
MOV
MOV
INC
INC
DEC
JNZ
RET
B10MOVE ENDP
;
;
;
C10MOVE

AL,[SI]
[DI],AL
SI
DI
CX
B20

; NAME1
; NAME2
; NAME1
; NAME2
;
; > 0? -
; = 0,
;

(LOOP-),
LOOP:
-----------------------------------------;
PROC
LEA
SI,NAME2
;
LEA
DI,NAME3
; NAME2 NAME3
MOV
CX,09
; 9

C20
MOV
MOV
INC
INC
LOOP

AL,[SI]
[DI],AL
DI
SI
C20

; NAME2
; NAME3
; NAME2
; NAME3
; ,
; ,
; = 0,
;

RET
C10MOVE ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.7.5. .
BEGIN
B10MOVE C10MOVE. B10MOVE
NAME1 NAME2. ,
NAME1
, ..:
NAME1:
NAME2:

A B C D E F G H I
| | | | | | | | |
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).
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
0101
0011
---0001

OR
0101
0011
---0111

XOR
0101
0011
---0110

, , AL 1100

0101, BH 0101 1100:


1.
2.
3.
4.
5.
6.

AND
OR
XOR
AND
AND
OR

AL,BH
BH,AL
AL,AL
AL,00
AL,0FH
CL,CL

;
;
;
;
;
;

AL 0100 0100
BH 1101 1101
AL 0000 0000
AL 0000 0000
AL 0000 0101
SF ZF

3 4 . 5
AL. CMP
, OR :
1.
2.

OR
JZ
OR
JS

CX,CX
...
CX,CX
...

;
;,
;
;,

CX

CX

TEST AND,
, . :
1.
2.
3.

TEST
JNZ
TEST
JNZ
TEST
JZ

BL,11110000B
...
AL,00000001B
...
DX,OFFH
...

; BL
; ?
; AL
; ?
; DX
; ?

NOT p
, : ,
- . , , p AL 1100 0101,
NOT AL 0011 1010. .
NOT NEG,
,
(. " "
.1.).
:
________________________________________________________________

. , ,
, .
,
(, YES yes)
. A Z . 41
5A, a z . 61 7A.
p , 0 1
:
: 76543210
A: 01000001
Z: 01011010

: 76543210
a: 01100001
z: 01111010

COM-, .7.6,
TITLEX , TITLEX+1.
BX TITLEX+1
AH, TITLEX+1.
.61 7A, AND 5 0:

AND AH,11011111B
, ( a z), .
TITLEX,
BX
.
__________________________________________________________________________
0000
0001
0001 EB 1C 90
0003 43
20
70
65
65

68
74
65
20
72

61
6F
72
6C
73

6E
20
63
65

67
75
61
74

TITLE CASE
(COM) .
CODESG SEGMENT PARA 'CODE'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H
BEGIN: JMP
MAIN
; ------------------------------------------65 TITLEX DB
'Change to uppercase letters'
70
73
74

; ------------------------------------------MAIN
PROC
NEAR
8D 1E 0104 R
LEA
BX,TITLEX+1 ; .
B9 001F
MOV
CX,31
;
B20:
8A 27
MOV
AH,[BX]
; TITLEX
80 FC 61
CMP
AH,61H
;
72 0A
JB
B30
;
80 FC 7A
CMP
AH,7AH
;
77 05
JA
B30
; ?
80 E4 DF
AND
AH,11011111B ; -
88 27
MOV
[BX],AH
; TITLEX
B30:
43
INC
BX
;
E2 EC
LOOP
B20
; 31
C3
RET
MAIN
ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
011E
011E
0122
0125
0125
0127
012A
012C
012F
0131
0134
0136
0136
0137
0139
013A
013A

.7.6. .
BX
.
SI DI.

________________________________________________________________
,
, :
-

;
;
;
8 ( ) 16 ( )

- ( ) ( ).
1 c
, 1 CL.

--------------- CF
. c:
SHR
SHL
SAR
SAL

; ()
; ()
;
;

SHR:
MOV
MOV
SHR
SHR

CL,03
AX,10110111B
AX,1
AX,CL

;
AX:
; 10110111
; 01011011
; 00001011

; 1
; 3

SHR AX 1 .
CF,
AX . c
AX . CF 1,
1, 0, AX .
SAR:
MOV
MOV
SAR
SAR

CL,03
AX,10110111B
AX,1
AX,CL

;
AX:
; 10110111
; 11011011
; 11111011

; 1
; 3

SAR SHR:
. ,
.
.
. p,
SHL SAL .
, 2. ,
. (, 5
7) (2 3,
)

CF 1. ,
2 , ,
CL 2.
, CF JC
(, ).

---------------------------- ,
.
:
ROR ;
ROL ;

RCR ;
RCL ;

ROR:
MOV
MOV
ROR
ROR

CL,03
BX,10110111B
BX,1
BX,CL

;
BX:
; 10110111
; 11011011
; 01111011

; 1
; 3

ROR
BX .
ROR .
RCR RCL CF.
CF, CF
.
,
. , 32-

DX:AX , 16 DX, -
AX. 2 c :
SHL AX,1
RCL DX,1

;
; DX:AX 2

SHL AX ,
CF. RCL
DX CF.

________________________________________________________________
:
1. ,
.
2.
. ,
p ( .7.5), c
.
, LOOP.
,
:

:


:


1
1:
,
,

3. ,
. 25 ( )
.
4. .
"
" .
5. ,
,
. (,
XLAT, ).
6. ,
.

LEA, SI DI, .
,
.

________________________________________________________________
- (, B20:)
NEAR. .
- LOOP
-128 +127 .
. . 01 7F +1 +127,
. FF 80 -1 +128.
1 4 ,
.
( 50 ).
- LOOP,
CX
. LOOP ,
.
- ,
, . ,
, , MOV,
. , ,
c
, .
-
.
- CALL,
- RET. , ,
, ,
RET .
,
- COM-.
- . :
MOV AX,SI
MOV AX,[SI]
MOV AX SI.

MOV
SI.
-
,
.

________________________________________________________________
7.1. p
JMP, LOOP ?
?
7.2. JMP .0624. ,
. JMP: ) 27, ) 6B, ) C6.
7.3. 12 : 1, 1, 2, 3, 5,
8, 13,... (
). LOOP.
,
DEBUG
.
7.4. , AX BX , a CX
DX - . CMP ( )
:
)
)
)
)
)
)

DX , CX?
BX , AX?
CX ?
?
BX , AX?
DX , CX?

7.5.
?
a)
)
)
)
)

;
;
;
;
.

7.6. ,
.7.4, BEGIN RET?
7.7. PROC p
FAR NEAR?
7.8. ?
7.9. EXE- A10 B10, B10 C10,
C10 D10. , DOS,
?
7.10. , BL 11100011
BOONO 01111001. BL
: ) XOR BL,BOONO; ) AND BL,BOONO; ) OR BL,BOONO; ) XOR
BL,11111111B; ) AND BL,00000000B.

7.11. .7.6 : )
TITLEX ; ) .
7.12. , DX 10111001 10111001,
p CL - 03. DX
: ) SHR DX,1; ) SHR DX,CL; ) SHL DX,CL; ) SHL DL,1;
) ROR DX,CL; ) ROR DL,CL; ) SAL DH,1.
7.13. , ,
AX 10.
7.14. , "
", DX:AX 2.
: ) 4; ) 4; )
48 DX:AX:BX 2.

8
I:
__________________________________________________________________________
: ,
.

________________________________________________________________
,
o
(
)

.
. c
,
,
.
,
, ASCII
.
INT ().
(
) .

.

INT 10H,
BIOS.

INT 21H,
DOS. ,
,
Return. p DOS INT 21H

BIOS.
(-, BW),
. . 9 10
.
: INT
________________________________________________________________
INT , DOS

BIOS
.
.
INT
:
- 2
;
- TF IF;
- 2
CS ;
- 2
;
- ;
-
, INT.
.

.
: BIOS INT 10H
DOS INT 21H .
INT 10H
INT 21H.

________________________________________________________________

.
, , 25 ( 0 24) 80
( 0 79).
:
________________________________________________________
.
.
______________
______________



________________________________________________________

00
00
00
00

00
79
00
4F

12
39/40
00
27/28

24
00
18
00

24
79
18
4F
________________________________________________________
INT 10H
. 5-
12- :
MOV
MOV
MOV
MOV
INT

AH,02
BH,00
DH,05
DL,12
10H

;
; 0
; 05
; 12
; BIOS

02 AH INT 10H
. DX,
( ) BH ( 0).

.
MOV c . :
MOV DX,050CH ; 5, 12

________________________________________________________________

("")
. c ,
.
.
DX, 07 BH 0600H AX.
:
MOV AX,0600H ;AH 06 ()
;AL 00 ( )
MOV BH,07
; (/)
MOV CX,0000 ;
MOV DX,184FH ;
INT 10H
; BIOS
06 AH INT 10H
. ;
() .
, . 184F,

.
-
,
.
: DOS
________________________________________________________________

,
. ,
DOS, p ,
DOS 2.0. DOS
, DOS
. DOS
, ,
.
: DOS
________________________________________________________________
DOS
, AH 09 (
DOS) DOS INT 21H.
o ($),
:
NAMPRMP

DB
.

' ?','$'

.
MOV AH,09
LEA DX,NAMPRMP
INT 21H

;
; .
; DOS

"$" c
( ), : ' ?$',
DB '$'. ,
"$". ,

,
, "$" .
LEA NAMPRMP DX
DOS . NAMPRMP, DX
LEA, o,
DOS DS DX (DS:DX).
: ASCII
________________________________________________________________
256 ASCII ,
. . 00 FF
, ASCII
. 20.
.8.1 COM-,
ASCII. ; B10CLR,
C10SET D10DISP. B10CLR , C10SET
00,00. D10DISP

CTR, 00
y 1 ,
. FF.
__________________________________________________________________________
page
60,132
TITLE ALLASC (COM) ASCII- 00-FF
CODESC SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:NOTHING
ORG
100H
BEGIN: JMP
SHORT MAIN
CTR
DB
00,'S'
;
;
MAIN

PROC
CALL
CALL
CALL
RET
ENDP

MAIN
;
;
B10CLR PROC
MOV
MOV
MOV
MOV
INT
RET
B10CLR ENDP

:
-----------------NEAR
B10CDR
;
C10SET
;
D10DISP
;
:
-------------AX,0600H
BH,07
CX,0000
DX,184FH
10H

;
;

;
;
C10SET PROC
MOV
MOV
MOV
INT
RET
C10SET ENDP
;
;
D10DISP PROC
MOV
LEA
D20
MOV
INT
INC
LOOP

00,00:
------------------------AN,02
BN,00
DX,0000
10H
ASCII :
----------------------------CX,256
DX,CTR

;256
;

AH,09
21H
CTR
D20

;
;
; CX,
; ,
;

RET
D10DISP ENDP

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.8.1. ASCII

.08 .0D c,
. :
(.8.1), ,
COM-. , ,
:ASCII.COM.
(.00),
" " (.01 02) (.03,
04 05). 07 . 06
"", .08 0D
. 0D " "
(). .0E - .
.7F .
.
,
.08 0D. , o , ,
.08 ( ) 0D ( ):
CMP
JB
CMP
JBE

CTR,08H
D30
CTR,0DH
D40

; 08?
; -
; / 0D?
; -

D30:
MOV AH,40H
...
INT 21H
D40:
INC CTR

; < 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

Q10CLR

MOV
CALL
CALL
CALL
CALL
CMP
JE
CALL

DX,0000
Q20CURS
B10PRMP
D10INPT
Q10CLR
NAMELEN,00
A30
E10CODE

; 00,00

CALL
JMP
A30:

F10CENT
A20LOOP

A20LOOP:

RET
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

;
;
;
; ?
; -
;
; '$'
;
; 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

, ADAMS
Return
ADAMS.
:

MOV CX,20
MOV SI,0000

; 20
;

MOV NAMEFLD[si],20H
INC SI
LOOP B30

;
;
;20

B30:

SI DI BX.
, ,
. , NAMEFLD
DB (),
, WORD, a
PTR (), :
MOV CX,10
LEA SI,NAMEFLD

; 10
;

B30:
MOV
INC
INC
LOOP

WORD PTR[SI],2020H ;
SI
;
SI
;
B30
;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.
,

________________________________________________________________
,
:

CR
LF
TAB

ASCII

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

D10INPT
ACTNLEN,00
A30
AX,0600H
Q10CLR

;
; ? (.. )

CALL
JMP
ENDP

E10NAME
A20LOOP

; , ,
;

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

:
-------------------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

;
;
;
;
;
;
; n
; ?
;

AX,0601H
Q10CLR

; -;

:
---------------------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

C0

0
0
1
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

;
;
; 0 (, , .)
; BIOS
, ,
.
AH=0BH
,
,
, .

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:

LABEL2:

JCXZ
MOV
MOV
INC/DEC
UNC/DEC
LOOP
...

LABEL2
AL,[SI]
[DI],AL
DI
SI
LABEL1

;
;

.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

INC/DEC
LOOP
...

LABEL2:

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
; -

CALL
CMP
JE
CALL
CALL
RET
ENDP

D10SCAS
AL,'*'
A10LOOP
E10RGHT
A10LOOP

;
;?
; -
;

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

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

,
:
01111001
00001011
10000100

121
11
--132

CF
+121
+11
----124
0
()

OF


, :
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
; :

CALL
CALL
RET
ENDP

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

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

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
ADC
LOOP
MOV
D20: SHR
SHR
JNC
OR
D30: LOOP

4
CX,04
; 4
DX,1
; DX 1
AX,1
; AX 1
DX,00
;
C20
;
4
CX,04
; 4
AX,1
; AX 1
DX,1
; DX 1
D30
; ,
AH,10000000B ; 1 AH
D20
;

,
. CL.
4 ,
:
MOV
SHL
MOV
SHL
SHL
OR

CL,04
DX,CL
BL,AH
AX,CL
BL,CL
DL,BL

;
; DX 4
; AH BL
; AX 4
; BL 4
; 4 BL DL

________________________________________________________________

DIV, a
- IDIV.
. :

AX, -


+127 (.7F)
.

" ".
.
AH, - AL.
( +255 (.FF)
),

| AX |
: ||

| AH | AL |
: |||

" ".
DX:AX, -
. DX,
AX. +32767
(.FFFF) +16383 (.7FFF) .
| DX || AX |
| AH || AL |
: |.||.| : ||||
|

|
DIV IDIV .
:
DIV DIVISOR
DIVISOR (DB),
. DIVISOR (DW),
.
, , 13 3, 4 1/3.
4, - 1. , (
BASIC) 4,333....
(4) (,333). 1/3 333...
, 1 .
: DIV
--------------------------------- DIV . .12.5 D10DIV
: , ,
. DIV .2000 (8092)
.80 (128). 00 AH,
.40 (64) - AL.
DIV BYTE1
. ,
AH . .12 AH, .05 - AL.
DIV .1000 DX
.0080 AX.
DIV
WORD1 DX. .0000
DX, .0002 - AX.
__________________________________________________________________________
TITLE

page
EXDIV

60,132
(COM) DIV IDIV

CODESG SEGMENT PARA 'Code'


ORG
100H
BEGIN: JMP
SHORT MAIN
; --------------------------------------------BYTE1 DB
80H
;Data items
BYTE2 DB
16H
WORD1 DW
2000H
WORD2 DW
0010H
WORD3 DW
1000H
; --------------------------------------------MAIN
PROC
NEAR
;
CALL
D10DIV
;
CALL
E10IDIV
;
MAIN
ENDP
;
DIV:
; --------------------------------------------D10DIV PROC
MOV
AX,WORD1
; /
DIV
BYTE1
; :
MOV
AL,BYTE1
; /
SUB
AH,AH
;
DIV
BYTE3
; :

DIV
IDIV

AH:AL
AH
AH:AL

MOV
DX,WORD2
; /
MOV
AX,WORD3
; DX:AX
DIV
WORD1
; : DX:AX
MOV
AX,WORD1
; /
SUB
DX,DX
; DX
DIV
WORD3
; : DX:AX
RET
D10DIV ENDP
;
IDIV:
; --------------------------------------------E10IDIV PROC
MOV
AX,WORD1
; /
IDIV
BYTE1
; : AH:AL
MOV
AL,BYTE1
; /
CBW
; AH
IDIV
BYTE3
; : AH:AL
MOV
DX,WORD2
; /
MOV
AX,WORD3
; DX:AX
IDIV
WORD1
; : DX:AX
MOV
AX,WORD1
; /
CWD
; DX
IDIV
WORD3
; : DX:AX
RET
E10DIV ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.12.5. .
: IDIV
------------------------------- IDIV (Integer DIVide) .
.12.5 E10IDIV ,
D10DIV, DIV IDIV.

IDIV .2000 ( )
.80 ( ). - . 00
AH , - . C0 (-64) - AL. DIV,
, +64.

:
IDIV
2
3
4

EE (-18)
1000 (4096)
0000

FB (-5)
0080 (128)
0002

4 ,
DIV. , ,
DIV IDIV p. ,
,
DIV

, IDIV - .
, DEBUG .
. 2 (2, 4,
..) .
, AX:
2:

SHR AX,1

8:

MOV CL,3
SHR AX,CL


-------------------------- DIV IDIV,

p. ( ,
) .
, , .
. 1
, , .
: - ,
, (AH) :
- , , (DX)
. , 1:
:

:
0123
: 0001 4026


01
0001

(1)23
(1)4026

.
, DIV IDIV
. p ,
DIVBYTE - , AX.
, DIVWORD - ,
DX:AX.

CMP AH,DIVBYTE
JNB
DIV DIVBYTE

CMP DX,DIVWORD
JNB
DIV DIVWORD

IDIV ,
, ,
, NEG
.

------------------- ,
. ,
1.
, . c ,
AX, - BX,
CX:
SUB
C20: CMP
JB
SUB
INC
JMP
30: RET

CX,CX
AX,BX
C30
AX,BX
CX
C20

;
; < ,
;
;
;
;
; CX, AX

CX , AX o.
. DX:AX,
:
1. C20 AX BX DX.
2. SUB SBB DX,00.
:
.

________________________________________________________________
NEG
. NEG
1. :
NEG AX
NEG BL
NEG BINAMT

;( )

35- ( )
. , DX:AX 32-
. NEG
, .
NOT:
NOT
NOT
ADD
ADC

DX
AX
AX,1
DX,0

;
;
; 1 AX
; DX

: ,
, ,
. ,

, . ,

, ASCII-. ASCII-
,
. .
INTEL 8087 80287
________________________________________________________________
,
Intel 8087 ( 80287). 8087
8088, 80287
80286.

,
.
80- ,
10 400 .
100 ,
.

,

. MASM,
/E /R, , MASM /R.

________________________________________________________________
-
p. -128 +127.
- ADC
. ,
CLC, 0.
- MUL DIV
IMUL IDIV .
- .
, . ,
AH ( ) DX
( ).
- c.
SHR SAR
. SHL
SAL.
- . ,
FACTOR (DB), MUL FACTOR
AL, DIV FACTOR
AX. FACTOR (DW), MUL FACTOR
AX, DIV FACTOR
DX:AX.

________________________________________________________________
:

DATAX
DATAY

DW
DW
DW
DW

0148H
2316H
0237H
4052H

12.1. ) DATAX
DATAY; ) , DATAX,
DATAY.
12.2. :
STC
MOV BX,DATAX
ADC BX,DATAY
12.3. (MUL): ) DATAX
DATAY; ) , DATAX,
DATAY.
12.4. , , ?
12.5. (DIV): ) DATAX 23; )
, DATAX, DATAY.
12.6. " DX:AX"

. .

13

II:
ASCII BCD
__________________________________________________________________________
: ASCII BCD
.

________________________________________________________________

a .
.12, ,
.
ASCII c .
ASCII. , 23
00010111 .17; ASCII
c 25 ASCII- p
.3235.
-
ASCII-
ASCII-
. , ,
p .1 - 12.
, BASIC
Pascal,
() . ,
() .

( ) (),

.
ASCII-
________________________________________________________________
, , ASCII-, ,
SAM 53414D, 1234 .31323334. , ,
, .
,

.31323334, .

ASCII-:
AAA
AAD
AAM
AAS

(ASCII
(ASCII
(ASCII
(ASCII

Adjust
Adjust
Adjust
Adjust

for
for
for
for

Addition - ASCII-)
Division - ASCII-)
Multiplication - ASCII-)
Subtraction - ASCII-)


AX. , ASCII-
, ,
.
ASCII-
------------------------- 8 4 ASCII-:
.

38
34
-6C

ASCII-,
. , 6 6 .C: .C +
6 = .12 - .
, ,
AAA .
, , AX .0038,
BX - .0034. 38 34
ASCII-, .
:
ADD AL,BL
AAA

; 34 38
; ASCII-

AAA . (4 ) AL.
A F AF 1, AL
6, AH 1, AF
CF
1. AAA 0
. AL. - AX:
ADD: 006C
AAA: 0102
,

ASCII-,

. :
OR

AX,3030H ; 3132


.
ASCII- ,
. ,
.13.1 ASCII-
. :
__________________________________________________________________________
TITLE ASCADD (COM) ASCII-
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; ----------------------------------------------ASC1
DB
'578'
;
ASC2
DB
'694'
ASC3
DB
'0000'
; ----------------------------------------------MAIN
PROC
NEAR
CLC
LEA
SI,AASC1+2 ; ASCII-
LEA
DI,AASC2+2
LEA
BX,AASC1+3
MOV
CX,03
; 3
A20:
MOV
AH,00
; AH
MOV
AL,[SI]
; ASCII-
ADC
AL,[DI]
; ( )
AAA
; ASCII
MOV
[BX],AL
;
DEC
SI
DEC
DI
DEC
BX
LOOP
A20
; 3
MOV
[BX],AH
;
RET
MAIN
ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.13.1. ASCII-.
- ADC,
,
() . CLC CF .
- MOV AH ,
AAA . ADC p.
, XOR SUB o
AH CF.
-
,
p AH (00 01) .
- 01020702.
OR AAA ,
CF, p

ADC.
PUSHF, OR, ,
, POPF:
ADC AL,[DI]
AAA
PUSHF
OR AL,30H
POPF
MOV [BX],AL

;
; ASCII
;
;
;
;

PUSHF POPF LAHF (Load AH


with Flags - AH) SAHF (Store AH in Flag
register - AH ). LAHF
AH SF, ZF, AF, PF CF; SAHF
AH .
, , AH

. ASCII- OR .
ASCII-
-------------------------- AAS (ASCII Adjust for Subtraction -
ASCII-) a AAA. AAS
. ( ) AL.
A F AF 1, AL 6,
AH 1, AF CF 1.
AAS 0 . p AL.
, ASC1
.38, ASC2 - .34:
1:
MOV AL,ASC1
SUB AL,ASC2
AAS
2:
MOV AL,ASC2
SUB AL,ASC1
AAS

AX

AF

;0038
;0034
;0004

0
0

AX

AF

;0034
;00FC
;FF06

1
1

1 AAS .
AL .C, AAS
AL 1 AH 1 AF
( -4) .
.. -4.

2,
6
CF.
FF06,

ASCII-
-------------------------- AAM (ASCII Adjust for Multiplication -
ASCII-)
ASCII- AX. , .

ASCII-. ( IBM
p ). , ASCII-

31323334 01020304.
, ,
, o- ;
.
AAM AL 10 (.0A)
AH, AL. , AL
.35, CL - .39.
AL CL
ASCII-:
AX:
AND
AND
MUL
AAM
OR

CL,0FH
AL,0FH
CL

; CL 09
; AL 05
; AL CL
; ..
AX,3030H ; ASCII--

0005
002D
0405
3435

MUL 45 (.002D) AX,


AAM 10, 04 AH
05 AL. OR p
ASCII-.
.13.2
. AAM
, ,
.
- 0108090105.
,
, .

ASCII- (.
" ASCII- ").
__________________________________________________________________________
TITLE ASCMUL (COM) ASCII-
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H
BEGIN: JMP
MAIN
; --------------------------------------------MULTCND DB
'3783'
;
MULTPLR DB
'5'
PRODUCT DB
5 DUP(0)
; --------------------------------------------MAIN
PROC
NEAR
MOV
CX,04
;4
LEA
SI,MULTCND+3
LEA
DI,PRODUCT+4
AND
MULTPLR,0FH
; ASCII-
A20:
MOV
AL,[SI]
; ASCII-
; ( LODSB)
AND
AL,OFH
; ASCII-
MUL
MULTPLR
;
AAM
; ASCII
ADD
AL,[DI]
;
AAA
;
MOV
[DI],AL
;
DEC
DI
MOV
[DI],AH
;
DEC
SI

LOOP
A20
; 4
RET
MAIN
ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.13.2. ASCII-.
ASCII-
------------------------ AAD (ASCII Adjust for Division -
ASCII-)

ASCII-

. ,
ASCII- . AAD
AX. ,
AX 3238 ASCII- CL
37 ASCII-.
:
AX:
AND CL,0FH
; CL ..
AND AX,0F0FH ; AX ..
0208
AAD
;
001C
DIV CL
; 7
0004
AAD AH 10 (.0A), p
20 (.14) AL AH. 001C .
28.

01 09.
.13.3
.
. AH AAD
AL. p: 00090204
AH 02.
,
,
" ASCII- ."
__________________________________________________________________________
TITLE ASCDIV (COM) ASCII-
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; --------------------------------------------DIVDND DB
'3698'
;
DIVSOR DB
'4'
QUOTNT DB
4 DUP(0)
; --------------------------------------------MAIN
PROC
NEAR
MOV
CX,04
;4
SUB
AH,AH
;
AND
DIVSOR,0FH
; ASCII 3
LEA
SI,DIVDND
LEA
DI,QUOTNT
A20:
MOV
AL,[SI]
; ASCII
; ( LODSB)

AND
AL,0FH
; ASCII
AAD
;
DIV
DIVSOR
;
MOV
[DI],AL
;
INC
SI
INC
DI
LOOP
A20
; 4
RET
MAIN
ENDP
CODEGS ENDS
END
BEGIN
__________________________________________________________________________
.13.3. ASCII-.
- (BCD)
________________________________________________________________
ASCII-
00090204. ,
, 0924. - (BCD Binary Coded Decimal) ( ).
0 9. -
ASCII-.
, , 0924 10 ,
16 (.. . ),
.039C.
-
(BCD-). p
:
DAA (Decimal Adjustment for Addition - )
DAS (Decimal Adjustment for Subtraction - . .)

. , .13.4,
ASCII- BCD- .
B10CONV ASCII BCD.
, . ,
, ,
BCD- ASCII-.
ASCII-.
C10ADD

BCD-.
- 127263.
__________________________________________________________________________
TITLE BCDADD () .ASCII BCD,
CODESG SEGMENT PARA "Code"
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; ------------------------------------------ASC1
DB
'057836'
ASC2
DB
'069427'
BCD1
DB
'000'
BCD2
DB
'000'
BCD3
DB
4 DUP(0)
; -------------------------------------------

MAIN

PROC
LEA
LEA
CALL
LEA
LEA
CALL
CALL
RET
ENDP

MAIN
;
;
B10CONV PROC
MOV
MOV
MOV
XCHG
SHL
SHL
MOV
DEC
DEC
DEC
DEC
JNZ
RET
B10CONV ENDP
;
;
C10ADD PROC
XOR
LEA
LEA
LEA
MOV
CLC
20:
MOV
ADC
DAA
MOV
DEC
DEC
DEC
LOOP
RET
C10ADD ENDP

NEAR
SI,ASC1+4
DI,BCD1+2
B10CONV
SI,ASC2+4
DI,BCD2+2
B10CONV
C10ADD

; ASC1
;
; ASC2
;
;

ASCII BCD:
-------------------------CL,04
OX,03
AX,[SI]
AH,AL
AL,CL
AX,CL
[DI],AH
SI
SI
DI
DX
20

;
; 20:
; ASCII-apy
( LODSW)
;
; ASCII-
; BCD-

BCD-:
-----------------A,A
SI,BCD1+2
DI,BCD2+2
BX,BCD3+3
CX,03

;0 A
;
; BCD
;
;

AL,[SI]
AL,[DI]

; BCD1 ( LODSB)
; BCD2
;
;3 BCD3

[BX],AL
SI
DI
BX
20

; 3

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.13.4. BCD- .
ASCII-
________________________________________________________________
ASCII BCD

.
.
ASCII-
, ASCII- BCD- , ,
:
, ASCII-
10,
2. :
1. ASCII-
.
2. . ASCII-.
3. ASCII- 1, 10, 100 (.1, A, 64) ..
.
1234 ASCII-
:

4 1 =
3 10 =
2 100 =
1 1000 =
:

4
30
200
1000

4
1E
C8
3E8
04D2

, .04D2
1234. .13.5 B10ASBI
ASCII- 1234 . ,
ASCII- 4 ASCLEN.
ASCII- ASCVAL-1 SI, - BX.
B20 ASCII- AL:
MOV AL,[SI+BX]
ASCVAL-1 BX (4),
.. ASCVAL+3 ( ASCVAL).
BX 1,
.
BX, CX, , , LOOP.
MULT10 10,
1,10,100 .. ,
,
SI DI.
__________________________________________________________________________
TITLE EXCONV () . ASCII . -
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; ------------------------------------------ASCVAL DB
'1234'
;
BINVAL DB
0
ASCLEN DB
4
MULT10 DB
1
; ------------------------------------------MAIN
PROC
NEAR
; :
CALL
B10ASBI
; ASCII

CALL
RET
ENDP

MAIN
;
;
;
B10ASBI PROC
MV
LEA
MOV
20:
MOV
AND
MUL
ADD
MOV
MUL
MOV
DEC
JNZ
RET
B10ASBI ENDP
;
;
;
C10BIAS PROC
MOV
LEA
MOV
20:
CMP
JB
XOR
DIV
OR
MOV
OEC
JMP
C30:
OR
MOV
RET
C10BIAS ENDP

C10BIAS

------------------------------ ASCII :
------------------------------CX,10
SI,ASCVAL-1
BX,ASCLEN

;
; ASCVAL
; ASCVAL

AL,[SI+BX]
AX,000FH
MULT10
BINVAL,AX
AX,MULT10
CX
MULT10,AX
BX
20

; ASCII-
;
; 10
;
;
;
;. ASCII-?
; -

------------------. . ASCII:
------------------CX,0010
SI,ASCVAL+3
AX,BINVAL

;
; ASCVAL
; .

A,0010
30
DX,DX
CX
DL,30H
[SI],DL
SI
20

; 10?
; -
;
; 10

AL,30H
[SI],AL

;3 c.
; ASCII-

; ASCII-

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.13.5. ASCII .
ASCII-
________________________________________________________________
,
p, ASCII-.
.

10 (.0A)
10. , 0 9,
ASCII-.

.4D2 :

7B
C
1

4
3
2

4D2 : A
7B : A
C : A

1 , .A, .
ASCII-,
1234.
, .. 31323334.
.13.5 C10BIAS .4D2 (
B10ASBI) ASCII- 1234.
(.13.5) p
.

________________________________________________________________

. 12,345,
5

:
:
5:

12,345
+5
----- : 12,350 = 12,35
12,3455, 50
. 12,34555 500
:
12,3455
+50
------12,3505 = 12,35

12,34555
+500
-------12,35055 = 12,35

, , 5000
..

, 12345
.3039. 5 3039, 303E, 12350
. .
.181F, 1675 - ..
. ,
.
10 (.A):
.303E : .A = 4D3 .1235
.4D3 ASCII- 1235. o
12,35,
.
.
5 10,
: 50 p 100.
: (5, 50, 500 ..)
(10, 100, 1000 ..).
, p.

:
_______________________________________________________________________
, .13.6,

p .
. :
B10INPT

.
.
ASCII
.
ASCII
.
, .

. ,

, , , , .
,
ASCII
ASCII-.

ASCII (
)
.

D10HOUR
E10RATE
F10MULT

G10WAGE
K10DISP
M10ASBI

__________________________________________________________________________
TITLE

SCREMP (EXE) ,
;
; ---------------------------------------------------STACKSG SEGMENT PARA STACK 'Stack'
DW
32 DUP(?)
STACKSG ENDS
; ---------------------------------------------------DATASG SEGMENT PARA 'Data'
HRSPAR LABLE BYTE
;
; :
MAXHLEN DB
6
;--------------------ACTHLEN DB
?
HRSFLD DB
6 DUP(?)
RATEPAR LABLE

BYTE

MAXRLEN DB
ACTRLEN DB
RATEFLN DB

6
?
6 DUP(?)

MESSG1
MESSG2
MESSG3
ASCWAGE
ADJUST
ASCHRS
ASCRATE
BINVAL
BINHRS

'Hours worked? ','$'


'Rate of pay? ','$'
'Wage = '
10 DUP(30H), 13, 10, '$'
?
0
0
00
00

DB
DB
DB
DB
DW
DB
DB
DW
DW

;
; :
;---------------------

BINRATE DW
00
COL
DB
00
DECIND DB
00
MULT10 DW
01
NODEC DW
00
ROW
DB
00
SHIFT DW
?
TENWD DW
10
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
MOV
AX,0600H
CALL
Q10SCR
;
CALL
Q20CURS
;
A20LOOP:
CALL
B10INPT
;
CMP
ACTHLEN,00
; ?
JE
A30
CALL
D10HOUR
;
CALL
E10RATE
;
CALL
F10MULT
;
CALL
G10WAGE
; ASCII
CALL
K10DISP
;
JMP
A20LOOP
A30:
MOV
AX,0600H
CALL
Q10SCR
;
RET
;
BEGIN ENDP
;

; ---------------------------------------------------B10INPT PROC
LEA
DX,MESSG1
;
MOV
AH,09
INT
21H
LEA
DX,HRSPAR
;
MOV
AH,0AH
INT
21H
CMP
ACTHLEN,00
; ?
JNE
B20
RET
; - A20LOOP
B20:
MOV
COL,25
;
CALL
Q20CURS
LEA
DX,MESSG2
;
MOV
AH,09
INT
21H
LEA
DX,RATEPAR
;
MOV
AH,0AH
INT
21H
RET
B10INPT ENDP

;
:
;
----------------D10HOUR PROC
MOV
NODEC,00
MOV
CL,ACTHLEN
SUB
CH,CH
LEA
SI,HRSFLD-1
;
ADD
SI,CX
;
CALL
M10ASBI
;
MOV
AX,BINVAL
MOV
BINHRS,AX
RET
D10HOUR ENDP
;
:
;
-----------------E10RATE PROC
MOV
CL,ACTRLEN
SUB
CH,CH
LEA
SI,RATEFLD-1
;
ADD
SI.CX
;
CALL
M10ASBI
;
MOV
AX,BINVAL
MOV
BINRATE,AX
RET
E10RATE ENDP
;
, :
;
----------------------------F10MULT PROC
MOV
CX,05
LEA
DI,ASCWAGE
;
MOV
AX,3030H
; ASCII (30)
CLD
REP STOSW
MOV
SHIFT,10
MOV
ADJUST,00
MOV
CX,NODEC
CMP
CL,06
; 6
JA
F40
; ,
DEC
CX
DEC
CX
JLE
F30
;, 3
MOV
NODEC,02
MOV
AX,01
F20:
MUL
TENWD
;
LOOP
F20
MOV
SHIFT,AX
SHR
AX,1
;
MOV
ADJUST,AX
F30:
MOV
AX,BINHRS
MUL
BINRATE
;
ADD
AX,ADJUST
;
ADC
DX,00
CMP
DX,SHIFT
;
JB
F50
; DIV?
F40:
SUB
AX,AX
JMP
F70
F50:

CMP
JZ
DIV
F70:
SUB
F80:
RET
F10MULT ENDP
;
;
G10WAGE PROC
LEA
MOV
ADD
G30:
CMP
JNE
DEC
G35:
CMP
JNZ
CMP
JB
G40:
DIV
OR
MOV
DEC
SUB
JMP
G50:
OR
MOV
RET
G10WAGE ENDP
;
;
K10DISP PROC
MOV
CALL
MOV
LEA
K20:
CMP
JNE
MOV
INC
LOOP
K30:
LEA
MOV
INT
CMP
JAE
INC
JMP
K80:
MOV
CALL
MOV
CALL
K90:
RET

ADJUST,00
F80
SHIFT
DX,DX

; ?
;
;

ASCII :
----------------------------SI,ASCWAGE+7
; .
BYTE PTR[SI],'.'
SI,NODEC
;
BYTE PTR[SI],'.'
G35
;, ..
SI
DX,00
G40
AX,0010
G50

; dx:ax < 10,

TENWD
DL,30H
[SI],DL
SI
DX,DX
G30

; - ASCII-

AL,30H
[SI],AL

; ASCII
;

; ASCII
;

:
--------------------COL,50
Q20CURS
CX,09
SI,ASCWAGE

;
BYTE PTR[SI],30H
K30
;
BYTE PTR[SI],20H
SI
K20
DX,MESSG3
AH,09
21H
ROW,20
K80
ROW
K90

AX,0601H
Q10SCR
COL,00
Q20CURS

; -;
;

; ?
; -

K10DISP ENDP
;
;
;
M10ASBI PROC
MOV
MOV
MOV
SUB
M20:
MOV
CMP
JNE
MOV
JMP
M40:
AND
MUL
ADD
MOV
MUL
MOV
CMP
JNZ
INC
M90:
DEC
LOOP
CMP
JZ
ADD
M100: RET
M10ASBI ENDP
;
;
Q10SCR PROC
MOV
SUB
MOV
INT
RET
Q10SCR ENDP
;
;
Q20CURS PROC
MOV
SUB
MOV
MOV
INT
RET
Q20CURS ENDP

ASCII-
:
-------------------------MULT10,0001
BINVAL,00
DECIND,00
BX,BX
AL,[SI]
AL,'.'
M40
DECIND,01
M90
AX,000FH
MULT10
BINVAL,AX
AX,MULT10
TENVD
MULT10,AX
DECIND,00
M90
BX

;ASCII-
;, .

;
; .
;
; x 10
; ?
; -

SI
M20
DECIND,00
M100
NODEC,BX

;
; .?
; -;

:
---------------NEAR
;AX
BH,30
; (07 /)
CX,CX
DX,184FH
10H
:
----------------NEAR
AH,02
BH,BH
DH,ROW
DL,COL
10H

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.13.6. .

. ,
.13.6, c ,
. - ,
, 10, a

ASCII- 10.

655350, .

.
.
,

, ,
,
.
0 9 .
.

XLAT (. .14).
:
, , .

-----------------------

. , , 12,34-,
-12,34.
.

.
ASCII .
, ,
, , ASCII- ,
, .12
" ". IMUL
IDIV .
, 5.

________________________________________________________________
- ASCII- .
0 9,
.
.
- ASCII-
AAA; ASCII- - AAS.
- ASCII-,
" " ,
.
AAM.
- ASCII-, : 1)
" " ,
2)
AAD.

-
ASCII- .
ASCII-: .30
.39, () , ,
.

________________________________________________________________
13.1. , AX 9 ASCII ,
BX -7 ASCII .
:
)
)

ADD AX,33H
AAA
SUB AX,BX
AAS

)
)

ADD AX,BX
AAA
SUB AX,0DH
AAS

13.2. UNPAK . 01040705


. , ASCII-,
.. 31343735.
13.3. ASCA 313733 ASCII-,
ASCB 35.
ASCII- ASCPRO.
13.4. 13.3, ASCA ASCB
ASCQUO.
13.5. : ) ASCII
46328 .; )
. ASCII-.
13.6. ,
(INT 12H - . .2),
ASCII- :
nnn .

14

__________________________________________________________________________
: ,
.

________________________________________________________________

, , , , .
- XLAT. ,
- ,
.
.
.

.

________________________________________________________________

, .. (
),

.
, -
, 64- :
STACK

DW

64 DUP(?)


:
MONTAB
COSTAB

DB
DB

'JAN','FEB','MAR', ... ,'DEC'


205,208,209,212,215,224,...

MONTAB , COSTAB .
( ).
(
) ( ),

() . ,
"Paper" 9 . ,

.
STOKTBL DB 12,'Computers',14,'Paper....',17,'Diskettes'
:
STOKTBL

DB
DB
DB

12, 'Computers'
14, 'Paper....'
17, 'Diskettes'


________________________________________________________________
, - 03
March.

, .
- September, :
MONTBL

DB
DB
DB

'January..'
'February.'
'March....'

9 . 'January' MONTBL+0, 'February' - MONTBL+9, 'March' - MONTBL+18.


03, :

1. ASCII 33
03.
2. : 03 - 1 = 02
3. (9): 02 9 = 18
4. (18) MONTBL;
: MONTBL+18.
__________________________________________________________________________
page
60,132
TITLE DIRECT (COM)
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; -----------------------------------------------THREE DB
3
MONIN DB
'11'
ALFMON DB
'???','$'
MONTAB DB
'JAN','FEB','MAR','APR','MAY','JUN'
DB
'JUL','AUG','SEP','OKT','NOV','DEC'
; -----------------------------------------------MAIN
PROC
NEAR
;
CALL
C10CONV
;
CALL
D10LOC
;
CALL
F10DISP
;
RET
MAIN
ENDP
;
ASCII :
;
-------------------------------------C10CONV PROC
MOV
AH,MONIN
;
MOV
AL,MONIN+1
XOR
AX,3030H
; ASCII
CMP
AH,00
; 01-09?
JZ
C20
; -
SUB
AH,AH
; - AH,
ADD
AL,10
;
C20
RET
C10CONV ENDP
;
:
;
--------------------------D10LOC PROC
LEA
SI,MONTAB
DEC
AL
;
MUL
THREE
; AL 3
ADD
SI,AX
MOV
CX,03
;
CLD
LEA
DI,ALFMON
REP MOVSB
; 3
RET
D10LOC ENDP
;
.:
;
-------------------------F10DISP PROC
LEA
DX,ALFMON
MOV
AH,09
INT
21H
RET

F10DISP ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.14.1. .
.14.1
.
- . MONIN.
,
ASCII- MONIN.

. p
,
.
,
.
, : 1,
2, 3,... 106, 107, 108,... 5, 10, 15. ,
.
, .

________________________________________________________________

,

. -
, , 134, 138, 141, 239 245.
,
.
.

---------------------------------
. , , ,

, .
, .
(,

, ).
, :
STOKNOS DB '101','107','109',...
STOKDCR DB 'Excavators','Processors','Assemblers',...
, :
STOKTAB

DB '101','Excavators'
DB '107','Processors'
DB '109','Assemblers'
...

.14.2
. .

STOKNIN . ,

.
, (A30)
DESCRN.

, ,
.
, ,
STOKNIN AX. STOKNIN
3233, MOV AX
3332.
, MOV XCHG,
AX,

, .. 3233. CMP,

, , - .
, p ,
.
XCHG,
MOV, , BX
AX BX :
MOV AX,STOKNIN
LEA SI,STOKTAB
C20:
MOV BX,[SI]
CMP AX,BX
JA JB ...

. ,
(
) .
.14.2
. o
. ,
REPE CMPSB,
p CX.
__________________________________________________________________________
page
60,132
TITLE TABSRCH (COM)
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; ----------------------------------------------STOKNIN DW
'23'
STOKTAB DB
'05','Excavators'
DB
'08','Lifters '
DB
'09','Presses '
DB
'12','Valves
'
DB
'23','Processors'
DB
'27','Pumps
'
DESCRN 10
DUP(?)
; ----------------------------------------------MAIN
PROC
NEAR
MOV
AX,STOKNIN
;
XCHG
AL,AH
MOV
CX,06
;
LEA
SI,STOKTAB
;

A20:
CMP
JE
ADD
LOOP
CALL
RET

AX,[SI]
A30
SI,12
A20
R10ERR

;
; - ,
; -
;

A30:
MOV
CX,05
LEA
DI,DESCRN
INC
SI
INC
SI
REP MOVSW
RET
ENDP

MAIN
;
R10ERR PROC
;
RET
R10ERR ENDP

;
;
;
;

< >

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.14.2.

------------------------
. , o
, :

0-1000.00
1000,01-2500,00
2500,01-4250,00
4250,01-6000,00
6000,01


10
15
18
20
23

-
0,00
050,00
125,00
260,00
390,00


.
:
TAXTBL

DD

100000,250000,425000,600000,999999

, x
:
- ,
;
- , .
:
: 100 - -


------------------------------------------------- ,
REPE CMPS. ,
(.14.2) .
STOKNIN , STOKTAB - ,
c :
: |123|035Excavators|038Lifters
| | |
| |
: 00 03 06
16 19

|049Presses
| |
29 32

| ...

.14.3 STOKTAB,
'999' .
STOKNIN:

035
038
049
102
123

STOKNIN

123
123
123
123
123

: .-
: .-
: .-
: .-
:

, CMPSB .14.3 ,
p SI DI.
CX 03,
SI DI 03 00 .
(035:123)
, SI 04, DI: 01, CX: 02.
SI 16, DI: 00.
DI STOKNIN.
, SI,
, (, )
. CX ,
, - 02. SI
CX ,
:
SI CMPSB
CX

04
02
10
- . 16
CX ,
( ), :
1, 2 3 .
, CX 00, p SI
.
__________________________________________________________________________
page
60,132
TITLE TABSRCH (COM) , CMPSB
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; ----------------------------------------------------

STOKNIN DW
'123'
STOKTAB DB
'035','Excavators'
;
DB
'038','Lifters '
DB
'049','Presses '
DB
'102','Valves
'
DB
'123','Processors'
DB
'127','Pumps
'
DB
'999', 10 DUP(' ')
;
DESCRN 10
DUP(?)
; ---------------------------------------------------MAIN
PROC
NEAR
CLD
LEA
SI,STOKTAB
;
A20:
MOV
CX,03
; 3
LEA
DI,STOKNIN
;
REPE CMPSB
;
JE
A30
; - ,
JA
A40
; -
ADD
SI,CX
; CX
JMP
A20
;
A30:
MOV
CX,05
; 5
LEA
DI,DESCRN
;
REP MOVSV
;
RET
A40:
CALL
R10ERR
;
RET
MAIN
ENDP
R10ERR PROC
;
RET
R10ERR ENDP

< >

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.14.3. CMPSB

-------------------------------------- , .

, , .00;

p .FF. ,
. ,
.
SCAS.
XLAT
________________________________________________________________
XLAT

. XLAT

(IBM) XLAT
ASCII EBCDIC.
0 9
ASCII EBCDIC. ASCII
.30-39, EBCDIC - .F0-F9,
OR. , ASCII
(.40) EBCDIC. XLAT
, 256 ,
EBCDIC ASCII :
XLTBL DB
DB
DB

47 DUP(40H)
; EBCDIC
0F0H,0F1H,0F2H,0F3H,...,0F9H ;0-9 (EBCDIC)
199 DUP(40H) ; EBCDIC

XLAT BX,
(, ASCNO) AL.
:
LEA BX,XLTBL
MOV AL,ASCNO
XLAT
XLAT AL
a , .. BX AL. ,
, ASCNO 00, XLTBL+00
XLAT 00 .40 . ASCNO c
.32, XLTBL+50.
.F2 (2 EBCDIC), XLAT
AL.
.14.4
(2E) (2D) ASCII EBCDIC (4B
60
).
. ASCNO 31.5
, .2D33312E3520.
EBCNO .60F3F14BF540.
__________________________________________________________________________
page
60,132
TITLE XLATE (COM) ASCII EBCDIC
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
MAIN
; ---------------------------------------------------ASCNO DB
'-31.5'
EBCNO DB
6 DUP(' ')
XLTAB DB
45 DUP(40H)
DB
60H, 2DH
DB
5CH
DB
0F0H,0F1H,0F2H,0F3H,0F4H
DB
0F5H,0F6H,0F7H,0F8H,0F9H
DB
199 DUP(40H)
; ---------------------------------------------------MAIN
PROC
NEAR
;
LEA
SI,ASCNO
; ASCNO
LEA
DI,EBCNO
; EBCNO
MOV
CX,06
;
LEA
BX,XLTAB
;
A20:

MOV
AL,[SI]
; ASCII
XLAT
;
MOV
[DI],AL
; EBCNO
INC
DI
INC
SI
LOOP
A20
; 6
RET
MAIN
ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.14.4. ASCII EBCDIC.
: . ASCII-
________________________________________________________________
__________________________________________________________________________
page
60,132
TITLE ASCHEX (COM) ASCII .
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
MAIN
; ----------------------------------------------DISPROW DB
16 DUP('
'), 13
HEXSTR DB
00
XLATAB DB
30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB
41H,42H,43H,44H,45H,46H
; ----------------------------------------------MAIN
PROC
NEAR
;
CALL
Q10CLR
;
LEA
SI,DISPROW
A20LOOP:
CALL
C10HEX
;
CALL
D10DISP
;
CMP
HEXCTR,0FFH
; (FF)?
JE
A50
; -
INC
HEXCTR
; -
JMP
A20LOOP
A50:
RET
MAIN
ENDP
C10HEX PROC
MOV
MOV
SHR
LEA
MOV
XLAT
MOV

NEAR
AH,00
AL,HEXCTR
AX,CL
BX,XLATAB
CL,04

; .

[SI],AL

; .
; .
;
;
; .
;

MOV
SHL
XLAT
MOV
RET
C10HEX ENDP

AL,HEXCTR
AX,CL

[SI]+1,AL

; .
;

D10DISP PROC
MOV
MOV
CMP
JE
CMP
JB
CMP
JAE
D20:
MOV
D30:
ADD
LEA
CMP
JNE
MOV
MOV
MOV
LEA
INT
LEA
D40:
RET
D10DISP ENDP

NEAR
AL,HEXCTR
[SI]+3,AL
AL,1AH
D20
AL,07H
D30
AL,10H
D30

SI,05
DI,DISPROW+80
DI,SI
D40
AH,40H
BX,01
CX,81
DX,DISPROW
21H
SI,DISPROW

Q10CLR PROC
MOV
MOV
MOV
MOV
INT
RET
Q10CLR ENDP

NEAR
AX,0600H
BH,03
CX,0000
DX,184FH
10H

; EOF?
; -
;/ 08?
; - OK
;/ 0F?
; - OK

BYTE PTR [SI]+3,20H

;
;
;
;

; (07 /)

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.14.5. . ASCII-
, .14.5,
ASCII-, . . , ASCII-
.53 - S, 53 S.
1616:
00
.
.
.
F0

01
.
.
.
F1

02
.
.
.
F2

03
.
.
.
F3

04
.
.
.
F4

05
.
.
.
F5

06
.
.
.
F6

07
.
.
.
F7

08
.
.
.
F8

09
.
.
.
F9

0A
.
.
.
FA

0B
.
.
.
FB

0C
.
.
.
FC

0D
.
.
.
FD

0E
.
.
.
FE

0F
.
.
.
FF

.8.1, ASCII-, o
. .
ASCII, . ,
ASCII .00, 01 .. .00 .3030,
.01 .3031 ..
HEXCTR 00.
1. C10HEX

HEXCTR . . , HEXCTR .4F.


. 4
XLATAB. AL
.34. . F
.46. o .3446,
4F.
DOS (.40)
.1A , .
, DOS (.09),
'$' .
.
ASCII-. .
:
________________________________________________________________

. ,


. ,
,
. ,
, ,
.
,
, .

,
,
. ,
,

. -
, .
. ,
.

1 2, 2 3 ..
, . ,
.. 1-2,
2-3 .. ,
.
,
SWAP

: (YES) (NO):
G10:
G20:
G30:


SWAP=NO

> ?
:
SWAP=YES

?
: G30
: SWAP=YES?
: G20 ( .)
:

, .14.6,
30 ,
.
__________________________________________________________________________

page
60,132
TITLE NMSORT (EXE)
; ----------------------------------------------STACK SGMENT PARA STACK 'Stack'
DW
32 DUP(?)
STACK ENDS
; ----------------------------------------------DATASG SEGMENT PARA 'Data'
NAMEPAR LABEL BYTE
; :
MAXNLEN DB
21
; .
NAMELEN DB
?
;
NAMEFLD DB
21 DUP(' ')
;
CRLF
DB
13, 10, '$'
ENDADDR DW
?
MESSG1 DB
'Name?', '$'
NAMECTR DB
00
NAMETAB DB
30 DUP(20 DUP(' ')) ;
NAMESAV DB
20 DUP(?), 13, 10, '$'
SWAPPED DB
00
DATA
ENDS
; ----------------------------------------------CODESG SEGMENT PARA 'Code'
BEGIN PROC
FAR
ASSUME CS:CODESG,DS:DATDSG,SS:STACK,ES:DATASG
PUSH
DS
SUB
AX,AX
PUSH
AX
MOV
AX,DATASG
MOV
DS,AX
MOV
ES,AX
CLD
LEA
DI,NAMETAB
CALL
Q10CLR
;
CALL
Q20CURS
;
A20LOOP:
CALL
B10READ
;
CMP
NAMELEN,00
; ?
JZ
A30
; -
CMP
NAMECTR,30
; 30 ?
JE
A30
; -
CALL
D10STOR
;
JMP
A20LOOP
A30:
;
CALL
Q10CLR
;
CALL
Q20CURS
;
CMP
NAMECTR,01
; 2 ?
JBE
A40
; -
CALL
G10SORT
;
CALL
K10DISP
;
A40:
RET
;
BEGIN ENDP
;
?
;
---------------------B10READ PROC
MOV
AH,09
LEA
DX,MESSG1
;
INT
21H
MOV
AH,0AH

LEA
INT
MOV
LEA
INT

DX,NAMEPAR
21H
AH,09
DX,CRLF
21H

MOV
MOV
MOV
SUB

BH,00
BL,NAMELEN
CX,21
CX,BX

;
;

; CRLF

B20:
MOV
NAMEFLD[BX],20H ;
INC
BX
LOOP
B20
RET
B10READ ENDP
;
:
;
---------------------D10STOR PROC
INC
NAMECTR
;
CLD
LES
SI,NAMEFLD
MOV
CX,10
REP MOVSV
;
RET
D10STOR ENDP
;
:
;
------------------------G10SORT PROC
SUB
DI,40
;
MOV
ENDADDR,DI
G20:
MOV
SWAPPED,00
;
LEA
SI,NAMETAB
;
G30:
MOV
CX,20
;
MOV
DI,SI
ADD
DI,20
;
MOV
AX,DI
MOV
BX,SI
REPE CMPSB
;
JBE
G40
;
CALL
H10XCHG
;
G40:
MOV
SI,AX
CMP
SI,ENDADDR
; ?
JBE
G30
; -
CMP
SWAPPED,00
; ?
JNZ
G20
; - ,
RET
; -
G10SORT ENDP
;
:
;
-----------------------------H10XCHG PROC
MOV
CX,10
LEA
DI,NAMESAV
MOV
SI,BX
REP MOVSW
;
MOV

CX,10

MOV
DI,BX
REP MOVSW
MOV
CX,10
LEA
SI,NAMESAV
REP MOVSW

;
;
;
;
;

MOV
SWAPPED,01
RET
H10XCHG ENDP
;
:
;
-----------------------------------K10DISP PROC
LEA
SI,NAMETAB
K20:
LEA
DI,NAMESAV
;
MOV
CX,10
REP MOVSV
MOV
AH,09
LEA
DX,NAMESAV
INT
21H
;
DEC
NAMECTR
; ?
JNZ
K20
; - ,
RET
; -
K10DISP ENDP
;
:
;
-------------Q10CLR PROC
MOV
AX,0600H
MOV
BH,61H
; (07 /)
SUB
CX,CX
MOV
DX,184FH
INT
10H
RET
Q10CLR ENDP
;
:
;
----------------Q20CURS PROC
MOV
AH,02
SUB
BH,BH
SUB
DX,DX
; 00,00
INT
10H
RET
Q20CURS ENDP

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.14.6.
,
________________________________________________________________
,

. ,
( )
, .
TYPE (), LENGTH () SIZE ()

.
:
TABLEX

DW

10 DUP(?) ; 10

TYPE (DW
), LENGTH DUP- (10)
SIZE (10 2 = 20).
:
MOV AX,TYPE TABLEX
MOV BX,LENGTH TABLEX
MOV CX,SIZE TABLEX

;AX=0002
;BX=000A (10)
;CX=0014 (20)

LENGTH SIZE
. , SI
,
:
CMP SI,SIZE TABLEX
23 " "
TYPE, LENGTH SIZE.

________________________________________________________________
-
,
.

- . ,
, .
: , ,
p,
.
3, - 2.
, , 2
(SHL ),
. ( -1).
- , DB , 256,
DW . CMP CMPSW
,
.
- ,
, .
.

.
- .
,
.

________________________________________________________________

14.1. , ,
.
14.2 , 1,
, 14.1.
.
14.3 ,
:
) : 06, 10, 14, 21, 24;
) : , , ,
, ;
) : 93.95, 82.25, 90.67, 85.80, 13.85.
14.4 ,
(ITEMIN) (QTYIN) .
14.3, ITEMIN.
.
( ) .
14.5 14.3, :
) () ; )
.

15
I:
__________________________________________________________________________
:
() ,

________________________________________________________________

.
() (),
,
.
. c 5
1/4 40 ,
00 39.
512 .
, ,
. ,
, - ,
,
.
.
. o
. , , ,
, .

:
---T---T--------T---T--------T---T----- ---T---T-----
#1#2#3...#n

L--+---+------L--+---+------L--+---+------

L--+---+------

.
, 5 1/4" .

________________________________________________________________
:
DOS

DOS 2.0
DOS 2.0

3 1/2"

40
40
80
80

8
9
15
9

512
512
512
512

327
368
1 228
737

680
640
800
280

10
20

306
614

17
17

512
512

4-

10 653 696
21.377.024

(),

. 0,
- 1.
()
________________________________________________________________
,

,
DOS .

.
:

0
0
0
1
1

0
0
0
0
0

1
2-3
4-7
1-3
4 ...


(FAT)

1-
0- .
0- 1- p, 1- 1- , 0-
2- ..
.
, .
FORMAT /S ,
DOS IBMBIO.COM IBMDOS.COM .

, 512 ( 512),
. DOS p
. , ,
. :

0-7

8-10
11

, , .
: .00 ,
, .E5 - , .2E
- .

, :
.00 - ;
.01 - ;
.02 - "" ;
.04 - DOS;
.08 - ;
.10 - ;
.20 - ( ).
DOS.
, ,
:

12-21
22-23

||
24-25

,
:
|||

26-27

1980 0
119, - 1 12, - 1 31.
.
. ( COM- DOS)
002. ,
.
. DOS
.

28-31

, ,
.

________________________________________________________________
(FAT - File Allocation Table)
- .
, DOS
.
1, 2 FAT. FAT
, FAT
.
, - .
FAT p

, .
FAT :
FE

FC
FF
FD
F9
F8

9
8
9

(1,2 )

FFFF.
(
). ""
:

FAT
..
, 8
1
2-3
4-7
1
, 9
1
2-5
6-9
1
, 8
1
2-3
4-10
2
, 9
1
2-5
6-12
2
(1,2 ) 1
2-15 16-29
1
XT
1
2-17 18-49
8
AT
1
2-838 4-115 4
, FAT .
12 . ( DOS 3 FAT
16 ). FAT,
000 001, ,
, .
002. FAT
. (12 ),
:
000
nnn
FF7
FFF

,
,
( ),
.

, ,
PAYROLL.ASM, 002, 003 004.
PAYROLL, - ASM, .00
, , 002 -
. FAT
( ,
):
FAT:
|FDF|FFF|003|004|FFF|000|000|...|000|
.: 0 1 2 3 4 5 6 ...
FAT

000 001.
, :
1. DOS PAYROLL
ASM.
2. DOS

(002)
.
3. DOS
FAT,

002.

,
, , 003.

, 003. DOS
.

4. DOS FAT,
003.
004, 004. DOS
.
5. FAT 004 .FFF,
, .

, FAT - . ,
, . ,
, , ,
FAT .FFF ,
.
, ,
15.
FAT :
- 15 1,5, 22,5.
- 22 23 FAT.
, F*FF.
- : FFF*.
- 15-, - FFF
.
,

,
15. FAT, 22 ,
p p:
6* 01 17 80 01 FF*F
, FAT, 15 1,5,
22,5, 22 23,
. 6*01,
016*. 15- ,
016. , , 016.
, , 16 1,5
24. 24 25 FAT.
1780 8017. 16
, 017.
017.
, , 17
1,5, 25.5. 25 26
FAT. 8001 0180. 17
, 018.
018.

FAT 27 28, FF*F,
*FFF. 18 ,
FFF, .
, p.
,
, .
,
FAT , , ,
DOS 1BH 1CH.

________________________________________________________________

- .
- () ,
, , , , p .
- (FAT)
p .

________________________________________________________________
15.1. ?
15.2. ?
15.3. ?
15.4.
DOS FORMAT /S?
15.5. FAT,
?
15.6. 2890 () : )
c ? )
? ) , .

16
II: DOS
__________________________________________________________________________
:
DOS .

________________________________________________________________
DOS,
(FCB),

. DOS
.
DOS
(FCB - file control block),
. FCB DOS
-.

.
.
, "" DOS
.
, "" , , DOS
. , ""
, .
,

, .
,

, "" "" ,
DOS 21H. ,
, DOS,
25H 26H. BIOS
13H,
. DOS

BIOS. .17
DOS 2,
.18 BIOS. :

.
(FCB)
________________________________________________________________
-
DOS
FCB. FCB
,
. FCB

0-15 32-36, 16-31 DOS:

0
1-8
9-11

12-13

14-15

16-19

20-21
22-31
32

33-36

: 01 A, 02 B ..
, ,
8 .
, , LPT1 .
, , DTA
ASM. ,
. DOS
.
. 128 .

( 32). 0,
- 1 ..
0.
.
128 (.80).

.
. DOS
( )
.
.
, .
. DOS
.
.
DOS.
.
(0-127) (. 12-13).

. - 0,

0 127.
.

. ,

25 (.19),
.19000000. ,

.
(1.073.741.824 ),

.
64, 36 00.
,
.
FCB
,

.
.FF, - ,
. .
FCB
________________________________________________________________

. -
FCB DX.
FCB DS:DX.
.16

DOS INT 21H :


MOV AH,16H
;
LEA DX,FCBname ;
INT 21H
; DOS
DOS ,

FCB, .
,
( ), , DOS
,
, DOS .
0 "" .

AL:
00
FF

FCB 0 ( ) - 128 (.80) . ,


,
.

(DTA - disk trausfer


area). FCB , DTA
. .1A
DOS DTA.
DTA. DTA:
MOV AH,1AH
LEA DX,DTAname
INT 21H

;
; DTA
; DOS

DTA .
DTA
.
.15:
MOV AH,15
LEA DX,FCBname
INT 21H

;
;
; DOS

FCB
DTA. ,
.
. ,
128 , (4*128=512)
.
DOS FCB
1.
128, 0 FCB
1. AL
:
00
01
02

.
.
DTA .

, , ,
(.1A).
.10:
MOV AH,10H
LEA DX,FCBname
INT 21H

;
;
; DOS

,
DOS ,
. AL :
00
FF

.

( ).

: FCB
________________________________________________________________
__________________________________________________________________________
page
60,132
TITLE FCBCREAT (EXE) FCB
;---------------------------------------------------------STACKSG SEGMENT PARA STACK 'Stack'
DW
80 DUP(?)
STACKSG ENDS
;---------------------------------------------------------DATASG SEGMENT PARA 'Data'
RECLEN EQU
32
NAMEPAR LABEL BYTE
; :
MAXLEN DB
RECLEN
; .
NAMELEN DB
?
;
NAMEDTA DB
RECLEN DUP(' ') ; (DTA)

FCBREC
FCBDRIV
FCBNAME
FCBEXT
FCBBLK
FCBRCSZ
FCBFLSZ

LABEL
DB
DB
DB
DW
DW
DD
DW
DT
FCBSQRC DB
DD

BYTE
04
'NAMEFILE'
'DAT'
0000
?
?
?
?
00
?

;FCB
; D
;
;
;
;
; (DOS)
; (DOS)
; (DOS)
;
;

CRLF
DB
13,10,'$'
ERRCDE DB
00
PROMPT DB
'Name? ','$'
ROW
DB
01
OPNMSG DB
'*** Open error ***', '$'
WRTMSG DB
'*** Write error ***', '$'
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
MOV
AX,0600H
CALL
Q10SCR
;
CALL
Q20CURS
;
CALL
C10OPEN
;, DTA
CMP
ERRCDE,00
; ?
JZ
A20LOOP
; - ,
RET
; - DOS
A20LOOP:
CALL
D10PROC
CMP
NAMELEN,00
; ?
JNE
A20LOOP
; - ,
CALL
G10CLSE
; -
RET
; DOS
BEGIN ENDP
;
:
;
-----------------------C10OPEN PROC
NEAR
MOV
AH,16H
;
LEA
DX,FCBREC
INT
21H
CMP
AL,00
; ?
JNZ
C20
; -
MOV
LEA
MOV
INT
RET

FCBRCSZ,RECLEN ; (EQU)
DX,NAMEDTA
; DTA
AH,1AH
21AH

LEA

DX,OPNMSG

C20:
;

CALL
RET
C10OPEN ENDP
;
;
D10PROC PROC
MOV
LEA
INT

X10ERR
:
----------------NEAR
AH,09
;
DX,PROMPT
;
21H

MOV
LEA
INT
CALL

AH,0AH
DX,NAMEPAR
21H
E10DISP

;
;

CMP
JNE
RET

NAMELEN,00
D20

; ?
; - ,
; -

MOV
MOV
MOV
CALL

BH,00
; Return
BL,NAMELEN
NAMEDTA[BX],' ' ;
F10WRIT
;
;

D20:

CLD
LEA
DI,NAMEDTA
;
MOV
CX,RECLEN / 2 ;
MOV
AX,2020H
;
REP STOSW
RET
;
D10PROC ENDP
;
:
;
----------------------------E10DISP PROC
NEAR
MOV
AH,09
;
LEA
DX,CRLF
;CR/LF
INT
21H
; DOS
CMP
ROW,18
; ?
JAE
E20
; - ,
INC
ROW
; -
RET
E20:
MOV
AX,0601H
; 1
CALL
Q10SCR
CALL
Q20CURS
;
RET
E10DISP ENDP
;
:
;
-------------F10WRIT PROC
NEAR
MOV
AH,15H
;
LEA
DX,FCBREC
INT
21H
CMP
AL,00
; ?
JZ
F20
;
LEA
DX,WRTMSG
; CALL
X10ERR
;
MOV
NAMELEN,00
F20:
RET
F10WRIT ENDP

;
;
G10CLSE PROC
MOV
CALL
MOV
LEA
INT
RET
G10CLSE ENDP
;
;
Q10SCR PROC
MOV
MOV
MOV
INT
RET
Q10SCR ENDP
;
;
Q20CURS PROC
MOV
MOV
MOV
MOV
INT
RET
Q20CURS ENDP
;
;
X10ERR PROC
MOV
INT
MOV
RET
X10ERR ENDP

:
-----------------------NEAR
NAMEDTA,1AH
; EOF
F10WRIT
AH,10H
;
DX,FCBREC
21H
:
---------------NEAR
;AX
BH,1EH
;
CX,0000
DX,184FH
10H
;
:
----------------NEAR
AH,02
BH,00
DL,00
DH,ROW
;
10H
:
---------------------------------NEAR
AH,09
;DX
21H
;
ERRCDE,01
;

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.16.1. .
, .16.1, ,
. FCB (FCBREC)
:
FCBDRIV
FCBNAME
FCBEXT
FCBBLK
FCBRCSZ
FCBSQRC

4 ( D).
- NAMEFILE.
- DAT.
- 0.
,
128.
- 0.

:
BEGIN

C10OPEN

C10OPEN
D10PROC
E10DISP
F10WRIT
G10CLSE
X10ERR

DTA DOS, D10PROC


. ,
G10PROC .
,
- 32 (.20) DTA
DOS.
,
F10WRIT
.
.
.

.


) .20 ( ) FCBFLSZ
32 ,

DTA :

1 FCBSGRC (
( ).
16
.

DTA: | |
: | 00| 01| 02|...| 15|
25 , 1
25 (.19). :
25 * 32 = 800 . 320

.
: 20030000.

:
: | 16| 17|...| 24|.1A|...|...|

,
. , ,

DTA. ,
(EOF), .
1A.
, ,
,
. ,
, FCB.

________________________________________________________________
DOS , ,
, , .
. OF:
MOV AH,OFH
LEA DX,FCBname
INT 21H

;
;
; DOS


, FCB.

, AL .FF. ,
AL 00 FCB
, 0,
.80.
.
DTA
, .
DTA .1A ( EOF
.1A) :
MOV AH,1AH
LEA DX,DTAname
INT 21H

;
; DTA
; DOS


.14:
MOV AH,14H
LEA DX,FCBname
INT 21H

;
;
; DOS

DTA
FCB. AL
:
00
01
02
03

.
, .
DTA .
, , .

DOS.
FCB
DTA.
( ) .

.

FCB

1.
(EOF),
.
,
. ,
.
, DOS .
: FCB
________________________________________________________________
__________________________________________________________________________
TITLE FCBREAD (EXE) CREATDSK
; ------------------------------------------------------STACKSG SEGMENT PARA STACK 'Stack'
DW
80 DUP(?)
STACKSG ENDS
;-------------------------------------------------------DATASG SEGMENT PARA 'Data'
FCBREC LABEL BYTE
;FCB
FCBDRIV DB
04
; D

FCBNAME
FCBEXT
FCBBLK
FCBRCSZ

DB
DB
DW
DW
DD
DW
DT
FCBSQRC DB
DD

'NAMEFILE'
'DAT'
0000
0000
?
?
?
00
?

;
;
;
;
;
;
;
;
;





(DOS)
(DOS)
(DOS)

RECLEN EQU
NAMEFLD DB

32
;
RECLEN DUP(' '), 13, 10, '$'

ENDCDE DB
00
OPENMSG DB
'*** Open error ***', '$'
READMSG DB
'*** Read error ***', '$'
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
AX
MOV
AX,DATASG
MOV
DS,AX
MOV
ES,AX
MOV
AX,0600H
CALL
Q10SCR
;
CALL
Q20CURS
;
CALL
E10OPEN
; ,
; DTA
CMP
ENDCDE,00
; ?
JNZ
A90
; -
A20LOOP:
CALL
F10READ
;
CMP
ENDCDE,00
; ?
JNZ
A90
; -
CALL
G10DISP
;
JMP
A20LOOP
;
A90:
RET
;
BEGIN ENDP
;
:
;
----------------------E10OPEN PROC
NEAR
LEA
X,FCBREC
MOV
AH,0FH
;
INT
21H
CMP
AL,00
; ?
JNZ
E20
; -
MOV
MOV
LEA
INT
RET

FCBRCSZ,RECLEN ; (EQU)
AH,1AH
DX,NAMEFLD
; DTA
21H

MOV
LEA

ENDCDE,01
DX,OPENMSG

E20:
;

CALL
RET
E10OPEN ENDP
;
;
F10READ PROC
MOV
LEA
INT
CMP
JNE
MOV
JMP
F20:
CMP
JZ
MOV
CMP
JZ
LEA
CALL
F90:
RET
F10READ ENDP
;
;
G10DISP PROC
MOV
LEA
INT
CMP
JAE
INC
JMP
G30:
MOV
CALL
CALL
G90:
RET
G10DISP ENDP
;
;
Q10SCR PROC
MOV
MOV
MOV
INT
RET
Q1OSCR ENDP
;
;
Q20CURS PROC
MOV
MOV
MOV
MOV
INT
RET
Q20CURS ENDP
;

X10ERROR
:
---------------------NEAR
AH,14H
;
DX,FCBREC
21H
NAMEFLD,1AH
; EOF?
F20
;
ENDCDE,01
;
F90
AL,00
F90
ENDCDE,01
AL,01
F90
DX,READMSG
X10ERR

; ?
; -
;:
; ?
; - ,
; -
;

:
--------------------NEAR
AH,09
;
DX,NAMEFLD
21H
ROW,20
; ?
G30
; ...
ROW
; -
G90
AX,0601H
Q10SCR
Q20CURS

;
;

() :
---------------------------NEAR
;AX
BH,1EH
;
CX,0000
DX,184FH
;
10H
:
----------------NEAR
AH,02
BH,00
DH,ROW
DL,00
10H
:

;
X10ERR PROC
MOV
INT
RET
X10ERR ENDP

---------------------------------NEAR
AH,09
;DX
21H
;

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.16.2.
.16.2 , ,
, .
FCB, , FCB
. .
:
BEGIN

E10OPEN
F10READ
G10DISP
X10ERR

, E10OPEN
DTA F10READ
. ,
, , G10DISP.
, ,
32 (.20), DTA.
.
FCB.
.

.

.
, FCB
, .
00 (16
) . DTA,
FCB 00 01:
: | 00| 01| 02|... | 15|
DTA : | 00|
.
,
01 DTA .
16
.
16-
DTA.
DTA.

AL .01.

________________________________________________________________

, ,
.

,
,
(
DTA, FCB).
A
B. ,
.

, ,

. , , 300- ,
299
, 300- . :
).
, ,
().
, DOS,
FCB
.
(
33-36) FCB.
.

( 12-13) ( 32).
p
-------------- DTA ,
. ,
. 05 FCB
.
DTA.

FCB .21:
MOV AH,21H
LEA DX,FCBname
INT 21H

;
;
; DOS


.
, DTA
AL :
00
01
02
03



- DTA
, .

,
.
- 00.

DTA FCB. ,
AL .
, ,
,
,
DTA. , , 128 ,
.. . 23

, :
| 20 | 21 | 22 | 23 |
, , 23,
.
, DTA.
35, ,
,
DTA. ,
, .
p
-------------- DTA ,
.
, , ,
, , (, )
.
FCB .22
:
MOV AH,22H
LEA DX,FCBname
INT 21H

;
;
; DOS

AL :
00
01
02 DTA.

.
00.
FCB
( ),
.
,

.
:
________________________________________________________________
page
60,132
TITLE RANREAD (COM) ,
;
FCBCREAT
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
MAIN
;----------------------------------------------------FCBREC LABEL BYTE
;FCB
FCBDRIV DB
04
; D
FCBNAME DB
'MAMEFILE'
;
FCBEXT DB
'DAT'
;
FCBBLK DW
0000
;

FCBRCSZ DW
DD
DW
DT
DB
FCBRNRC DD

0000
?
?
?
00
000000000

;
;
;
;
;
;

RECLEN
RECDPAR
MAXLEN
ACTLEN
RECDNO

32
BYTE
3
?
3 DUP(' ')

;
; :
;
;
;

EQU
LABEL
DB
DB
DB

NAMEFLD DB


(DOS)
(DOS)
(DOS)

RECLEN DUP(' '),13,10,'$' ;DTA

OPENMSG DB
'*** Open error ***',13,10,'$'
READMSG DB
'*** Read error ***',13,10,'$'
COL
DB
00
PROMPT DB
'Record number? $'
ROW
DB
00
ENDCDE DB
00
;----------------------------------------------------MAIN
PROC
NEAR
CALL
Q10CLR
;
CALL
Q20CURS
;
CALL
C10OPEN
; ,
; DTA
CMP
ENDCDE,00
; ?
JZ
A20LOOP
; - ,
RET
; -
A20LOOP:
CALL
D10RECN
;
CMP
ACTLEN,00
; ?
JE
A40
; -
CALL
F10READ
; ( )
CMP
ENDCDE,00
; ?
JNZ
A30
; -
CALL
G10DISP
;
A30:
JMP
A20LOOP
A40:
RET
;
MAIN
ENDP
;
:
;
-----------------------------------C10OPEN PROC
NEAR
MOV
AH,0FH
;
LEA
DX,FCBREC
INT
21H
CMP
AL,00
; ?
JNZ
C20
; -
MOV
FCBRCSZ,RECLEN ; (EQU)
MOV
AH,1AH
LEA
DX,NAMEFLD
; DTA
INT
21H
RET
C20:
LEA
DX,OPENMSG
CALL
X10ERR
RET
C10OPEN ENDP

;
;
D10RECN PROC
MOV
LEA
INT
MOV
LEA
INT
CMP
JB
JA
SUB
MOV
JMP
D20:
MOV
MOV
D30:
AND
AAD
MOV
D40:
MOV
CALL
RET
D10RECN ENDP
;
;
F10READ PROC
MOV
MOV
LEA
INT
CMP
JZ
LEA
CALL
F20:
RET
F10READ ENDP
;
;
G10DISP PROC
MOV
LEA
INC
INC
MOV
RET
G10DISP ENDP
;
;
Q10CLR PROC
MOV
MOV
MOV
MOV
INT
RET
Q10CLR ENDP

:
------------------------------NEAR
AH,09H
;
DX,PROMPT
21H
AH,0AH
;
DX,RECDPAR
21H
ACTLEN,01
; (0,1,2)
D40
; 0,
D20
AH,AH
; 1
AL,RECDNO
D30
AH,RECDNO
AL,RECDNO+1

; 2

AX,0F0FH

; ASCII
;
WORD PTR FCBRNRC,AX
COL,20
Q20CURS

:
---------------------NEAR
ENDCDE,00
;
AH,21H
;
DX,FCBREC
21H
AL,00
; ?
F20
; -
DX,READMSG
; -
X10ERR
;
:
-------------------NEAR
AH,09
;
DX,NAMEFLD
21H
ROW
COL,00
:
-------------NEAR
AX,0600H
;
BH,41H
; (07 /)
CX,0000
DX,184FH
10H

;
:
;
----------------Q20CURS PROC
NEAR
MOV
AH,02
;
MOV
BH,00
;
MOV
DH,ROW
MOV
DL,COL
INT
10H
RET
Q20CURS ENDP
;
:
;
---------------------------------X10ERR PROC
NEAR
MOV
AH,09
;DX
INT
21H
;
INC
ROW
MOV
ENDCDE,01
RET
X10ERR ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.16.3. .
.16.3 , ,
(. .16.1).
, ,
. 25 ,
00 24. ASCII
- .
:
C10OPEN
D10RECN

F10READ
G10DISP

, 32
DTA.
,
FCB.

00 24.
DTA
FCB.
.

D10RECN
. :
00
01
02


( AL)
( AX)

ASCII
. AX,
AAD .
AX
FCB. , , 12 ASCII
, AX 3132. AND
0102, AAD - 000C.
FCB 000 0000.


________________________________________________________________
,
DTA ,
DTA.
, .
.
,
. DTA.

CX , FCB
.28:
MOV
MOV
LEA
INT

AH,28H
CX,records
DX,FCBname
21H

;
;
;
; DOS

.
AL
:
00
01

FCB
,
. , 00 24,
25 (.19).

CX .27:
MOV
MOV
LEA
INT

AH,27H
CX,records
DX,FCBname
21H

;
;
;
; DOS

AL :
00
01
02
03



DTA
.

CX ,
FCB
, .
,
,
. , .320 (800)
.20 (32) .19 (25).
:
________________________________________________________________
__________________________________________________________________________

TITLE RANBLOK (COM)


CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
MAIN
;---------------------------------------------------FCBREC LABEL BYTE
;FCB
FCBDRIV DB
04
; D
FCBNAME DB
'NAMEFILE'
;
FCBEXT DB
'DAT'
;
FCBBLK DW
0000
;
FCBRCSZ DW
0000
;
FCBFLZ DD
?
; DOS
DW
?
; DOS
DT
?
; DOS
DB
00
;
FCBRNRC DD
00000000
;
DSKRECS DB

1024 DUP(?),'$' ;DTA

ENDCODE DB
00
NORECS DW
25
;
OPENMSG DB
'*** Open error ***',13,10,'$'
READMSG DB
'*** Open error ***',13,10,'$'
ROWCTR DB
00
; --------------------------------------------------MAIN
PROC
NEAR
CALL
Q10CLR
;
CALL
Q20CURS
;
CALL
E10OPEN
; ,
; DTA
CMP
ENDCODE,00
; ?
JNZ
A30
; -
CALL
F10READ
;
CALL
G10DISP
;
A30:
RET
;
MAIN
ENDP
;
:
;
--------------------E10OPEN PROC
NEAR
MOV
AH,0FH
;
LEA
DX,FCBREC
INT
21H
CMP
AL,00
; ?
JNZ
A30
; -
MOV
MOV
LEA
INT
RET

FCBRCSZ,0020H
AH,1AH
DX,DSKRECS
21H

DX,OPENMSG
X10ERR

; DTA

E20:
LEA
CALL
RET
E10OPEN ENDP
;
;
F10READ PROC

:
-----------NEAR

MOV
MOV
LEA
INT
MOV
RET
F10READ ENDP
;
;
G10DISP PROC
MOV
LEA
INT
RET
G10DISP ENDP
;
;
Q10CLR PROC
MOV
MOV
MOV
MOV
INT
RET
Q10CLR ENDP
;
;
Q20CURS PROC
MOV
MOV
MOV
MOV
INT
INC
RET
Q20CURS ENDP
;
;
X10ERR PROC
MOV
INT
MOV
RET
X10ERR ENDP

AH,27H
CX,NORECS
DX,FCBREC
21H
ENDCODE,AL

;
;
;

:
-------------------NEAR
AH,09
;
DX,DSKRECS
21H
:
--------------------------NEAR
AX,0600H
;
BH,41H
; (07 /)
CX,0000
DX,184FH
10H
:
-----------------------------NEAR
AH,02
;
BH,00
DH,ROWCTR
DL,00
10H
ROWCTR
:
-------------------------------------NEAR
AH,09
;DX
21H
;
ENDCODE,01

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.16.4. .
.16.4 , ,
.16.1.
00, CX - 25
DTA ( , ,
).

25 .
:

E10OPEN
F10READ
G10DISP

, FCB 32
DTA.
25
.

00 FCB
00 00.
FCB .19,
- .19000000.
-
________________________________________________________________

DOS INT 25H
26H.
, DOS INT
21H.
,
,
. " "
( ).


0, 1, :

0
0
1
1
2

1
2
1
9
9


0
1
9
17
26

:
= ( 9) + ( - 1)
, 2

(2 9) + (9 - 1) = 18 + 8 = 26
-:
MOV
MOV
MOV
MOV
INT

AL,drive#
BX,addr
CX,sectors
DX,record#
25H 26H

;0 A, 1 B ..
; -
;
;
;


, , CF
(0) (1) .
AL :
AL
1000 0000
0100 0000

0010
0001
0000
0000
0000
0000

0000
0000
1000
0100
0011
0010


?
DMA


INT .
INT ,
CF.

________________________________________________________________
DOS
.
: .D
--------------------
.
( )
. DOS .D
. ,
.
MOV AH,ODH
INT 21H

;
; DOS

: .E
------------------------------------- DOS .E -
( ) . DL,
0 A, 1 - B ..
MOV AH,OEH
MOV DL,02
INT 21H

;
; C
; DOS

AL (
). DOS 2 A
B, DOS 02 . (
INT
11H).
: .11 12
-----------------------------------------
, , .

DX FCB
11H. FCB
(. DOS).
MOV AH,11H
LEA DX,FCBname

;
; FCB

INT 21H

; DOS

FCB 5CH
, (DTA ).
. .22.
AL .FF, ,
.00, . DTA (1=A,
2=B ..) .
(,
*.ASM),
12H:
MOV AH,12H
LEA DX,FCBname
INT 21H

;
; FCB
; DOS

AL 11H.
: .13
------------------------ DOS 13H.

.
MOV AH,13H
LEA DX,FCBname
INT 21H

;
; FCB
; DOS

,
00, .FF.

AL

: .17
------------------------------ DOS
.17. FCB,
- 16.
MOV AH,17H
LEA DX,FCBname
INT 21H

;
; FCB
; DOS

? *
.
AL 00, (
) - FF.
: .19
--------------------------------------------- DOS .19 :
MOV AH,19H
INT 21H

;
; DOS

. AL (0=A, 1=B
..). FCB
.

FAT (1B 10), (24),


(25), (26)
(29).
DOS.
:
________________________________________________________________
__________________________________________________________________________
TITLE SELDEL (COM)

;
;
;
: *.*, *.BAK, ..
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H
BEGIN JMP
MAIN
; ---------------------------------------------------------TAB
EQU
09
LF
EQU
10
CR
EQU
13
CRLF
DB
CR,LF,'$'
DELMSG DB
TAB,'Erase','$'
ENDMSG DB
CR,LF,'No more directory entries',CR,LF,'$'
ERRMSG DB
'Write protected disk','$'
PROMPT DB
'y = Erase, N = Keep, Ret = Exit',CR,LF,'$'
; ---------------------------------------------------------MAIN
PROC
NEAR
;
MOV
AH,11H
;
CALL
D10DISK
CMP
AL,0FFH
; ,
JE
A90
;
LEA
DX,PROMPT
;
CALL
B10DISP
A20:
LEA
DX,DELMSG
;
CALL
B10DISP
;
MOV
CX,11
;11
MOV
SI,81H
;
A30:
MOV
DL,[SI]
;
CALL
C10CHAR
;
INC
SI
;
LOOP
A30
MOV
DL,'?'
CALL
C10CHAR
MOV
AH,01
;
INT
21H
;
CMP
AL,ODH
; Return?
JE
A90
; -
OR
AL,00100000B
;
;
CMP
AL,'y'
; ?
JNE
A50
; - ,
MOV
AH,13H
; -
MOV
DX,80H
INT
21H
CMP
AL,0
; ?
JZ
A50
; -

LEA
CALL
JMP

DX,ERRMSG
B10DISP
A90

; -
;

LEA
CALL
MOV
CALL
CMP
JNE

DX,CRLF
B10DISP
AH,12H
B10DISK
AL,0FFH
A20

A50:

;
; ?
; -

A90:
RET
MAIN
ENDP
;
;
B10DISP PROC
MOV
INT
RET
B10DISP ENDP
;
;
C10CHAR PROC
MOV
INT
RET
C10CHAR ENDP
;
;
D10DISK PROC
MOV
INT
CMP
JNE
PUSH
LEA
CALL
POP
D90:
RET
D10DISK ENDP

; DOS
;
--------------------NEAR
; DX
AH,09
;
21H
;
---------------------NEAR
; DL
AH,02
21H
:
-----------------------NEAR
DX,5CH
; FCB
21H
AL,0FFH
; ?
D90
AX
; AL
DX,ENDMSG
B10DISP
AX
; AL

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.16.5. .
.16.5 COM- SDEL,
DOS 11H, 12H 13H .
,, :
SDEL *.*
SDEL *.BAK
SDEL TEST.*

( )
( BAK-)
( TEST)

DOS

,
. DOS PSP
( ) .81 (DTA ).
. Y

() , N () , Return
.
,
COM-, EXE-
.5 81 PSP.
.

________________________________________________________________
- , INT 21H DOS
- , (FCB)
.
- 128 .
FCB ,
.
- FCB
: , ,

.
- , ,
FCB.
- - (DTA) ,
. ,
,

DTA.
- FCB
: , , (.80),
.
.
- , DOS INT 21H,
,
( )
.
- DOS INT 21H
FCB.
- DOS INT 21H

.
-
FCB.
- ( )
.
- ,
DTA.
, .
-
.

.
- DOS INT 25H 26H

, ,

.

________________________________________________________________
16.1. DOS : )
, ) DTA, ) , )
, ) .
16.2. ,

. ) ? )

? ) ()
,

?
16.3. , ,
: ( ),
(12 ) ( ).
.
ASCII .
16.4. , ,
16.3.
16.5.
: )45, )73, )150, )260.
16.6. 2652 ()
FCB?
16.7.

: ) , ) , ) , )
.
16.8.
,
, .
FCB FLSZ FCB FCSZ.
16.9. 16.4
, ,

. ,
.

023
024
027
049
114
117
122
124
127

00315
00430
00525
00920
11250
00630
10520
21335
00960

232
999

05635
00000

16.10. 16.9 ,
.

16.11. 16.9
,

)
, )
)
( ).

17
III: DOS
__________________________________________________________________________
: DOS,
2.0 .

________________________________________________________________
DOS ,
16, DOS.
, DOS 2.0 3.0
. ,
,
DOS.

DOS. DOS ,
UNIX.
ASCIIZ
, ;
; .
ASCIIZ
________________________________________________________________

DOS ASCIIZ,
,
(
)

, :
PATHNM1
PATHNM2

DB
DB

'B:\TEST.ASM',0
'C:\UTILITY\NU.EXE',0

( )

. (zero) ( ASCIIZ
). , ASCIIZ ,
DX, , LEA
DX,PATHNM1.

________________________________________________________________
AX

, . 8
,
: 0 - , 1 - , 2
- , 3 - , 4 - .

ASCIIZ DOS .3C 3D.
CF 0 AX.
DW
.
CF 1, AX ,
(..17.1).
__________________________________________________________________________
01
02
03
04
05 ( )
06
07
08
09
10
11
12
13
15
16
17 ?
18
__________________________________________________________________________
.17.1.

________________________________________________________________
,
DOS.
: .3C
------------------------

.3C. DX
ASCIIZ-, CX - .
15; - 0.
:
MOV
MOV
LEA
INT
JC
MOV

AH,3CH
CX,00
DX,PATHNM1
21H
error
HANDLE1,AX

;
;
;ASCIIZ
; DOS
;
; DW


, CF AX.

.
(..

), 0 .
CF 1
AX : 03, 04 05 (..17.1). 05
,

" ".
CF,
AX 0005,
05 ( ).
: .40
---------------------- DOS .40.
BX , CX -
, DX - .
256 OUTREC:
HANDLE1 DW
OUTREC DB
MOV
MOV
MOV
LEA
INT
JC
CMP
JNE

?
256 DUP (' ')
AH,40H
;
BX,HANDLE1
;
CX,256
;
DX,OUTREC
;
21H
; DOS
error2
;
AX,256
; ?
error3

(256
), CF AX
. ,
. CF
1, AX 05 ( ) 06
( ).

BX

: .3E
-------------------------
, DOS .3E, .

FAT.
MOV AH,3EH
MOV BX,HANDLE1
INT 21H

;
;
; DOS

AX 06 (
).
: .
________________________________________________________________
__________________________________________________________________________
TTILE

page
60,132
HANCREAT (EXE)

; ----------------------------------------------------STACKSG SEGMENT PARA STACK 'Stack'


DW
80 DUP(?)
STACKSG ENDS
; ----------------------------------------------------DATASG SEGMENT PARA 'Data'
NAMEPAR LABEL BYTE
; :
MAXLEN DB
30
;
NAMELEN DB
?
;
NAMEREC DB
30 DUP(' '), 0DH, 0AH ; , CR/LF
ERRCDE DB
00
HANDLE DW
?
PATHNAM DB
'D:\NAMEFILE.DAT',0
PROMPT DB
'Name? '
ROW
DB
01
OPNMSG DB
'*** Open error ***', 0DH, 0AH
WRTMSG DB
'*** Write error ***', 0DH, 0AH
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
MOV
AX,0600H
CALL
Q10SCR
;
CALL
Q20CURS
;
CALL
C10CREA
; , DTA
CMP
ERRCDE,00
; ?
JZ
A20LOOP
; - ,
RET
; - DOS
A20LOOP:
CALL
D10PROC
CMP
NAMELEN,00
; ?
JNE
A20LOOP
; - ,
CALL
G10CLSE
; -
RET
;
DOS
BEGIN ENDP
;
:
;
----------------------C10CREA PROC
NEAR
MOV
AH,3CH
;
MOV
CX,00
;
LEA
CX,PATHNAM
INT
21H
JC
C20
; ?
MOV
HANDLE,AX
; - ,
RET
C20:
; LEA
DX,OPNMSG
;
CALL
X10ERR
;
RET
C10CREA ENDP
;
:
;
----------------D10PROC PROC
NEAR

MOV
MOV
MOV
LEA
INT

AH,40H
BX,01
CX,06
DX,PROMPT
21H

;
; (Handle)
;
;

MOV
LEA
INT
CMP
JNE
RET

AH,0AH
DX,NAMEPAR
21H
NAMELEN,00
D20

;
;

MOV
SUB
MOV
LEA
ADD
NEG
ADD
REP

AL,20H
CH,CH
CL,NAMELEN
DI,NAMEREC
DI,CX
CX
CX,30
STOSB

F10WRIT
E10SCRL

;
;

; ?
; -
; -

D20:
;
;
; +
;
;
;

D90:
CALL
CALL
RET
D10PROC ENDP
;
;
E10SCRL PROC
CMP
JAE
INC
JMP
E10:
MOV
CALL
E90:
CALL
RET
E10SCRL ENDP
;
;
F10WRIT PROC
MOV
MOV
MOV
LEA
INT
JNC
LEA
CALL
MOV
F20:
RET
F10WRIT ENDP
;
;
G10CLSE PROC
MOV
CALL
MOV

:
--------------------NEAR
ROW,18
;
E10
; - ,
ROW
; -
E10
AX,0601H
Q10SCR
Q20CURS
:
-------------NEAR
AH,40H
BX,HANDLE
CX,32
DX,NAMEREC
21H
F20
DX,WRTMSG
X10ERR
NAMELEN,00

;
;

;
;30 + 2 CR/LF
; ?
; ;

:
----------------------NEAR
NAMEREC,1AH
; (EOF)
F10WRIT
AH,3EH
;

MOV
BX,HANDLE
INT
21H
RET
G10CLSE ENDP
;
() :
;
---------------------------Q10SCR PROC
NEAR
; AX -
MOV
BH,1EH
; -
MOV
CX,0000
MOV
DX,184FH
INT
10H
;
RET
Q10SCR ENDP
;
:
;
----------------Q20CURS PROC
NEAR
MOV
AH,02
MOV
BH,00
MOV
DH,ROW
;
MOV
DL,00
INT
10H
RET
Q20CURS ENDP
;
:
;
------------------------X10ERR PROC
NEAR
;DX
MOV
AH,40H
;
MOV
BX,01
MOV
CX,21
;
INT
21H
MOV
ERRCDE,01
;
RET
X10ERR ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.17.2. .
, .17.2, ,
.
:
C10CREA
D10PROC
F10WRIT
G10CLSE

.3C
HANDLE.

.
, .40.
, .3E,
, .

30 :
(.0DH) (.0AH).
- 32 . 32-x
, . "
" " ", ,
. DOS SORT
. SORT
:

SORT

B:<NAMEFILE.DAT

>NAMEFILE.SRT

NAMEFILE.DAT
NAMEFILE.SRT.
, .17.3
NAMEFILE.SRT . : 1)

. 2)
( );
,
.17.4.

________________________________________________________________

DOS.
: .3D
------------------------ ,
, .3D.
. DX
ASCIIZ-, AL -
:
0
1
2
AL DOS
3.0 (. DOS). ,
(.3C),
. :
MOV
MOV
LEA
INT
JC
MOV

AH,3DH
AL,00
DX,PATHNM1
21H
error4
HANDLE2,AX

;
;
; ASCIIZ
; DOS
;
; DW

,
1, ,
CF AX.
.
, CF
AX : 02, 04, 05 12 (. .17.1).
CF.
AX 0005, 05
( ).
: .3F
---------------------- DOS .3F.
BX , CX -

DX - .
512- :
HANDLE2
INPREC

DW
DB
MOV
MOV
MOV
LEA
INT
JC
CMP
JE

?
512 DUP (' ')
AH,3FH
;
BX,HANDLE2
;
CX,512
;
DX,INPREC
;
21H
; DOS
error5
;
AX,00
; 0 ?
endfile

,
CF AX
. AX
. CF
AX 05 ( ) 06 ( ).
DOS ,
, ,
.
:
________________________________________________________________
__________________________________________________________________________
page
60,132
TITLE HANREAD (EXE) , HANCREAT
; ----------------------------------------------------STACKSG SEGMENT PARA STACK 'Stack'
DW
80 DUP(?)
STACKSG ENDS
; ----------------------------------------------------DATASG SEGMENT PARA 'Data'
ENDCDE DB
00
HANDLE DW
?
IOAREA DB
32 DUP(' ')
PATHNAM DB
'D:\NAMEFILE.SRT',0
OPENMSG DB
'*** Open error ***', 0DH, 0AH
READMSG DB
'*** Read error ***', 0DH, 0AH
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
AX
MOV
AX,DATASG
MOV
DS,AX
MOV
ES,AX
MOV
AX,0600H
CALL
Q10SCR
;
CALL
Q20CURS
;
CALL
E100PEN
; ,
;
; DTA

CMP
JNZ

ENDCDE,00
A90

; ?
; -

F10READ
ENDCDE,00
A90
G10DISP
A20LOOP

;
; ?
; - ,
; - ,
;

:
-------------NEAR
AH,3DH
CX,00
DX,PATHNAM
21H
E20
HANDLE,AX

;
;

ENDCDE,01
DX,OPENMSG
X10ERR

; -
;

A20LOOP:
CALL
CMP
JNZ
CALL
JMP
RET
ENDP

A90:
BEGIN
;
;
E100PEN PROC
MOV
MOV
LEA
INT
JC
MOV
RET
E20:
MOV
LEA
CALL
RET
E100PEN ENDP
;
;
F10READ PROC
MOV
MOV
MOV
LEA
INT
JC
CMP
JE
CMP
JE
RET
F20:
LEA
CALL
F30:
MOV
F90:
RET
F10READ ENDP
;
;
G10DISP PROC
MOV
MOV
MOV
LEA
INT
CMP
JEA
INC
RET
G90:

; ?
; -
;

:
---------------------NEAR
AX,3FH
;
BX,HANDLE
CX,32
;30 , 2 CR/LF
DX,IOAREA
21H
F20
; ?
AX,00
; ?
F30
IOAREA,1AH
; (EOF)?
F30
; -
DX,READMSG
X10ERR

; -
;

ENDCDE,01

:
-------------------NEAR
AH,40H
;
BX,01
;
CX,32
;
DX,IOAREA
21H
ROW,20
; ?
G90
; -
ROW

MOV
CALL
CALL
RET
G10DISP ENDP
;
;
Q10SCR PROC
MOV
MOV
MOV
INT
RET
Q10SCR ENDP
;
;
Q20CURS PROC
MOV
MOV
MOV
MOV
INT
RET
Q20CURS ENDP
;
;
X10ERR PROC
MOV
MOV
MOV
INT
RET
X10ERR ENDP

AX,0601H
Q10SCR
Q20CURS

; ()
;

() :
---------------------------NEAR
; AX -
BH,1EH
;
CX,0000
DXX,184FH
;
10H
:
----------------NEAR
AH,02
;
BH,00
;
DH,ROW
;
DL,00
;
10H
:
------------------------NEAR
AH,40H
; DX -
BX,01
;
CX,20
;
21H

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.17.3. .
.17.3 , ,
(..17.2) DOS SORT.
.3D.
HANDLE
.3F .
,
" " " ".
ASCII- ( ASCII)
________________________________________________________________

. ASCII- (
), DOS .

FAT,
, . DOS , ,
ASM- ,
(.09), (.OD) (.OA).

DOS ,
, ,
" ".
, :
<tab>MOV<tab>AH,09<return>
ASCII- :
094D4F560941482C30390D0A
TYPE
"", " " " "
.
, .17.4,
HANREAD.ASM ( . 17.3) .
HANREAD ,
.
__________________________________________________________________________
page
60,132
TITLE ASCREAD (COM) ASCII
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
MAIN
; ------------------------------------------------SECTOR DB
512 DUP(' ')
;
DISAREA DB
120 DUP(' ')
;
ENDCDE DW
00
HANDLE DW
0
OPENMSG DB
'*** Open error ***'
PATHNAM DB
'D:\HANREAD.ASM', 0
ROW
DB
00
; ------------------------------------------------MAIN
PROC
NEAR
;
MOV
AX,0600H
CALL
Q10SCR
;
CALL
Q20CURS
;
CALL
E10OPEN
; ,
; DTA
CMP
ENDCDE,00
; ?
JNE
A90
; - ,
A20LOOP:
; -
CALL
R10READ
;
CMP
ENDCDE,00
; , ?
JE
A90
; -
CALL
G10XPER
;
A90:
RET
;
MAIN
ENDP
;
:
;
--------------------E10OPEN PROC
NEAR
MOV
AH,3DH
;
MOV
AL,00
;
LEA
DX,PATHNAM
INT
21H
JNC
E20
; CF
CALL
X10ERR
; ,

RET
E20:
MOV
HANDLE,AX
;
RET
E10OPEN ENDP
;
:
;
-------------------------------G10XPER PROC
NEAR
CLD
; -
LEA
SI,SECTOR
G20:
LEA
DI,DISAREA
G30:
LEA
DX,SECTOR+512
CMP
SI,DX
; ?
JNE
G40
; - ,
CALL
R10READ
; -
CMP
ENDCDE,00
; ?
JE
G80
; -
LEA
SI,SECTOR
G40:
LEA
DX,DISAREA+80
CMP
DI,DX
; DISAREA?
JB
G50
; - ,
MOV
[DI],0D0AH
; - CR/LF
CALL
H10DISP
;
LEA
DI,DISAREA
G50:
LODSB
; [SI] AL
; SI
STOSB
; AL [DI]
; DI
CMP
AL,1AH
; ?
JE
G80
; -
CMP
AL,0AH
; ?
JNE
G30
; - ,
CALL
H10DISP
; -
JMP
G20
G80:
CALL
H10DISP
;
G90:
RET
G10XPER ENDP
;
:
;
--------------------H10DISP PROC
NEAR
MOV
AH,40H
;
MOV
BX,01
; (Handle)
LEA
CX,DISAREA
;
NEG
CX
;
ADD
CX,DI
;
LEA
DX,DISAREA
INT
21H
CMP
ROW,22
; ?
JAE
H20
; -
INC
ROW
JMP
H90
H20:
MOV
AX,0601H
; ()
CALL
Q10SCR
CALL
Q20CURS

H90:
RET
H10DISP ENDP
;
;
R10READ PROC
MOV
MOV
MOV
LEA
INT
MOV
RET
R10READ ENDP
;
;
Q10SCR PROC
MOV
MOV
MOV
INT
RET
Q10SCR ENDP
;
;
Q20CURS PROC
MOV
MOV
MOV
MOV
INT
RET
Q20CURS ENDP
;
;
X10ERR PROC
MOV
MOV
MOV
LEA
INT
MOV
RET
X10ERR ENDP

:
-----------------------NEAR
AH,3FH
;
BX,HANDLE
;
CX,512
;
DX,SECTOR
;
21H
ENDCDE,AX
() :
---------------------------NEAR
; AX
BH,1EH
;
CX,0000
;
DX,184FH
10H
:
----------------NEAR
AH,02
;
BH,00
;
DH,ROW
DL,00
10H
:
---------------------------------NEAR
AH,40H
;
BX,01
;
CX,18
;
DX,OPENMSG
21H
ENDCDE,O1
;

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.17.4. ASCII-.
, DOS TYPE, ..
" " "
" (CR/LE). ()

.
,

.
. ASCII-
, ,

.

SECTOR. G10XFER SECTOR
DISAREA, .
" ", DISAREA,
" ". (
(.09)
8).
(
) . ASCII-,
ASM-,

CR/LF. ,
EXE OBJ,
DISAREA .
ASCII-,
.
G10XFER :
1.
2.
3.
4.
5.
6.
7.

SECTOR.
DISAREA.
SECTOR .
, ,
SECTOR.
DISAREA CR/LF,
DISAREA.
SECTOR DISAREA.
" " (.1A) .
" " (.OA)
.2, .3.

DEBUG.

, DOS .
.
DOS
________________________________________________________________
: .36
------------------------------------------------------------- .
DL (0 -
, 1 - A, 2 - B ..):
MOV AH,36H
MOV DL,0
INT 21H

;
;
; DOS


AX .FFFF, :

AX
BX
CX
DX

,
,
,
.

DOS 2.0
.1B ( FAT).

: .41
------------------------ (
" ") .41. DX
ASCIIZ , :
MOV AH,41H
LEA DX,PATHNAM
INT 21H

;
;ASCIIZ-
; DOS

AX 02 ( )
05 ( ).
: .42
---------------------------------------- DOS ,
0 1
.
.42,
.
BX
CX:DX .
65.535 CX 0, DX - .
AL ,
:
0 - .
1 - ,
, .
2 - . (
) ,
CX:DX 0 2 AL.

1024 :
MOV
MOV
LEA
MOV
MOV
INT
JC

AH,42H
AL,00
BX,HANDLE1
CX,00
DX,1024
21H
error

;
;
;
;
; 1024
; DOS

CF
DX:AX.
CF 1 AX 01 ( ) 06
( ).
: .43
-----------------------------------------
.43H. DX
ASCIIZ . AL
00. AL 01,
CX - .
:

MOV
MOV
MOV
LEA
INT

AH,43H
AL,01
CX,00
DX,PATHNM2
21H

;
;
;
;ASCIIZ-
; DOS


CX.
CX.
AX 02, 03 05.
: .47
-------------------------------------
.47.
,
DX. DL
: 0 - , 1 - A, 2 - B ..
(
), , :
ASSEMBLE\EXAMPLES
(.00)
.
- .00.
. .17.5
.
__________________________________________________________________________
TITLE GETPATH (COM)
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; ----------------------------------------------PATHNAM DB
65 DUP(' ')
;
; ----------------------------------------------MAIN
PROC
NEAR
MOV
AH,19H
;
INT
21H
ADD
AL,41H
; .
MOV
DL,AL
; : 0=A, 1=B ...
CAL
B10DISP
; ,
MOV
DL,':'
CAL
B10DISP
; ,
MOV
DL,'\'
CAL
B10DISP
;
MOV
MOV
LEA
INT

AH,47H
DL,00
SI,PATHNAM
21H

A10LOOP:
CMP
JE
MOV

BYTE PTR [SI],0 ;


A20
; -
AL,[SI]
;

MOV
CALL
INC
JMP
RET
ENDP

A20:
MAIN

B10DISP PROC
MOV
INT
RET
B10DISP ENDP

DL,AL
B10DISP
SI
A10LOOP

;
;
; DOS

NEAR
AH,02
21H

; DL -
;

CODESG ENDS
END
BEGIN
__________________________________________________________________________
.17.5. .
: .4E .4F
------------------------------------------- . 11 12 DOS.
4E , 4F -
. DX
ASCIIZ-, .
? *. CX
(, ,
).
MOV
MOV
LEA
INT

AH,4EH
CX,00H
DX,PATHNM1
21H

;
;
;ASCIIZ-
; DOS

, ,
DTA FCB :
00
21
22
24
26
30

DOS



: ,
13- ASCIIZ , .00.

AX 02 ( ) 18
( ). ( .4E)
4F.
DTA.
MOV AH,4FH
INT 21H

;
; DOS

AX - 18 ( ).
CF.
: .56
------------------------------ .56.

DX ASCIIZ-,
, , , DI (
ES:DI) - ASCIIZ-,
, , .
, .
,
, .
MOV
LEA
LEA
INT

AH,56H
DX,oldstring
DI,newstring
21H

;
;DS:DX
;ES:DI
; DOS

AX 03 (
), 05 ( ?) 17 ( ).
DOS, ,
(.39), (.3A),
(. 3B), -
(.44),

(.45),

(.46),

? (.54).

________________________________________________________________
- DOS ASCIIZ-,
, .00.
- ,
.
- CF
AX.
- , ,
- .
- , ,
, .

________________________________________________________________
17.1. " "
" " ?
17.2. ASCIIZ- PATH1 CUST.LST
C.
17.3. (.17.2) )
CUSTHAN , ) , )
CUSTOUT (128 ) ) .
.
17.4. (.17.3) ) )
CUSTIN. .
17.5. ,

?
17.6. .17.4 ,
, .

, .. Return.

18
IV: BIOS
__________________________________________________________________________
: BIOS
.

________________________________________________________________

BIOS, BIOS
/ . BIOS INT 13H
"", ,
.
,
:
AH
AL
CH
CL
DH
DL
ES:BX

:
.
.
.

() : 0
: 0=A, 1=B
/
).

.
1 .
..
(

BIOS
________________________________________________________________
INT 13H
AH .
AH = 00:
--------------------------------------------
INT 13H AH .00.
,
.
AH = 01:
---------------------------------------- AL
/ (. ).
01 AH.

AH = 02:
-------------------------
. 1, 8 9.
BX,
, EX,
ES:BX.
INSECT,

, :
MOV
MOV
LEA
MOV
MOV
MOV
MOV
INT

AH,02
AL,01
BX,INSERT
CH,05
CL,03
DH,00
DL,01
13H

;
;
; ES:BX
; 05
; 03
; () 00
; 01 (B)
; BIOS

AL.
DS, BX, CX DX .

.
CH CL. ,
, 01,
1 0 1
(
).
AH = 03:
------------------------- (
512 512) .

( 02). AL ,
. DX, BX, CX DX
.
AH = 04:
----------------------------- , ,
.
( 03) ,
/.

( 03),
ES:BX - .

AL . DX, BX, CX
DX .
AH = 05:
--------------------------------
(
PC - 512).
. ES:BX
,
.
T/H/S|B,

T
H
S
B

,
,
,
, (00-128, 01-256, 02-512, 03-1024).

, 03 , 00 512
, .03000102

.
AT BIOS.

________________________________________________________________
(02, 03, 04 05)
CF AH 0.
CF 1, AH ,
.
AL 01.
AH
0000
0000
0000
0000
0000
0000
0001
0010
0100
1000

0001
0010
0011
0100
1000
1001
0000
0000
0000
0000





DMA ( )
64K


()

,
(AH=00) .
,

.
: BIOS
________________________________________________________________
__________________________________________________________________________
TITLE BIOREAD (COM) BIOS
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG
100H
BEGIN JMP
MAIN
; --------------------------------------------------------RECDIN DB
512 DUP(' ')
;
ENDCDE DB
00
CURADR DW
0304H
; (/)
ENDADR DW
0501H
; (/)
READMSG DB
'*** Read error ***$'
SIDE
DB
00
; --------------------------------------------------------MAIN
PROC
NEAR
MOV
AX,0600H
;

A20LOOP:
CALL
CALL
CALL
MOV
MOV
CMP
JE
CALL
CMP
JNZ
CALL
JMP
RET
ENDP

A90
MAIN
;
;
C10ADDR PROC
MOV
CMP
JNE
CMP
JE
INC
C20:
XOR
MOV
MOV
C90:
RET
C10ADDR ENDP
;
;
F10READ PROC
MOV
MOV
LEA
MOV
MOV
MOV
INT
CMP
JZ
MOV
CALL
F90:
INC
RET
F10READ ENDP
;
;
G10DISP PROC
MOV
MOV
MOV
LEA
INT
RET
G10DISP ENDP
;
;

Q10SCR
Q20CURS
C10ADDR
CX,CURADR
DX,ENDADR
CX,DX
A90
F10READ
ENDCDE,00
A90
G10DISP
A20LOOP

;
;
;
; ?
; -
;
; ?
; -
;
;
;

:
---------------------------------NEAR
CX,CURADR
; /
CL,10
; ?
C90
; -
SIDE,00
;, = 0
C20
CH
;
SIDE,01
CL,01
CURADR,CX

;
; = 1

:
-----------------------NEAR
AL,01
;
AH,02
;
BX,RECDIN
;
CX,CURADR
;/
DH,SIDE
;
DL,01
; B
13H
;
AH,00
; ?
F90
; -
ENDCDE,01
; X10ERR
;
CURADR

:
---------------------NEAR
AH,40H
;
BX,01
;
CX,512
;
DX,RECDIN
21H
:
--------------

Q10SCR PROC
NEAR
MOV
AX,0600H
;
MOV
BH,1EH
;
MOV
CX,0000
;
MOV
DX,184FH
INT
10H
RET
Q10SCR ENDP
;
:
;
----------------Q20CURS PROC
NEAR
MOV
AH,02
;
MOV
BH,00
;
MOV
DX,0000
INT
10H
RET
Q20CURS ENDP
;
:
;
---------------------------------X10ERR PROC
NEAR
MOV
AH,40H
;
MOV
BH,01
;
MOV
CX,18
;
LEA
DX,READMSG
INT
21H
RET
X10ERR ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.18.1. BIOS .
, .18.1,
BIOS INT 13H .
, .16.3, :
1. FCB .
2. .
.
10 C10ADDR 01.
= 1, ;
: 0 1 1 0.
3. CURADR
( ), ENDADR -
. -

.

DEBUG.
, ,
FAT
( FAT ).
G ()
FAT .
DEBUG
ASCII- .
, DEBUG (. .14.5).
(

""),
.
, DOS
, .
, BIOS INT 13H

.

________________________________________________________________
- BIOS INT 13H
.
- BIOS INT 13H ,
, .
-
, .
-
BIOS.

________________________________________________________________
18.1. .
18.2. .
18.3. BIOS INT 13H,
INDISK, A, 0, 6
3.
18.4. BIOS INT 13H,
OUTDISK, B, 0, 8
1.
18.5. 18.4,
?
18.6. 18.4
( ).

19

__________________________________________________________________________
:
().

________________________________________________________________
.
, DOS INT 21H
BIOS INT 17H. , , "

", " " " ".


.
,
.

, ,
, , ,
-
.

"" ,
.
10, 12 15
, ,
, .
,
.
.
IBM PC ,
. ,
, .
, .
().
"" , ,
, .
, "" ,
"".

.

________________________________________________________________
:
.

08
09
10
11
12
13

08
09
0A
0B
0C
0D

(. 09) ,
, .
.
.
(.OA)
.
.
.
.
11 . ,
.
,
.

(, 55 ) (.0C) , ,
0 1.
" "
" "
,
.
" "
.
DOS
________________________________________________________________
DOS 2.0 ,
.
DOS .40
04. 25
HEADG:
HEADG

DB
...
MOV
MOV
MOV
LEA
INT

'Industrial Bicycle Mfrs', 0DH, 0AH


AH,40H
BX,04
CX,25
DX,HEADG
21H

;
;
;25
;
; DOS

CF
AX.
:
________________________________________________________________
__________________________________________________________________________
TITLE PRTNAME (COM)
CODESG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; ----------------------------------------------------NAMEPAR LABEL BYTE
;
MAXNLEN DB
20
;
NAMELEN DB
?
;
NAMEFLD DB
20 DUP(' ')
;
; :
HEADG DB
'List of Employee Names
Page '
PAGECTR DB
'01',0AH,0AH
FFEED DB
0CH
;
LFEED DB
0AH
;
LINECTR DB
01
PROMPT DB
'Name? '
; ----------------------------------------------------MAIN
PROC
NEAR
CALL
Q10CLR
;
CALL
M10PAGE
;
A2LOOP:
MOV
DX,0000
; 00,00
CALL
Q20CURS
CALL
D10INPT
;

CALL
CMP
JE
CALL

Q10CLR
NAMELEN,00
A30
E10PRNT

JMP

A20LOOP

MOV
LEA
CALL
RET
ENDP

CX,01
DX,FFEED
P10OUT

; ?
; - ,
; -
;

A30:

MAIN
;
;
D10INPT PROC
MOV
MOV
MOV
LEA
INT
MOV
LEA
INT
RET
D10INPT ENDP
;
;
E10PRNT PROC
CMP
JB
CALL
E20:
MOV
MOV
LEA
CALL
MOV
LEA
CALL
INC
E10PRNT ENDP
;
;
M10PAGE PROC
CMP
JE
MOV
LEA
CALL
MOV
M30:
MOV
LEA
M40:
CALL
INC
CMP
JNE
MOV
INC
M50:
RET

; :
;
; ,
; DOS

:
----------------------NEAR
AH,40H
;
BX,01
;
CX,05
; 5
DX,PROMPT
21H
; DOS
AH,0AH
;
DX,NAMEPAR
21H
; DOS
:
---------------------NEAR
LINECTR,60
; ?
E20
; -
M10PAGE
; -
CH,00
CL,NAMELEN
;
DX,NAMEFLD
;
P10OUT
;
CX,01
;
DX,LFEED
;
P10OUT
LINECTR
;
:
----------------------------NEAR
WORD PTR PAGECTR,3130H ; ?
M30
; -
CX,01
;
DX,FFEED
; -P10OUT
; ,
LINECTR,03
;
CX,36
DX,HEADG

;
;

P10OUT
PAGECTR+1
PAGECTR+1,3AH
M50
PAGECTR+1,30H
PAGECTR

;
; = .xx3A?
; - ,
; - ASCII

M10PAGE ENDP
;
:
;
------------------P10OUT PROC
NEAR
;CX DX
MOV
AH,40H
;
MOV
BX,04
;
INT
21H
; DOS
RET
P10OUT ENDP
;
:
;
-------------Q10CLR PROC
NEAR
MOV
AX,0600H
;
MOV
BH,60H
; (07 /)
MOV
CX,0000
; 00,00
MOV
DX,184FH
; 24,79
INT
10H
; BIOS
RET
Q10CLR ENDP
;
(/):
;
---------------------------------Q20CURS PROC
NEAR
;DX
MOV
AH,02
;
MOV
BH,00
; 0
INT
10H
; BIOS
RET
Q20CURS ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.19.1. .
, .19.1, .9.1,
,
, .
:
List of Employee Names
Clancy Alderson
Ianet Brown
David Christie
...

Page 01


.
:
D10INPT
E10PRNT
M10PAGE
P100UT

.
(
);
M10PAGE.
, ,

.

.

. M10PAGE
, PAGECTR 01 ( ).
PAGECTR
PAGECTR DB '01'
,
. M10PAGE
, PAGECTR 01 ( ).
PAGECTR
PAGECTR

DB

'01'

ASCII- - .3031.
M10PAGE PAGECTR 1 ,
3032, 3033 .. 3039,
303A, , (:). ,
PAGECTR .3A,
.30, . .303A
.3130, .. 10 .
( ) ,

.
ASCII-
________________________________________________________________
, , , ,
( 09)
, 8. ,
8, 16, 24 .. , ,
. , , DOS PRINT,
ASCII (
) , . ,

,
8.
, .19.2,
, , .
.17.3 ( )
.
0 7
8, 8 15 - 16 .. , ,
G10XFER G60.
:
:
1
9
21
:
00000001 00001001 00010101
: 00000000 00001000 00010000
8:
00001000 00010000 00011000
:
8
16
24
:
10PRMP
E10OPEN
G10XFER

. Return
.
.
, , ,
" " .
.

P10PRNT
R10READ

.
.

" ", " " "


"
.
(.OC)
, , 62.
"
" ASCII
, , . ,
05 DOS.
.
.
__________________________________________________________________________
TITLE PRINASK (COM)
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG
100H
BEGIN JMP
MAIN
; --------------------------------------------------------PATHPAR LABEL BYTE
;
MAXLEN DB
32
;
NAMELEN DB
?
;
FILENAM DB
32 DUP(' ')
SECTOR DB
512 DUP(' ')
;
DISAREA DB
120 DUP(' ')
;
COUNT DW
00
ENDCDE DW
00
FFEED DB
0CH
HANDLE DW
0
OPENMSG DB
'*** Open error ***'
PROMPT DB
'Name of file? '
; ---------------------------------------------------------MAIN
PROC
NEAR
;
CALL
Q10SCR
;
CALL
Q20CURS
;
A10LOOP:
MOV
ENDCDE,00
;
CALL
C10PRMP
;
CMP
NAMELEN,00
; ?
JE
A90
; -
CALL
E10OPEN
; ,
; DTA
CMP
ENDCDE,00
; ?
JNE
A80
; -
CALL
R10READ
;
CMP
ENDCDE,00
; , ?
JE
A80
; -
CALL
G10XPER
;
A80:
JMP
A10LOOP
A90:
RET
MAIN
ENDP
;
:
;
-------------------------------C10PRMP PROC
NEAR
MOV
AH,40H
;
MOV
BX,01

MOV
LEA
INT
MOV
LEA
INT
MOV
MOV
MOV
C90
RET
C10PRMP ENDP
;
;
E10OPEN PROC
MOV
MOV
LEA
INT
JNC
CALL
RET
E20:
MOV
MOV
MOV
REP
RET
E100PEN ENDP
;
;
G10XFER PROC
CLD
LEA
G20:
LEA
MOV
G30:
LEA
CMP
JNE
CALL
CMP
JE
LEA
G40:
MOV
CMP
JB
MOV
CALL
LEA
G50:
LODSB
MOV
MOV
INC
CMP
JE
CMP

CX,13
DX,PROMPT
21H
AH,0AH
DX,PATHPAR
21H
BL,NAMELEN
BH,00
FILENAM[BX],0

;
;
; 00
;

:
-----------------------NEAR
AH,3DH
;
AL,00
;
DX,FILENAM
21H
E20
; CF
X10ERR
; ,
HANDLE,AX
AX,2020H
CX,256
STOSW

;
;
;

:
-------------------------NEAR
; -
SI,SECTOR
;
DI,DISAREA
COUNT,00
DX,SECTOR+512
SI,DX
G40
R10READ
ENDCDE,00
G80
SI,SECTOR
BX,COUNT
BX,80
G50
[DI+BX],0D0AH
P10PRNT
DI,DISAREA

; ?
; -
; ?
; -

; ?
; -
; - CR/LF
;
; [SI] AL,
; SI

BX,COUNT
[DI+BX],AL
BX
AL,1AH
G80
AL,0AH

;
; ?
; -
; ?

JNE
CALL
JMP

G60
P10PRNT
G20

; - ,
; -

CMP
JNE
DEC
MOV
AND
ADD

AL,09H
; ?
G70
BX
; - BX:
BYTE PTR [DI+BX],20H ; TAB
BX,0FFF8H
; 8
BX,08
; 8

G60:

G70:
MOV
JMP
G80:
MOV
MOV
CALL
G90:
RET
G10XFER ENDP
;
;
P10PRNT PROC
MOV
MOV
MOV
INC
LEA
INT
MOV
MOV
LEA
REP
RET
P10PRNT ENDP
;
;
R10READ PROC
MOV
MOV
MOV
MOV
INT
MOV
RET
R10READ ENDP
;
;
Q10SCR PROC
MOV
MOV
MOV
MOV
INT
RET
Q10SCR ENDP
;
;
Q20CURS PROC
MOV
MOV
MOV

COUNT,BX
G30
BX,COUNT
;
BYTE PTR [DI+BX],0CH
;
P10PRNT
;
:
------------------NEAR
AH,40H
;
BX,04
CX,COUNT
;
CX
DX,DISAREA
21H
AX,2020H
;
CX,60
DI,DISAREA
STOSW
:
--------------------------NEAR
AH,3FH
;
BX,HANDLE
;
CX,512
;
DX,SECTOR
;
21H
ENDCDE,AX
:
---------------NEAR
AX,0600H
BH,1EH
;
CX,0000
; ()
DX,184FH
10H
:
-----------------------------NEAR
AH,02
;
BH,00
;
DX,00

INT
10H
RET
Q20CURS ENDP
;
:
;
------------------------X10ERR PROC
NEAR
MOV
AH,40H
;
MOV
BX,01
;
MOV
CX,18
;
LEA
DX,OPENMSG
;
INT
1H
MOV
NDCDE,01
;
RET
X10ERR ENDP
CODESG ENDS
END
BEGIN
__________________________________________________________________________
.19.2. ASCII .
DOS
________________________________________________________________
DOS AH
05, DL , ,
INT 21H :
MOV AH,05
MOV DL,char
INT 21H

;
;
; DOS

.
, , ,
, .
. SI
HEADG, CX -
. , P20,
HEADG .
HEADG - " ", - " ",

.
HEADG DB
LEA
MOV
P20:
MOV
MOV
INT
INC
LOOP

0CH,'Industrial Bicycle Mfrs',0DH,0AH,0AH


SI,HEADG
;
CX,27
;
AH,05
DL,[SI]
21H
SI
P20

;
;
; DOS
;

, DOS "Out of paper".


.
Ctrl/Break.

________________________________________________________________

,
. :
.

15
14
18
20

0F
0E
12
14

, Esc
(.1B).
:
1B
1B
1B
1B

30
32
45
46

8
6

:
1. .
, 8 ,
" " " ":
HEADG DB 0FH, 1BH, 30H, 'Title...', 0DH, 0AH
2. :
MOV AH,05
MOV DL,0FH
INT 21H

;
;

,
, .

.
.
BIOS INT 17H
________________________________________________________________
BIOS INT 17H
AH:

AH=0:
0,1 2 ( - 0).
MOV
MOV
MOV
INT

AH,00
AL,char
DX,00
17H

;
;,
; 0
; BIOS

,
01.
AH=1: :

AH

MOV AH,01
MOV DX,00
INT 17H

;
; 0
; BIOS

" ",
" ".
.
AH=2: :
MOV
MOV
INT
TEST
JNZ

AH,02
;
DX,00
; 0
17H
; BIOS
AH,00101001B; ?
errormsg ; -

AH=1 AH=2
. AH
1:

7
6
5
4
3
0

, .90
10010000 - " " "" -
. 5 (
3 ( ). ,
.B0 10110000, " ".
, BIOS
, ,
. ,
.
,
. , BIOS ,
,
, . ( DOS
, "Out of paper"
). ,
.

.
.

________________________________________________________________
- ,
.
- " "
" " .
- DOS

. BIOS

. BIOS INT 17H


.

________________________________________________________________
19.1. DOS )
; ) ; )
; )
/
(); ) .
19.2.
DOS.
19.3. , :
, , , (
) .
19.4. 19.1 BIOS INT
17H. .
19.5. 19.1 , ), ), )
5 .
19.6. .19.1
DOS.
19.7. .19.2 ,
.

20

__________________________________________________________________________
:
.

________________________________________________________________

.
Pascal C ( )
. ,
.
MASM ,

. ,
MACRO, ,
- MEND.
,
, .
.
:
- ;
- ;

- .
-,
ASCII
, ,
, .
, ,
.

.

________________________________________________________________

.
INIT1,
EXE-:
INIT1 MACRO
ASSUME CS:CSEG,DS:DSEG,SS:STACK;ES:DSEG
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX
MOV ES,AX
ENDM

;
;________________
;
|
;
|
;
|
;p|
;
|
;________________|
;

MACRO ,
ENDM . - INIT1,
.
ENDM .
MACRO ENDM .
, , CSEG, DSEG
STACK - .
INIT1 ,
.
INIT1, ,
, .
INIT1

, .
,
,
.
.20.1 .

, (+),
. ,

ASSUME, .
"

.
__________________________________________________________________________
TITLE MACRO1 (EXE)
; -------------------------------------------INIT1 MACRO
ASSUME CS:CSEG,DS:DSEG,SS:STACK,ES:DSEG
PUSH
DS

0000
0000
0040

20 [ ???? ]

0000
0000 54
66
6F
72
6E
001A

65
20
2D
65
0D

73
6D
69
73

74
61
6E
74

20
63
73
69

SUB
AX,AX
PUSH
AX
MOV
AX,DSEG
MOV
DS,AX
MOV
ES,AX
ENDM
;
; -------------------------------------------STACK SEGMENT PARA STACK 'Stack'
DW
32 DUP(?)
STACK ENDS
; -------------------------------------------DSEG
SEGMENT PARA 'Data'
MESSGE DB
'Test of macro-instruction', 13

6F
72
74
6F

DSEG
ENDS
; -------------------------------------------CSEG
SEGMENT PARA 'Code'
BEGIN PROC
FAR
INIT1
;
+
PUSH
DS
+
SUB
AX,AX
+
PUSH
AX
+
MOV
AX,DSEG
+
MOV
DS,AX
+
MOV
ES,AX
MOV
AH,40H
;
MOV
BX,01
;
MOV
CX,26
;
LEA
DX,MESSGE ;
INT
21H
RET
BEGIN ENDP
CSEG
ENDS
END
BEGIN

0000
0000
0000
0001
0003
0004
0007
0009
000B
000D
0010
0013
0017
0019
001A
001A

1E
2B
50
B8
8E
8E
B4
BB
B9
8D
CD
CB

C0
---- R
D8
C0
40
0001
001A
16 0000 R
21

Macros:
N a m e
Length
INIT1. . . . . . . . . . . . . . . . 0004
Segments and Groups:
N
CSEG . . . . . . . .
DSEG . . . . . . . .
STACK. . . . . . . .

a
.
.
.

m
.
.
.

e
Size
. . . . . . 001A
. . . . . . 001A
. . . . . . 0040

Align
PARA
PARA
PARA

Combine
NONE
NONE
STACK

Class
'CODE'
'DATA'
'STACK'

Symbols:
N a m e
Type
Value Attr
BEGIN. . . . . . . . . . . . . . . . F PROC 0000
CSEG
Length=001A
MESSAGE. . . . . . . . . . . . . . . L BYTE 0000
DSEG
__________________________________________________________________________
.20.1. .

________________________________________________________________

: CSEG, DSEG STACK. ,


, ,
:
INIT2 MACRO CSNAME,DSNAME,SSNAME ;
ASSUME CS:CSNAME,DS:DSNAME,SC:SSNAME,ES:DSNAME
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DSNAME
MOV DS,AX
MOV ES,AX
ENDM
;

.
CSNAME, DSNAME SSNAME
ASSUME, DSNAME MOV.
,
.
INIT2

. ,

:
: INIT2 MACRO CSNAME,DSNAME,SSNAME (. )
|
|
|
:
INIT2 CSEG,DSEG,STACK ()

,
:
- 1: CSEG
. CSEG
ASSUME.
- 2: DSEG
. DSEG
ASSUME MOV.
- 3: STACK
. STACK
ASSUME.

CSNAME
CSNAME

DSNAME

DSNAME:
SSNAME
SSNAME

.20.2.

( , , CX),
. ,
, ,
.
, , 120 .
__________________________________________________________________________
TITLE MACRO2 (EXE)
; ---------------------------------------------INIT2 MACRO CSNAME,DSNAME,SSNAME
ASSUME CS:CSNAME,DS:DSNAME

ASSUME SS:SSNAME,ES:DSNAME
PUSH
DS
SUB
AX,AX
PUSH
AX
MOV
AX,DSNAME
MOV
DS,AX
MOV
ES,AX
ENDM
;
; ---------------------------------------------0000
STACK SEGMENT PARA STACK 'Stack'
0000
20 [ ???? ]
DW
32 DUP(?)
0040
STACK ENDS
; ---------------------------------------------0000
DSEG
SEGMENT PARA 'Data'
0000 54 65 73 74 20 6F MESSAGE DB
'Test of macro', '$'
66 20 6D 61 63 72
6F 24
000E
DSEG
ENDS
; ---------------------------------------------0000
CSEG
SEGMENT PARA 'Code'
0000
BEGIN PROC
FAR
INIT2 CSEG,DSEG,STACK
0000 1E
+
PUSH
DS
0001 2B C0
+
SUB
AX,AX
0003 50
+
PUSH
AX
0004 B8 ---- R
+
MOV
AX,DSEG
0007 8E D8
+
MOV
DS,AX
0009 8E C0
+
MOV
ES,AX
000B B4 09
MOV
AH,09
;
000D 8D 16 0000 R
LEA
DX,MESSGE
;
0011 CD 21
INT
21H
0013 CB
RET
0014
BEGIN ENDP
0014
CSEG
ENDS
END
BEGIN
__________________________________________________________________________
.20.2. .

________________________________________________________________

. COMMENT
, PROMPT:
PROMPT
MACRO
MESSGE
;
MOV
AH,09H
LEA
DX,MESSGE
INT
21H
ENDM

, ,
. ,

,
.LALL ("list all" - ),
:

.LALL
PROMPT

MESSAG1

,
, - .
.LALL. -
(;;) -
.
.XALL, ,
. , ,

.
.SALL ("suppress all" - ),
,
.
.LALL, .XALL, .SALL
,
. ,
, - ,
.
.20.3
. INIT2 PROMPT,
. .SALL
INIT2 PROMPT.
PROMPT .LALL
. , , ,
(;;) PROMPT,

.
__________________________________________________________________________

0000
0000
0040
0000
0000

TITLE MACRO3 (EXE) .LALL .SALL


; ----------------------------------------------INIT2 MACRO CSNAME,DSNAME,SSNAME
ASSUME CS:CSNAME,DS:DSNAME
ASSUME SS:SSNAME,ES:DSNAME
PUSH
DS
SUB
AX,AX
PUSH
AX
MOV
AX,DSNAME
MOV
DS,AX
MOV
ES,AX
ENDM
; ----------------------------------------------PROMPT MACRO MESSAGE
;
;; DOS
MOV
AH,09
;
LEA
DX,MESSAGE
INT
21H
ENDM
; ----------------------------------------------STACK SEGMENT PARA STACK 'Stack'
20 [ ???? ]
DW
32 DUP (?)
STACK ENDS
; ----------------------------------------------DATA
SEGMENT PARA 'Data'
43 75 73 74 6F 6D MESSG1 DB
'Customer name?', '$'
65 72 20 6E 61 6D

65
000F 43
65
72
0021

3F
75
72
65

24
73 74 6F 6D MESSG2 DB
'Customer address?', '$'
20 61 64 64
73 73 3F 24
DATA
ENDS
; ----------------------------------------------0000
CSEG
SEGMENT PARA 'Code'
0000
BEGIN PROC
FAR
.SALL
INIT2 CSEG,DATA,STACK
PROMPT MESSG1
.LALL
PROMPT MESSG2
+ ;
0013 B4 09
+
MOV
AH,09
;
0015 8D 16 000F R
+
LEA
DX,MESSG2
0019 CD 21
+
INT
21H
001B CB
RET
001C
BEGIN ENDP
001C
CSEG
ENDS
END
BEGIN
__________________________________________________________________________
.20.3. .

________________________________________________________________
.
DOS21, AH
DOS INT 21H:
DOS21

MACRO
MOV
INT
ENDM

DOSFUNC
AH,DOSFUNC
21H


:
LEA
DOS21

DX,NAMEPAR
0AH

, , 02
AH :
DISP

MACRO
MOV
MOV
INT
ENDM

CHAR
AH,02
DL,CHAR
21H

, ,
DISP '*'.

DOC21:
DISP

MACRO
MOV
DOS21

CHAR
DL,CHAR
02

DISP,

ENDM
, DISP DISP '*',
:
MOV
MOV
INT

DL,'*'
AH,02
21H

LOCAL
________________________________________________________________

.

. -
.
LOCAL,
MACRO, .
:
LOCAL dummy-1,dummy-2,...

.20.4 LOCAL.
;
1 ,
. : COMP - ,
OUT - . COMP OUT
LOCAL .
COMP ??0000, OUT ??0001. DIVIDE
, ??0002
??0003 . , LOCAL
.
__________________________________________________________________________

0000
0100

TITLE MACRO4 (COM) LOCAL


; ------------------------------------------------DIVIDE MACRO DIVIDEND,DIVISOR,QUOTIENT
LOCAL COMP
LOCAL OUT
;
AX=, BX=, CX=
MOV
AX,DIVIDEND
;
MOV
BX,DIVISOR
;
SUB
CX,CX
;
COMP:
CMP
AX,BX
; < ?
JB
OUT
; -
SUB
AX,BX
; -
INC
CX
; + 1
JMP
COMP
OUT:
MOV
QUOTIENT,CX
;
ENDM
; -----------------------------------------------CSEG
SEGMENT PARA 'Code'
ASSUME CS:CSEG,DS:CSEG,SS:CSEG,ES:CSEG
ORG
100H

0100 EB 06

BEGIN: JMP
SHORT MAIN
; -----------------------------------------------0102 0096
DIVDND DW
150
;
0104 001B
DIVSOR DW
27
;
0106 ????
QUOTNT DW
?
;
; -----------------------------------------------0108
MAIN
PROC
NEAR
.LALL
DIVIDE DIVDND,DIVSOR,QUOTNT
+ ;
AX=, BX=, CX=
0108 A1 0102 R
+
MOV
AX,DIVDND
;
010B 8B 1E 0104 R +
MOV
BX,DIVSOR
;
010F 2B C9
+
SUB
CX,CX
;
0111
+ ??0000:
0111 3B C3
+
CMP
AX,BX
; < ?
0113 72 05
+
JB
??0001
; -
0115 2B C3
+
SUB
AX,BX
; -
0117 41
+
INC
CX
; + 1
0118 EB F7
+
JMP
??0000
011A
+ ??0001:
011A 89 0E 0106 R +
MOV
QUOTNT,CX
;
011E C3
RET
011F
MAIN
ENDP
011F
CSEG
ENDS
END
BEGIN
__________________________________________________________________________
.20.4. LOCAL.

________________________________________________________________
, INIT1 INIT2
.

, , , MACRO.LIB:
INIT

PROMPT

MACRO
.
.
ENDM
MACRO
.
.
ENDM

CSNAME,DSNAME,SSNAME

MESSGE


MACRO INCLUDE:
INCLUDE
.
.
INIT

C:MACRO.LIB
CSEG,DATA,STACK

MACRO.LIB ( )
C INIT PROMPT.
INIT.
, C 30
LST-.

(+) 31 .
,
INCLUDE (
) :
IF1
INCLUDE

C:MACRO.LIB

ENDIF
IF1 ENDIF . IF1

. ENDIF IF-. ,
-
.
.20.5 IF1,
INCLUDE ENDIF, LST- ENDIF.
INIT PROMPT
MACRO.LIB, ..
MACRO.LIB .
INCLUDE ,
.
__________________________________________________________________________
TITLE MACRO5 (EXE) INCLUDE
EDIF
; ----------------------------------------------0000
STACK SEGMENT PARA STACK 'Stack'
0000
20 [????]
DW
32 DUP(?)
0040
STACK ENDS
; ----------------------------------------------0000
DATA
SEGMENT PARA 'Data'
0000 54 65 73 74 20 6F MESSGE DB
'Test of macro','$'
66 20 6D 61 63 72
6F 24
000E
DATA
ENDS
; ----------------------------------------------0000
CSEG
SEGMENT PARA 'Code'
0000
BEGIN PROC
FAR
INIT
CSEG,DATA,STACK
0000 1E
+
PUSH
DS
0001 3B C0
+
SUB
AX,AX
0003 50
+
PUSH
AX
0004 B8 ---- R
+
MOV
AX,DATA
0007 8E D8
+
MOV
DS,AX
0009 8E C0
+
MOV
ES,AX
PROMPT MESSGE
000B B4 09
+
MOV
AH,09
;
000D 8D 16 0000 R
+
LEA
DX,MESSGE
0011 CD 21
+
INT
21H
0013 CB
RET
0014
BEGIN ENDP
0014
CSEG
ENDS
END
BEGIN
__________________________________________________________________________
.20.5. .

------------------ INCLUDE

. ,
INIT, PROMPT DIVIDE,
INIT. PURGE "" PROMPT
DIVIDE :
IF1
ENDIF
PURGE
...
INIT

INCLUDE MACRO.LIB

PROMRT,DIYIDE

CSEG,DATA,STACK

PURGE
, .
(&)
________________________________________________________________
(&) ()
. MOVE MOVSB
MOVSW:
MOVE

MACRO
REP
ENDM

TAG
MOVS&TAG

MOVE B MOVE W.
MOVS
REP MOVSB REP MOVSW.
.
: REPT, IRP, IRPC
________________________________________________________________
,
ENDM.
, , ENDM
, ENDM -
.
REPT:
----------------- REPT
ENDM , :
REPT
N=0
DB N :
N =
REPT
N =
DB
ENDM

0
5
N + 1
N

DB DB 1 DB 5.
REPT
.
MOVSB, REP MOVSB CX 05:
REPT 5
MOVSB
ENDM
IRP:
------------------------------- IRP ENDM.
:
IRP dummy,<arguments>
, ,
, ,
.
.
DB 3, DB 9, DB 17, DB 25 DB 28:
IRP N,<3, 9, 17, 25, 28>
DB N
ENDM
IRPC:
---------------------------------------- IRPC
ENDM. :
IRPC dummy,string
"string".
DW 3, DW 4 ... DW 8:
IRPC N,345678
DW N
ENDM

________________________________________________________________
.

IF1
.
, .
IF ENDIF
IF- ELSE :
IFxx
()
.
__________
.
|
ELSE ( )
|
.
|
.
__________|
ENDIF
( IF-)


ENDIF

:
"Undeterminated conditional" ( ).
,
ELSE ELSE - ENDIF.
, ELSE,
ELSE .
:
IF
IFE
IF1 ( )
IF2 ( )
IFDEF
IFNDEF
IFB <>
IFNB <>
IFIDN <-1>,<-2>

IFDIF<-1>,<-2>

,
.
,
.

.

,
.

EXTRN,
.

EXTRN,
.
,
.
.
,
.
.

,
.
.


,


.
.

IFNB ( ). DOS
INT 21H AH,
DX.
:
DOS21

MACRO
MOV
IFNB
MOV
ENDIF
INT
ENDM

DOSFUNC,DXADDRES
AN,DOSFUNC
<DXADDRES>
DX,OFFSET DXADDRES
21H

DOS21
01 AH:
DOS21

01

MOV AH,01 INT 21H.


AH 0AH,
DX - :

DOS21

0AH,IPFIELD

MOV INT 21H.


EXITM.
________________________________________________________________

,

. ,
.
EXITM:
IFxx
.
.
.
EXITM
.
.
ENDIF

[]
( )


EXITM,

ENDM.
EXITM

REPT, IRP IRPC


.
, IF IFNDEF
________________________________________________________________
.20.6 DIVIDE,
.
: ,
, . IFNDEF
.
CNTR.
.
, CNTR:
IF CNTR
;
EXITM
CNTR ,

EXITM

. ,
CNTR , , IFNDEF
CNTR , 1.
,
. DIVIDE
, .
-
;
, .
__________________________________________________________________________

0000
0100
0100 EB 06
0102 0096
0104 001B
0106 ????
0108
= 0000

0108
0108
010F
0111
0111
0113

A1 0102 R
8B 1E 0104 R
2B C9
3B C3
72 05

+
+
+
+
+
+
+
+
+
+
+
+

TITLE MACRO6 (COM) . IF IFNDEF


; ----------------------------------------------DIVIDE MACRO DIVIDEND,DIVISOR,QUOTIENT
LOCAL COMP
LOCAL OUT
CNTR
= 0
;
AX-, BX-, CX-
IFNDEF DIVIDEND
;

CNTR
= CNTR +1
ENDIF
IFNDEF DIVISOR
;

CNTR
= CNTR +1
ENDIF
IFNDEF QUOTIENT
;

CNTR
= CNTR +1
ENDIF
IF
CNTR
;

EXITM
ENDIF
MOV
AX,DIVIDEND ;
MOV
BX,DIVISOR
;
SUB
CX,CX
;
COMP:
CMP
AX,BX
; < ?
JB
OUT
; -
SUB
AX,BX
; -
INC
CX
; + 1
JMP
COMP
OUT:
MOV
QUOTIENT,CX ;
ENDM
; ----------------------------------------------CSEG
SEGMENT PARA 'Code'
ASSUME CS:CSEG,DS:CSEG,SS:CSEG,ES:CSEG
ORG
100H
BEGIN: JMP
SHORT MAIN
; ----------------------------------------------DIVDND DW
150
DIVSOR DW
27
QUOTNT DW
?
; ----------------------------------------------MAIN
PROC
NEAR
.LALL
DIVIDE DIVDND,DIVSOR,QUOTNT
CNTR
= 0
;
AX-, BX-, CX-
ENDIF
ENDIF
ENDIF
ENDIF
MOV
AX,DIVDND
;
MOV
BX,DIVSOR
;
SUB
CX,CX
;
??0000:
CMP
AX,BX
; < ?
JB
??0001
; -

0115
0117
0118
011A
011A

2B C3
41
EB F7

+
SUB
AX,BX
; -
+
INC
CX
+
JMP
??0000
+ ??0001:
89 0E 0106 R
+
MOV
QUOTNT,CX
;
DIVIDE DIDND,DIVSOR,QUOT
= 0000
+
CNTR
= 0
+ ;
AX-, BX-, CX-
+
IFNDEF DIDND
+ ;

= 0001
+
CNTR
= CNTR +1
+
ENDIF
+
ENDIF
+
IFNDEF QUOT
+ ;

= 0002
+
CNTR
= CNTR +1
+
ENDIF
+
IF
CNTR
+ ;

+
EXITM
011E C3
RET
011F
MAIN
ENDP
011F
CSEG
ENDS
END
BEGIN
__________________________________________________________________________
.20.6. IF IFNDEF.
, IFIDN-
________________________________________________________________
.20.7 MOVIF,
MOVSB MOVSW
. B ( ) W
( ) MOVSB MOVSW MOVS.
:
MOVIF

MACRO
IFIDN

TAG
<&TAG>,<B>

IFIDN ( B
W) B. , REP
MOVSB. (&) - ,
<TAG> .
B W,
MOVSB ( ).
MOVIF:
B, W .
,
, CX DX .
,
-
. , ,
.
__________________________________________________________________________
TITLE MACRO7 (COM) IFIDN
; -------------------------------------------

MOVIF

MACRO TAG
IFIDN <&TAG>,<B>
REP MOVSB
EXITM
ENDIF
IFIDN <&TAG>,<W>
REP MOVSW
ELSE
;
B W,
;
B
REP MOVSB
ENDIF
ENDM
; ------------------------------------------0000
CSIG
SEGMENT PARA 'Code'
ASSUME CS:CSEG,DS:CSEG
ASSUME SS:CSEG,ES:CSEG
0100
ORG
100H
0100 EB 00
BEGIN: JMP
SHORT MAIN
;
...
0102
MAIN
PROC
NEAR
.LALL
MOVIF B
+
IFIDN <B>,<B>
0102 F3/A4
+
REP MOVSB
+
EXITM
MOVIF W
+
ENDIF
+
IFIDN <W>, <W>
0104 F3/A5
+
REP MOVSW
+
ENDIF
MOVIF
+
ENDIF
+
ELSE
+ ; . B W, . B
+ ;-------------------------------------------0106 F3/A4
+
REP MOVSB
+
ENDIF
0108 C3
RET
0109
MAIN
ENDP
0109
CSEG
ENDS
END
BEGIN
__________________________________________________________________________
.20.7. IFIDN

________________________________________________________________
- (MASM).
-
.
- MACRO,
,
ENDM .
- , ,

.
- .SALL, .LALL .XALL
.
-
.
MACRO.

LOCAL

LOCAL

-
, .
-

- .

________________________________________________________________
20.1. : ) ,
) ,
.
20.2. : ) MULTBY
; ) MULTWD
.
.
,
.
20.3. 20.2 "".

INCLUDE .
20.4. BIPRINT, BIOS INT 17H
.
.
20.5. .20.6
( ).

21

__________________________________________________________________________
: ,
.

________________________________________________________________

. , ,
,
.

,
.

:
- ,
, ,
;
- , ,
;
-
, ;
- ,

.

(OBJ) . (LINK)
(EXE) .
,
. , ,
.
.21.1
. .21.1.()
1, 2 3. .21.1.()
1 2, 1 3.
,
"" , ,
. , , ,
1 2, 3 ,
1. ,
, ,
.
__________________________________________________________________________
a)

------------
) ------------




L-----T-----L-----T---------------+---------
-----+----
------- ------- -------
------- -------
/ 1 / 2 / 3
/ 1 / 2
L-------- L-------- L-------L---T---- L--------------
/ 3
L-------__________________________________________________________________________
.21.1. .

________________________________________________________________
CALL
, .. . CALL
( +127 -128 ) (
). ""
IP , ""
.
, CALL :
E82000. .E8 , 2000

0020 IP.
CS IP
.
RET IP
CALL .

() .
CS ,
IP
.

.
, CALL
:
9A 0002 AF04
.9A
0002 0200 IP, AF04
04AF CS.
:

IP

04AF0
0200
04CF0

REP
CS IP
CALL .
EXTRN PUBLIC
________________________________________________________________

(MAINPROG),

(SUBPROG) CALL,
.21.2.
CALL MAINPROG "", SUBPROG
(
,

SUBPROG ). EXTRN
, SUBPROG

FAR,
.. .
, ""
:
9A 0000 ---- E
SUBPROG PUBLIC,
, "" SUBPROG.
, MAINPROG SUBPROG
,
:
LINK:
Object Modules [.OBJ]:
Run File [filespec.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:

:
B:MAINPROG+B:SUBPROG
B:COMBPROG ( )
CON
[return]

EXTRN
PUBLIC
.
.

.
.
__________________________________________________________________________
---------------------------------

EXTRN SUBPROG:FAR
MAINPROG: .

CALL
SUBPROG

+--------------------------------+

PUBLIC SUBPROG

SUBPROG: .

RET

L--------------------------------__________________________________________________________________________
.21.2. .
EXTRN
---------------- EXTRN :
EXTRN

: [, ... ]

( )
EXTRN.

PUBLIC.
ABS, BYTE, DWORD, FAR, NEAR, WORD.
EQU .
PUBLIC
----------------- PUBLIC ,
.
:
PUBLIC

[, ... ]

( )
PUBLIC.
( PROC-), .

EQU-,
.
.
: EXTRN PUBLIC
_______________________________________________________________

__________________________________________________________________________
page
60,132
TITLE CALLMULL1 (EXE) .
EXTRN SUBMUL:FAR
;----------------------------------------------0000
STACKSG
SEGMENT PARA STACK 'Stack'
0000
40 [ ???? ]
DW
64 DUP(?)
0080
STACKSG
ENDS
;----------------------------------------------0000
DATASG SEGMENT PARA 'Data'
0000 0140
QTY
DW
0140H
0002 2500
PRICE DW
2500H
0004
DATASG ENDS
;----------------------------------------------0000
CODESG SEGMENT PARA 'Code'
0000
BEGIN PROC
FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG
0000 1E
PUSH
DS
0001 2B C0
SUB
AX,AX
0003 50
PUSH
AX
0004 B8 ---- R
MOV
AX,DATASG
0007 8E D8
MOV
DS,AX
0009 A1 0002 R
MOV
AX,PRICE
;
000C 8B 1E 0000 R
MOV
BX,QTY
;
0010 9A 0000 ---- E
CALL
SUBMUL
;
0015 CB
RET
0016
BEGIN ENDP
0016
CODESG ENDS
END
BEGIN
Segments and Groups:
N a m e
CODESG . . . . . . . . . . . .
DATASG . . . . . . . . . . . .
STACKSG. . . . . . . . . . . .

Size
0016
0004
0080

Align
PARA
PARA
PARA

Combine
NONE
NONE
STACK

Class
'CODE'
'DATA'
'STACK'

Type
F PROC
L WORD
L WORD
L FAR

Value
0000
0002
0000
0000

Attr
CODESG Length=0016
DATASG
DATASG
External

Symbols:
BEGIN.
PRICE.
QTY. .
SUBMUL

.
.
.
.

.
.
.
.

0000
0000

.
.
.
.

0000 F7 E3
0002 CB
0003
0003

.
.
.
.

N a m e
. . . .
. . . .
. . . .
. . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

page
60,132
TITLE SUBMUL
;----------------------------------------------CODESG SEGMENT PARA 'Code'
SUBMUL PROC
FAR
ASSUME CS:CODESG
PUBLIC SUBMUL
MUL
BX
;AX-, BX-
RET
; DX:AX
SUBMUL ENDP
CODESG ENDS
END
SUBMUL

Segments and groups:


N a m e
Size
CODESG . . . . . . . . . . . . 0003

Align
PARA

Combine Class
NONE
'CODE'

Symbols:
N a m e
Type
Value Attr
SUBMUL . . . . . . . . . . . . F PROC 0000
CODESG Clobal Length=0003
__________________________________________________________________________
LINK
IBM Personal Computer Linker
Version 2.30 (C) Copyright IBM Corp 1981, 1985
Object Modules: B:CALLMUL1+B:SUBMUL1
Run File: [B:CALLMUL1.EXE]: <return>
List File:[NUL.MAP]: CON
Libraries [.LIB]: <return>
Start
00000H
00020H
00030H
00040H

Stop Length Name


00015H
00022H
00033H
000BFH

0016H
0003H
0004H
0080H

CODESG
CODESG
DATASG
STACKSG

Class
CODE <--: 2
CODE <--
DATA
STACK

Program entry point at 0000:0000


__________________________________________________________________________
. 21.3. EXTRN PUBLIC.
.21.3 CALLMUL1
SUBMUL1. ,
. QTY PRICE.
AX PRICE, BX -
QTY, . EXTRN
SUBMUL .
PUBLIC ( ASSUME),
,
SUBMUL. AX ()
BX ().
DX:AX .002E 4000.
- ,
. ,
.
,
, . ,

.
.
,
. , SUBMUL
FAR External
(), - F ( FAR) Global ().
, ,
.. .
( )
. , (
) .


(
). , .00000, - .00020.
,

CALL SUBMUL
9A 0000 D413
CALL - .9A.
IP 0000,
.13D2 CS .D413.
CS:IP ..
13D40 0000. ,
CS, .13D2, .. 13D20.
,
.0020. ,
:
CS
IP

13D20
0020
13D40

,
CALL.
: PUBLIC
________________________________________________________________
__________________________________________________________________________
page
60,132
CALLMUL2 (EXE) .
EXTERN SUBMUL:FAR
;---------------------------------------------STACKSG
SEGMENT PARA STACK 'Stack'
40 [????]
DW
64 DUP(?)
STACKSG
ENDS
;---------------------------------------------DATASG SEGMENT PARA 'Data'
0140
QTY
DW
0140H
2500
PRICE DW
2500H
DATASG ENDS
;---------------------------------------------CODESG SEGMENT PARA PUBLIC 'Code'
BEGIN PROC
FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG
1E
PUSH
DS
2B C0
SUB
AX,AX
50
PUSH
AX
B8 ---- R
MOV
AX,DATASG
8E D8
MOV
DS,AX
A1 0002 R
MOV
AX,PRICE ;
8B 1E 0000 R
MOV
BX,QTY
;
9A 0000 ---- E
CALL
SUBMUL
;
CB
RET
BEGIN ENDP
TITLE

0000
0000
0080
0000
0000
0002
0004
0000
0000
0000
0001
0003
0004
0007
0009
000C
0010
0015
0016
0016

CODESG ENDS
END
BEGIN
________________________________________________________________________
Segments and Group:
N a m e

Size

Align

Combine Class

CODESG . . . . . . . . . . . . .0016
DATASG . . . . . . . . . . . . .0004
STACKSG. . . . . . . . . . . . .0080

PARA
PARA
PARA

PUBLIC 'CODE'
NONE
'DATA'
STACK 'STACK'

Value
0000
0002
0000
0000

Attr
CODESG Lenght=0016
DATASG
DATASG
External

Symbols:
BEGIN.
PRICE.
QTY. .
SUBMUL

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

N a m e
. . . .
. . . .
. . . .
. . . .

.
.
.
.

.
.
.
.

.
.
.
.

Type
PROC
WORD
WORD
FAR

F
L
L
L

page
60,132
TITLE SUBMUL2
;---------------------------------------------CODESG SEGMENT PARA
PUBLIC 'CODE'
SUBMUL PROC
FAR
ASSUME CS:CODESG
PUBLIC SUBMUL
MUL
BX
;AX-, BX-
RET
; DX:AX
SUBMUL ENDP
CODESG ENDS
END
SUBMUL

0000
0000
0000
0002
0003
0003

.
.
.
.

F7 E3
CB

Segments and Groups:


N a m e
Size
CODESG. . . . . . . . . . . . . 0003

Align
PARA

Combine Class
PUBLIC 'CODE'

Value
0000

Attr
CODESG Global Length=0003

Symbols:
N a m e
Type
SUBMUL. . . . . . . . . . . . .F PROC

LINK
IBM Personal Computer Linker
Version 2.30 (C) Copyright IBM Corp 1981, 1985
Object Modules: B:CALLMUL2+B:SUBMUL2
Run File: [B:CALLMUL2.EXE]: <return>
List File: [NUL.MAP]: CON
Libraries [.LIB]: <return>
Start

Stop Length Name

00000H 00022H 0023H CODESG


00030H 00033H 0004H DATASG
00040H 000BFH 0080H STACKSG

Class
CODE <-- : 1
DATA
STACK

Program entry point at 0000:0000


__________________________________________________________________________
.21.4. , PUBLIC.
.21.4
.21.3. -
. SEGMENT
PUBLIC:
CODESG

SEGMENT

PARA PUBLIC 'CODE'


CALL.
( )
: CODESG - PUBLIC ( .21.3
NONE). ,
! ,
(CODESG), ('CODE') PUBLIC,

. ,
,
:
9A 2000 D213
.2000 IP .D213 CS.
,
CS - .D213.
.0020:
CS:
IP:
:

13D20
0020
13D40

, , ,
.13D40. ?
, ,
.0016.
SEGMENT,
, .. .10
0.
.00020.
13D20 0020 13D40.
__________________________________________
| ... | |
| ( ) |
|
|___________________________|______________|
|
|
|
13D20
13D30
13D40
, ,
.
:
________________________________________________________________
__________________________________________________________________________
page
60,132
CALLMUL3 (EXE)

EXTRN SUBMUL:FAR
PUBLIC QTY,PRICE
;------------------------------------------------STACKSG
SEGMENT PARA STACK 'Stack'
DW
64 DUP(?)
STACKSD
ENDS
TITLE
;

0000
0000
0080

40 [????]

;------------------------------------------------DATASG SEGMENT PARA PUBLIC 'Data'


0140
QTY
DW
0140H
2500
PRICE DW
2500H
DATASG ENDS
;------------------------------------------------CODESG SEGMENT PARA PUBLIC 'Code'
BEGIN PROC
FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG
1E
PUSH
DS
2B C0
SUB
AX,AX
50
PUSH
AX
B8 ---- R
MOV
AX,DATASG
8E D8
MOV
DS,AX
9A 0000 ---- E
CALL
SUBMUL
;
CB
RET
BEGIN ENDP

0000
0000
0002
0004
0000
0000
0000
0001
0003
0004
0007
0009
000E
000F
000F

CODESG ENDS
END
BEGIN
_____________________________________________________________________
Segments and Groups:
N a m e
CODESG . . . . . . . . . . . .
DATASG . . . . . . . . . . . .
STACKSG. . . . . . . . . . . .

Size
000F
0004
0080

Align
PARA
PARA
PARA

Combine
PUBLIC
PUBLIC
STACK

Class
'CODE'
'DATA'
'STACK'

Type
F PROC
L WORD
L WORD
L FAR

Value
0000
0002
0000
0000

Attr
CODESG Length=000F
DATASG Global
DATASG Global
External

Symbols:
BEGIN.
PRICE.
QTY. .
SUBMUL

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

N a m e
. . . .
. . . .
. . . .
. . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

page
60,132
SUBMUL
EXTRN QTY:WORD,PRICE:WORD
;------------------------------------------------0000
CODESG SEGMENT PARA PUBLIC 'CODE'
0000
SUBMUL PROC
FAR
ASSUME CS:CODESG
PUBLIC SUBMUL
0000
A1 0000 E
MOV
AX,PRICE
0003
8B 1E 0000 E
MOV
BX,QTY
0007
F7 E3
MUL
BX
; DX:AX
0009
CB
RET
000A
SUBMUL ENDP
000A
CODESG ENDS
END
SUBMUL
_____________________________________________________________________
TITLE

Segments and Groups:


N a m e
Size
CODESG . . . . . . . . . . . . 000A

Align Combine Class


PARA PUBLIC 'CODE'

Symbols:
N a m e
Type
Value Attr
PRICE. . . . . . . . . . . . . V WORD 0000

External

QTY. . . . . . . . . . . . . . V WORD 0000


External
SUBMUL . . . . . . . . . . . . F PROC 0000 CODESG Global Length=000A
_____________________________________________________________________
LINK
IBM Personal Computer Linker
Version 2.30 (C) Copyright IBM Corp 1981, 1985
Object Modules: B:CALLMUL3+B:SUBMUL3
Run File: [B:CALLMUL3.EXE]: <return>
List File: [NUL.MAP]: CON
Libraries [.LIB]: <return>
Start

Stop Length Name

00000H 00019H 001AH CODESG


00030H 00033H 0004H DATASG
00040H 000BFH 0080H STACKSG

Class
CODE
DATA
STACK

PROGRAM entry point at 0000:0000


__________________________________________________________________________
.21.5. .

,
. , QTY PRICE
- ,
BX AX .
.21.5. :
- QTY PRICE PUBLIC.
PUBLIC.
Global () QTY PRICE

.
- QTY PRICE EXTRN WORD.
2 .
MOV,
. , QTY
PRICE External ().
MOV :
A1 0000 E
8B 1E 0000 E

MOV AX,PRICE
MOV BX,QTY

.A1
AX, .8B - BX (
AX ,
). ,
:
A1 0200
8B 1E 0000
,
MOV . ,
DS
.


, PUBLIC EXTRN.
, ,
,
.
- ,
64 .
.23 ,

GROUP
.

________________________________________________________________
__________________________________________________________________________
page
60,132
CALLMULL4 (EXE)

EXTRN SUBMUL:FAR
;------------------------------------------------0000
STACKSG
SEGMENT PARA STACK 'Stack'
0000
40 [ ???? ]
DW
64 DUP(?)
0080
STACKSG
ENDS
;------------------------------------------------0000
DATASG SEGMENT PARA 'Data'
0000 0140
QTY
DW
0140H
0002 2500
PRICE DW
2500H
0004
DATASG ENDS
;------------------------------------------------0000
CODESG SEGMENT PARA PUBLIC 'Code'
0000
BEGIN PROC
FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG
0000 1E
PUSH
DS
0001 2B C0
SUB
AX,AX
0003 50
PUSH
AX
0004 B8 ---- R
MOV
A,DATASG
0007 8E D8
MOV
DS,AX
0009 FF 36 0002 R
PUSH
PRICE
000D FF 36 0000 R
PUSH
QTY
0011 9A 0000 ---- E
CALL
SUBMUL
;
0016 CB
RET
0017
BEGIN ENDP
0017
CODESG ENDS
END
BEGIN
_____________________________________________________________________
TITLE
;

Segments and Groups:


N a m e
CODESG . . . . . . . . . . . .
DATASG . . . . . . . . . . . .
STACKSG. . . . . . . . . . . .

Sise
0017
0004
0080

Align
PARA
PARA
PARA

Combine
NONE
NONE
STACK

Class
'CODE'
'DATA'
'STACK'

Type
F PROC
L WORD
L WORD

Value
0000
0002
0000

Attr
CODESG Length=0017
DATASG
DATASG

Symbols:
N a m e
BEGIN. . . . . . . . . . . . .
PRICE. . . . . . . . . . . . .
QTY. . . . . . . . . . . . . .

SUBMUL . . . . . . . . . . . . L FAR 0000


External
_____________________________________________________________________
page
60,132
TITLE SUBMUL
0000
CODESG SEGMENT PARA PUBLIC 'Code'
0000
SUBMUL PROC
FAR
ASSUME CS:CODESG
PUBLIC SUMBUL
0000
55
PUSH
BP
0001
8P EC
MOV
BP,SP
0003
8B 46 08
MOV
AX,[BP+8]
;
0006
8B 5E 06
MOV
BX,[BP+6]
;
0009
F7 E3
MUL
BX
; DX:AX
000B
5D
POP
BP
000F
SUMBUL ENDP
000F
CODESG ENDS
END
_____________________________________________________________________
Segments and Groups:
N a m e
Size
CODESG . . . . . . . . . . . . 000F

Align
PARA

Combine Class
PUBLIC 'CODE'

Symbols:
N a m e
Type
Value Attr
SUBMUL . . . . . . . . . . . . F PROC 0000
CODESG Global Length=000F
_____________________________________________________________________
LINK
IBM Personal Computer Linker
Version 2.30 (C) Copyright IBM Corp 1981, 1985
Object Modules: B:CALLMUL4+B:SUBMUL4
Run File: [B:CALLMUL4.EXE]: <return>
List File: [NUL.MAP]: CON
Libraries [.LIB]: <return>
Start

Stop Length Name

00000H 00019H 001AH CODESG


00030H 00033H 0004H DATASG
00040H 000BFH 0080H STACKSG

Class
CODE
DATA
STACK

PROGRAM entry point at 0000:0000


__________________________________________________________________________
.21.6. .

.
. PUSH
.
, .21.6,
SUBMUL PRICE QTY. CALL
:
... | 1600 | D213 | 4001 | 0025 | 0000 | C213 |
6
5
4
3
2
1

1.
2.
3.
4.
5.
6.

PUSH DS .
DOS.
PUSH AX .
PUSH PRICE (2500).
PUSH QTY (0140).
CALL CS (D213)
CALL ,
IP (1600).

BP
, BP,
. , , BP ,
().
BP SP,
BP,
SP. BP 0072. SP
, .. .80.
SP 2:
| 0000 | 1600 | D213 | 4001 | 0025 | 0000 | C213 |
|
|
|
|
|
|
|
SP:
72
74
76
78
7A
7C
7E
BP 0072, (PRICE)
BP+8, (QTY) - BP+6.
AX BX
.

BP
, SP
2, 72 74.
RET ""

. :
- IP (1600)
- SP 2, 74 76.
- CS
(D213).
- SP 2 76 78.

. . RET
RET 4
4
( ). RET
SP, 7C. ,
.
SP -
.
BASIC-
________________________________________________________________
BASIC IBM PC
BASIC- .
:

BIOS-

.
- ;

BASIC .
BASIC ,
.
, 64 ,
BASIC. .

:
BASIC - POKE
BASIC-.
BASIC- POKE
----------------------------------- ,
. ,
LST-
DEBUG.
BASIC- DATA. BASIC-
READ POKE
.

-------------------------------- ,
(EXE) .
BASIC- .
BASIC- BSAVE (BASIC
save) BLOAD -
.
BASIC- ,
, . BASIC
: USR CALL. DS, ES
SS BASIC.
CS ,
DEF SEG ( ). SP ,
,
.
,
.

SP BASIC
RET.
,
. HIGH
, , B:/HIGH.
DEBUG EXE-
R CS IP:
. ( N) BASIC
L.
BASIC- EXE- -
USR CALL. ,
EXE- , ,
USRn CALL. BASIC IBM PC
USRn CALL
.
: BASIC
-----------------------------------------__________________________________________________________________________

LOAD"D:BASTEST.BAS
LIST
010
CLEAR ,32768!
020
' BLOAD
030
' DEFSEG
040
' CALL
050
' ASM-
060
FOR N = 1 TO 5
070
INPUT "Hours "; H
080
INPUT "Rate "; R
090
W = H * R
100
PRINT "Wage = " W
110
NEXT N
120
END
_____________________________________________________________________
TITLE LINKBAS , BASIC
CODESG SEGMENT PARA 'CODE'
ASSUME CS:CODESG
CLRSCRN PROC
FAR
PUSH
BP
; BP
MOV
BP,SP
;
MOV
AX,0600H
;
MOV
BH,07
;
MOV
CX,0000
;
MOV
DX,184FH
INT
10H
POP
BP
RET
;
CLRSCRN ENDP
CODESG ENDS
END
__________________________________________________________________________
.21.7. BASIC
.

BASIC- .

BASIC-
- . FOR-NEXT
. BASIC , .
. 21.7 BASIC-
. BASIC-:
10 32 ; 20, 30, 40 50
.
BASIC- .
BASIC- . BASIC
, .
F2.

SAVE "B:BASTEST.BAS"
:
- , BASIC;

;
- BP
SP BP;
- ,
,
.
- .
, (DOS)
A, - B:
1.
2.

,
B:LINKBAS.ASM .
LINK, ,
:
LINK B:LINKBAS,B:LINKBAS/HIGH,CON;

3.
4.
5.

6.
7.
8.
9.

DEBUG BASIC - : DEBUG


BASIC.COM.
R .
SS, CS IP.

:
N B:LINKBAS.EXE
L
R
CX, CS IP.
SS, CS IP 4. (
R SS, R CS R IP).
G (go) BASIC.
BASIC-.
, ,
( ):
DEF SEG = &Hxxxx ( CS 6)
BSAVE "B:CLRSCRN.MOD",0,&Hxx ( CX 6)


. ,
.
B.
10. BASIC- .
, ,
SYSTEM BASIC , , Q
DEBUG. DOS
11. BASIC, BASIC-
:
BASIC
LOAD "B:BASTEST.BAS"
LIST
12. 20, 30, 40 50 :
20
30
40
50

BLOAD "B:CLRSCRN.MOD"
DEF SEG = &Hxxxx ( CS 6)
CLRSCRN = 0
( )
CALL CLRSCRN
( )

13. , BASIC-.
BASIC- ,
,

. .21.8 -

.

. ,

BASIC-

CALL (-1,-2,...)
,
BP [BP], .21.3.
RET,
. , CALL
RET 6.
__________________________________________________________________________
D>LINK
IBM Personal Computer Linker
Version 2.30 (C) Copyright IBM Corp. 1981, 1985
Object Modules [.OBJ]: LINKBAS
Run File [LINKBAS.EXE]: LINKBAS/HIGH
List File [NUL.MAP]: CON
Libraries [.LIB]:
Warning: no stack segment
Start Stop Length Name
Class
00000H 00011H 00012H CODESG
CODE
D>DEBUG BASIC.COM
-R
AX=0000 BX=0000 CX=0012 DX=0000 SP=FFFF BP=0000 SI=0000 DI=0000
DS=1410 ES=1410 SS=1410 CS=1410 IP=0100 NV UP EI PL NZ NA PO NC
1410:0100 E9E03E
JMP
3FE3
-N D:LINKBAS.EXE
-L
-R
AX=FFA3 BX=0000 CX=0012 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=1410 ES=1410 SS=9FE0 CS=9FE0 IP=0000 NV UP EI PL NZ NA PO NC
9FE0:0000 55
-R SS
SS 9FE0
:1410
-R CS
CS 9FE0
:1410
-R IP
IP 0000
:0100
-G
Ok
DEF SEG = &H9EF0

Ok
BSAVE "D:CLRSCREEN.MOD",0,&H12
Ok
SYSTEM
Program terminated normally
-Q
D>BASIC
IBM Personal Computer Basic
Ver4sion D3.10 Copyright IBM Corp. 1981, 1985
61310 Bytes free
Ok
LOAD"D:BASTEST.BAS
Ok
20
BLOAD "D:CLRSCREEN.MOD"
30
DEF SEG = &H9FE0
40
CLRSCRN = 0
50
CALL CLRSCRN
LIST
10
CLEAR ,32768!
20
BLOAD "D:CLRSCRN.MOD"
30
DEF SEG = &H9FE0
40
CLRSCRN = 0
50
CALL CLRSCRN
60
FOR N = 1 TO 5
70
INPUT "HOURS"; H
80
INPUT "rATE"; R
90
W = H * R
100
PRINT "WAGE = " W
110
NEXT N
120
END
Ok
__________________________________________________________________________
.21.8. BASIC .
PASCAL
________________________________________________________________
__________________________________________________________________________
program pascall ( input, output );
procedure move_cursor( const row: integer;
const col: integer ); extern;
var
temp_row:
integer;
temp_col:
integer;
begin
write( 'Enter cursor row: ' );
readln( temp_row );
write( 'Enter cursor column:' );
readln( temp_col );
move_cursor( temprow, temp_col );
write( 'New cursor location' );
end.

_____________________________________________________________________
TITLE
;

MOVCUR ,

PUBLIC MOVE_CURSOR
;---------------------------------------------------------;
MOVE_CURSOR:

;

;
: const row

;
const col

;
:

;---------------------------------------------------------CODESEG SEGMENT PARA PUBLIC 'CODE'


MOVE_CURSOR PROC FAR
ASSUME CS:CODESEG
ROWWPAR EQU
8
COLPAR EQU
6

; ""
; ""

PUSH
MOV

BP
BP,SP

; BP
; BP

MOV
MOV

SI,[BP+ROWPAR] ;SI
DH,[SI]
; DL

MOV
SUB
INT

AH,02
BH,BH
10H

;
; #0

POP
BP
;
RET
4
;
MOVE_CURSOR
ENDP
CODESEG ENDS
END
__________________________________________________________________________
.21.9. PASCAL-.
,

PASCAL IBM MicroSoft


. .21.9 PASCAL-
. PASCAL-
OBJ-,
OBJ-. LINK OBJ-
EXE-.
PASCAL- : temp_row temp_col,

. temp_row temp_col

. PASCAL-

procedure move_cursor
, extern (). PASCAL-,
,
:
move_cursor (temp_row, temp_col);
:
, ,
.

:
00
02
04
06
08

BP,

PASCAL-. ,

.21.6.
SP .
,
BP SP
BP. BP
.
- .
( )
08, BP+08. (
) 06 BP+06.

BX, DI SI.
[BP+08] SI, [SI] ( )
DH.
DL.
DX
BIOS .
BP. RET ,
, 22, 4.
.

PUSH
POP .
.
- , PASCAL ,
AX
DX:AX.

PASCALL

PASCALL-, CODESEG ( )
.

PASCALL-.

.5720 - 20.

.
C
________________________________________________________________
C
, C

C. ,
:
- C
(

)
. , , ,

, :
MOV
MOV
MOV
MOV
...
POP
RET

ES,BP
BP,SP
DH,[BP+4]
DL,[BP+6]
BP

- C ,

, C-.
- C ,
, DI SI,
.
- ,
, AX ( ) DX:AX
( ).
- C,
DF, CLD
.

________________________________________________________________
- ,
,

EXTRN, - PUBLIC.
- , 1
2, 1.
- ,
,
PUBLIC.
-
.
- (
). PUBLIC,
( ) - EXTRN.

________________________________________________________________
21.1. , MAINPRO
SUBPRO. ) MAINPRO ,
SUBPRO ? )
SUBPRO ,
MAINPRO?
21.2. , MAINPRO QTY
DB, VALUE DW PRICE DW. SUBPRO
VALUE QTY PRICE. )

MAINPRO ,
? ) SUBPRO
, ?
21.3.
.

21.2 21.3

21.4. ,
MAINPRO , . SUBPRO
.
21.5. ,
. 21.4 ,
MAINPRO (QTY)
(VALVE) , SUBCONV ASCII-
; SUBCALC (PRICE);
SUBDISP ASCII-
.

22

__________________________________________________________________________
:
.

________________________________________________________________
DOS ,
DOS
. DOS ,
:
1.
DOS, ,
FORMAT /S. (, DOS
A C)
.
, ,
.
2. IBMBIO.COM
BIOS ROM; ,
.00600. IBMBIO.COM

,
COMMAND.COM. IBMBIO.COM -
,
.
3. IBMDOS.COM
, .00B00.
,
, INT 21H,
.
4. COMMAND.COM DOS,
DIR CHKDSK, COM, EXE BAT-.
:
,

. COMMAND.COM,
,

.
.22.1 .
.
__________________________________________________________________________

00000
00400
00500
00600
XXXX0

(..23)
ROM ()
DOS
IBMBIO.COM
IBMDOS.COM



(FAT, )
XXXX0 COMMAND.COM
XXXX0 (COM EXE-)
XXXX0 COM- (256 )
XXXX0 COMMAND.COM,
.
__________________________________________________________________________
.22.1. DOS .
COMMAND.COM
________________________________________________________________
COMMAND.COM
.
COMMAND.COM:
1.
IBMDOS.COM ( ),
.
- :
INT 22H
INT 23H
INT 24H
INT 27H

.
Ctrl/Break.

/
(FAT).
,
.

2.
AUTOEXEC-.
.
,
.
.

.
3. .
"" , DOS

, . COMMAND.COM
DOS A> C>,
.
COM- EXE- .
- ,
(PSP)
COMMAND.COM.

.100
,

:
IBMBIO.COM
IBMDOS.COM
COMMAND.COM ()


...
COMMAND.COM ( , ).
RET INT 20H
COMMAND.COM.
,
.

________________________________________________________________
(PSP) 256 (100H)
COM- EXE-,
. PSP :
00
02
04
05
0A
0E
12
16
2C
50
5C
6C
80-FF

INT 20H (CD20).


0. p, 512K
8000H 80000H.
.
DOS.
.
Ctrl/Break.
.
.
ASCIIZ .
DOS (INT 21H RETF).
1,
(FCB#1).
2,
(FCB#2); ,
FCB#1 .
(DTA).

DTA
-------------------------- PSP 80H
- .
,
.
, ( ).
"",

. DTA:
1. . ,
CALCIT.EXE CALCIT [return].
, DOS PSP ,
.80 .000D. ,
CALCIT, "
". Return ,
. ,
.0D. , .80 81 000D.
2. . ,
( ), , COLOR BY,
COLOR
"BY" . ,
.80, DOS :
80: 03 20 42 59 0D
3, , "BY" .
3. . DEL
( )
. , , DEL B:CALCIT.OBJ
[return], PSP, .5C .80, :
5C: 02 43 41 4C 43
C A L C
80: 0D 20 42 3A 43
B : C

49
I
41
A

54 20 20 4F
T
O
4C 43 49 54
L C I T

42
B
2E
.

4A
J
4F 42 4A 0D
0 B J

.5C, FCB,
, , CALCIT.OBJ,
. (02=B
). CALCIT ,
, , OBJ. ,
:
progname A:FILEA,B:FILEB
DOS FCB FILEA .5C FCB FILEB
.6C.
.80
( ) - 16, (.20) A:FILEA,B:FILEB
(OD).
PSP ,
PSP
. DTA COM-
.80 SI :
MOV SI,80H
CMP BYTE PTR [SI],0
JE EXIT

; DTA
; ?

EXE- ,
PSP. ,
DS ES PSP,
ES DS:
MOV AX,DSEG

MOV DS,AX
MOV SAVEPSP,ES
PSP:
MOV SI,SAVEPSP
CMP BYTE PTR [SI+ 80H],0
JE EXIT

; ?

DOS 3.0 INT 62H, BX


PSP, PSP.
COM-
________________________________________________________________
EXE-, COM- .
COM- , DOS ""
, - COM.
, COM- EXE-
.
INT 20H ( DOS). COM-
DOS
PSP.
64
(.FFFE) , .
.
.100 ( PSP).
CS:IP, .. PSP.
COM-
.
RET IP
, .
CS:IP PSP,
INT 20H.
COMMAND.COM. (
INT 20H RET,
COMMAND.COM).
EXE-
________________________________________________________________
EXE-, ,
: 1) - ,
2) .
,
, ,
.
:
00
02
04
06
08
0A
0C

.4D5A.
EXE-.
EXE-.
512 EXE-, .
.
16- () , (
, ).
,
.
.

0E
10
12
14
16
18
1A
1C

,

. .0000
, .FFFF - .
,
.
.
, SP
.
- ( )
.
, IP
.
.
CS.
.
: ,
EXE-.
,
, 06.

512 ,
. 06
,
. , 1C
,
.

COMMAND.COM, . COMMAND.COM
:
- .
- (
04 08)
.
-

( OE).
- SS SP
.
- DS ES
.
- CS PSP
( 16) CS.
PSP, 256
(.100). CS:IP
, .. .
CS SS ,
DS ( ES)
:
1.
2.
3.
4.
5.

PUSH
SUB
PUSH
MOV
MOV

DS
AX,AX
AX
AX,datasegname
DS,AX

; PSP
;
;
; DX
;

RET IP
, .

CS:IP ,
PSP, INT 20H.
, DOS.
EXE-
________________________________________________________________
(MAP) :
Start
Stop
Length
Name
00000H
0003AH
003BH
CSEG
00040H
0005AH
001BH
DSEG
00060H
0007FH
0020H
STACK
Program entry point at 0000:0000

Class
CODE
DATA
STACK

MAP ( )
. H

. ,
,
.
MAP CSEG
00000 -
. .003B .
DSEG .00040
.001B. .00040
CSEG
,
(.. .10).
, STACK, .00060 -
DSEG, .
DEBUG ,
DOS
. ,
( ),


.
(
):
00
02
04
06
08
0C
0E
10
14
16
18

.4D5A.
: 5B00.
512 , : 0200 (.0002
512 = 1024).

,

: 0100, .. 0001.
16 : 2000 (.0020=32
3216=512).
: .FFFF.
: 6000 .60.
SP: 2000 .20.
IP: 0000.
C CS: 0000.
C : 1E00 .1E.

DEBUG
:
SP = 0020
SS = 13A5

DS = 138F
CS = 139F

ES = 138F
IP = 0000

EXE- DS ES
, ,
IP, SS SP - .
SP
----------- .20
. , 16
DUP (?), .. 16 32 (.20) .
SP .
CS
----------- DS ,
PSP .138F(0). PSP .100 ,
, PSP,
.138F0+100=139F0.
CS. , CS
(CSEG). D CS:0000 DEBUG
.
LST
, R.
SS
----------- SS
:
PSP (.DS)
PSP

138F0
100
60
----13A50

DS
----------- DS PSP.
, DS
:
0004 B8 ---- R
0007 8E D8

MOV AX,DSEG
MOV DS,AX

DSEG,
.
DEBUG :
B8 A313
A313 DS 13A3.

CS
DS
SS

139F0
13A30
13A50

00
40
60


DEBUG

PUSH
SUB
PUSH
MOV
MOV

IP
IP
IP
IP
IP

DS
AX,AX
AX
AX,DSEG
DS,AX

SP
AX ( )
SP
AX
DS

DS .
D DS:00
DSEG D SS:00 .

________________________________________________________________
,
. .4B
.
ASCIIZ- DX,
BX (
ES:BX). AL 0 3:
AL=0. .
,
Cntrl/Break
. ,
SP, , .
, ES:BX, :

0
2
6
10

.
PSP+80H.
FCB PSP+5CH.
FCB PSP+6CH.

AL=3. .
, PSP .
.
ES:BX :

0
2

.
.

, AX: 01, 02, 05, 08, 10


11. .22.2 DOS DIR
D. , EXE-. (
PC Magazine ).
__________________________________________________________________________
TITLE

EXDOS

(EXE) DOS 4BH DIR

CSEG

GMENT PARA 'Code'


ASSUME CS:CSEG,DS:CSEG,ES:CSEG
BEGIN: JMP
SHORT MAIN
;---------------------------------------------------------PARAREA DW
?
;
DW
OFFSET DIRCOM ;
;
DW
CSEG
DW
OFFSET FCB1
; FCB2
DW
CSEG
DIRCOM DB
17,'/C DIR D:',13,0
FCB1
DB
16 DUP(0)
FCB2
DB
16 DUP(0)
PROGNAM DB
'D:COMMAND.COM',0
; --------------------------------------------------------MAIN
PROC
FAR
MOV
AH,4AH
; 64K
MOV
BH,100H
;
INT
21H
JC
E10ERR
; ?
MOV
DI,2CH
;
MOV
AX,[DI]
;
LEA
SI,PARAREA
;
MOV
[SI],AX
; 1
MOV
AX,CS
; DS ES
MOV
DS,AX
; CSEG
MOV
ES,AX
MOV
AH,4BH
;
MOV
AL,00
;
LEA
BX,PARAREA
; COMMAND.COM
LEA
DX,PROGNAM
INT
21H
; DOS
JC
E20ERR
; ?
MOV
AL,00
;
JMP
X10XIT
E10ERR:
MOV
AL,01
; 1
JMP
X10XIT
E20ERR:
MOV
AL,02
; 2
JMP
X10XIT
E10XIT:
MOV
AH,4CH
;
INT
21H
; DOS
MAIN
ENDP
CSEG
ENDS
END
__________________________________________________________________________
.22.2. DIR .

23
BIOS DOS
__________________________________________________________________________
: , BIOS DOS.

________________________________________________________________
,
.
:
, -
(, ).
BIOS (Basic Input/Output System) ROM
.
-
. BIOS- DOS-,
IN OUT.

________________________________________________________________
IBM PC ROM FFFF0H.
,
, CS FFFFH, IP . FFFF:0
FFFF0, BIOS. BIOS
.
BIOS ( 0) ,
, INT 11H
( ) INT 12H (
).
BIOS
DOS. , BIOS
INT 19H ,
.

, IBMBIO.COM, IBMDOS.COM
COMMAND.COM .
:

BIOS
IBMBIO.COM IBMDOS.COM
COMMAND.COM

COMMAND.COM
RAM ()
ROM BASIC
ROM BIOS
INTR
. , IF
1 ( ), (
)
, IF 0 ( ).
, , INT 12H,
, .
, 0000.
256 ,
1024 .0 .3FF.

,
CS IP .
. 23.1.
, CS
IP. , 12H (

AX ) .0048 (.12 4 =
.48). . 0048
IP SS. ,
CS:IP,
BIOS, .
IRET (Interrupt Return),
CS IP
, .
__________________________________________________________________________

(.)
0-3
4-7
8-B
C-F
10-13
14-17
18-1F
20-23
24-27
28-37
38-3B
3C-3F
40-43
44-47
48-4B
4C-4F
50-53
54-57
58-5B
5C-5F
60-63
64-67
68-6B
6C-6F
70-73
74-77
78-7B
7C-7F
80-83
84-87
88-8B
8C-8F
90-93
94-97
98-9B
97-9F
AO-FF
100-1FF
200-217
218-3C3
3C4-3FF


(.)
0
1
2
3
4
5
6,7
8
9
A,B,C,D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28-3F
40-7F
80-85
86-F0
F1-FF


( DEBUG)
(NMI)
( DEBUG)



AT


(.. 8, 9, 10)
(..9)
(..2)
- (..18)

. AT
(..9)
(..19)
BASIC, ROM







(DOS)
DOS
(DOS)
Ctrl/Break (DOS)
(DOS)
(DOS)
(DOS)
(DOS)
DOS

BASIC
BASIC-

00-1F BIOS,
20-FF DOS BASIC.
__________________________________________________________________________

.23.1. .
BIOS
________________________________________________________________
BIOS.
INT 05H. .
. INT 05H
, Ctrl/PrtSc - .
.
INT 10H. .
, .9.
INT 11H.
. ,
AX.
AX
.410. AX:

15,14
13
12
11-9
7,6
5,4

1
0

.
.
.
RS232.
, 0=1:
00=1, 01=2, 10=3 11=4.
:
00 = ,
01 = 4025 ,
10 = 8025 ,
11 = 8025 - .
1 .
1

.

INT 12H .
AX , , .200
512 .
.
INT 13H. - .
- ,
16.
INT 14H.


.
-
RS232. DX (0 1)
RS232. , AH,
AX
.
INT 15H. -
AT.
- ,
AT.

INT 16H. .
, .9.
INT 17H. .
. .19.
INT 18H. BASIC, ROM.
BASIC-, ROM.
INT 19H. .
1 0
( 0, 7C00)
. ,
INT 18H ROM BASIC.
ROM BASIC,
.
INT 1AH.



.
AH.
0,
. 18,2
. AH :
AH=00 . CX
, DX - .
24 , AL .
AH=01 . CX
( ) DX ( ).
02 06 AT.
INT 1FH.



.
128-255 1 , .

128
ASCII- ( 0 127).
DOS
________________________________________________________________
BIOS DOS: IBMBIO.COM
IBMDOS.COM. DOS
, DOS
, BIOS .
IBMBIO.COM BIOS .
-
.
IBMDOS.COM

, .
INT 21H, IBMDOS
. IBMDOS
IBMBIO,
BIOS. :

ROM

------------ ----------- -----------

DOS
DOS
----- -----------
/ IBMDOS.COMIBMBIO.COMBIOS
L------------ L----------- L----------- L----- L---------- , .20 .62
DOS. :
INT 20H. .
DOS.
.
INT 21H. DOS. DOS,
AH.
DOS .
INT 22H.


. (.INT 24H).
INT 23H.

Ctrl/Break. (.INT 24H).

INT 24H.

.
,

,
.
DOS.
INT 25H. . ..17.
INT 26H. . ..17.
INT 27H. ,
. COM- .
"
".
DOS INT 21H
________________________________________________________________
DOS INT 21H.
AH:
00
01
02
03
04
05
06
07
08
09
0
0
0
0D
0
0F
10

( INT 20H).
.
.
.
.
(.19).
.
Ctrl/Break.
Ctrl/Break.
(.8).
(.8).
.
.
(.16).
(.16).
FCB (.16).
FCB (.16).

11
12
13
14
15
16
17
18
19
1
1
1
21
22
23
24
25
26
27
28
29
2
2
2
2D
2

(.16).
(.16).
(.16).
(.16).
(.16).
(.16).
(.16).
DOS.
(.16).
(DTA).
FAT .
FAT .
(.16).
(.16).
.
.
.
.
(.16).
(.16).
.
(CX-,D-,DL-).
.
(CH-,CL-,D-,DL-1/100).
.
/ .

DOS 2.0:
2F
30
31
33
35
36
38
39

3
3C
3D
3E
3F
40
41
42
43
44
45
46
47
48
49
4
4
4
4D
4
4F

DTA ES:BX.
DOS .
,
.
Ctrl/Break.
( ).
.
.
( MKDIR).
( RMDIR).
( CHDIR).
FCB (.17).
FCB (.17).
FCB (.17).
(.8,17,19).
(.8,17,19).
(.17).
(.17).
(.17).
- .
.
"" .
(.17).
.
.
.
/ ().
.
.
(.17).
(.17).

54
56
57

.
(.17).
/ .

DOS 3.0:
59
5
5
5
62

.
.
.
/ .
(PSP).

DOS
.

________________________________________________________________
(Prokey, Superkey,
Homebase, Sidekick .), ,
.
.

,
DOS .
, COM-
,
RET INT 20H
INT 27H DOS 31. INT 27
DX :
MOV
INT

DX,prog-size
27H

DOS ()

. .

, DOS,
DOS, DIR, COPY CLS.
,
,
, .
( ) :
1) ,

;
2) ,
:

;
- ,
;
- DOS
;
3) , ,
, .
,

, - ! .

:

IIO. IBMDOS.COM
COMMAND.
-
-


__________________________________________________________________________
TITLE RESIDENT (COM)
;

;
Alt+Left Shift
;---------------------------------------------------------INTTAB SEGMENT AT 0H
; :
ORG
9H*4
; Int 9H,
KBADDR LABEL DWORD
;
INTTAB ENDS
;---------------------------------------------------------ROMAREA SEGMENT AT 400H
; BIOS:
ORG
17H
; ,
KBFLAG DB
?
; Alt + Shift
ROMAREA ENDS
;---------------------------------------------------------CSEG
SEGMENT PARA
;
ASSUME CS:CS
ORG
100H
BEGIN: JMP
INITZ
;
KBSAVE DD
?
; INT 9 BIOS
;
:
;
--------------------------------COLORS PROC
NEAR
;
PUSH
AX
; Alt+Left Shift
PUSH
BX
PUSH
CX
;
PUSH
DX
PUSH
SI
PUSH
DI
PUSH
DS
PUSH
ES
PUSHF
CALL
KBSAV
;
ASSUME DS:ROMAREA
MOV
AX,ROMAREA
; DS
MOV
DS,AX
;
MOV
AL,KB AG
; Alt+Left Shift
CMP
AL,00001010B ;Alt+Left Shift ?
JNE
EXIT
; -
MOV
AX,0600H
;
MOV
BH,61H
;
MOV
CX,00
MOV
DX,18 FH
INT
10H
EXIT:
POP
ES
;
POP
DS

POP
POP
POP
POP
POP
POP
IRET
COLORS ENDP
;
;
INITZE PROC
ASSUME
PUSH
MOV
MOV
CLI
MOV
MOV
MOV
MOV
MOV
MOV
STI
MOV
INT
INITZE ENDP

DI
SI
DX
CX
BX
AX
;
:
-------------------------NEAR
;
DS:INTTAB
DS
; DOS
AX,INTTAB
;
DS,AX
;
; :
AX,WORD PTR KBADDR
;
WORD PTR KBSAVE,AX
; BIOS
AX,WORD PTR BADDR+2
WORD PTR KBSAVE+2,AX
WORD PTR KBADDR,OFFSET COLORS ;
WORD PTR KBADDR+2,CS
; BIOS
;
DX,OFFSET INITZE ;
27H
;
;

CSEG

ENDS
END
BEGIN
__________________________________________________________________________
.23.2
.23.2 ,
Alt Left
Shift. , :
INTTAB ,
0, - 9 (
), KBADDR.
ROMAREA , 400,
(KBFLAG), .
3 Alt, 1 -
Left Shift.
CSEG
COM-.

JMP INITZE
(INITZE) .
DS
(INTTAB) INT 9 (KBADDR)
KBSAVE . KBADDR
(COLORS) ( )
CS ( ). , KBADDR
: CS,
COLORS ,
, .
DX COLORS ( INITZE
, COLORS)
, INT 27H.
COLORS ,

.
(, DOS ),
, (
). KBSAVE, ..
,
Alt Left Shift.
, .

( )
IRET.
,
.
,
9,

, .

________________________________________________________________
,
.
.
65 536 , .
- IN
OUT:
- IN AL
() (). :
IN

- OUT AL ()
(). :
OUT

:
1.
0 255:
: IN
: OUT

AL.#
#,

;
;

2. DX
0 65535.
. DX
1. 60:
MOV
IN

DX,60H ; 60 ()
AL,DX ;

(
):
21
40...42
60
61
201

.
/

( 0 1)

3B0...3BF
3D0...3DF /
3F0...3F7
, , ,
INT 16H.
BIOS, IN 60.
DOS BIOS.
BIOS 21,
40...42, 60 201. BIOS IBM PC
IN OUT.

________________________________________________________________

.
: 1)
1 21

Intel
8255A-5
( ) (1); 2)
Intel 8353-5 (PIT).

1,19318 . PPI
2 0 61 .
.23.3
. DURTION
, TONE .
61
. CLI ,
. 18,2 , (
CLI) .
TONE :
, - . , BIOSPKR
,
1 TONE (.. TONE 2).
TONE

, DURTION
, ..
.
, TONE .
DURTION TONE
. ,
CLI.
, TONE
01, DURTION - .
TONE
. DURTION. DURTION .
,
, .
__________________________________________________________________________
TITLE SOUND (COM)
SOUNSG SEGMENT PARA 'Code'
ASSUME CS:SOUNG,DS:SOUNG,SS:SOUNG
ORG
100H
BEGIN: JMP
SHORT MAIN
; ------------------------------------------------------DURTION DW
1000
;
TONE
DW
256H
; ()

; ------------------------------------------------------MAIN
PROC
NEAR
IN
AL,61H
;
PUSH
AX
;
CLI
;
CALL
B10SPKR
;
POP
AX
;
OUT
61H,AL
;
STI
;
RET
MAIN
ENDP
B10SPKR PROC
B20:
MOV
B30:
AND
OUT
MOV
B40:
LOOP
OR
OUT
MOV
B50:
LOOP
DEC
JNZ
SHL
SHR
JNZ
RET
B10SPKR ENDP

NEAR
DX,DURTION

AL,11111100B
61H,AL
CX,TONE

; 0 1
;
;

B40
AL,00000010B
61H,AL
CX,TONE

;
; 1
;
;

B50
DX
B30
DURTION,1
TONE,1
B20

;
;
;?
; - ,
;
; ?
; -

SOUNSG ENDS
END
BEGIN
__________________________________________________________________________
.23.3

24

__________________________________________________________________________
: .

________________________________________________________________

. ,
, ,

,
.
, , , ,
.

________________________________________________________________

, COUNTER:
ADD CX,COUNTER


.

, ,
. , ,
(+).
:
- BX [BX]
DS BP [BP]
SS. ,
MOV DX,[BX]

DX ,
BX DS;
- DI [DI] SI
[SI], DS. ,

MOV AX,[SI]

A ,
SI DS;
- [],
. ,
MOV [BX+SI+4],AX

;++

, ,
DS,
BX, SI 4;
- (+ -) .
. ,

MOV DX,8[DI][4]

;++

DX ,
DS, 8, DI
4.
.
[BX + BP]
[DI + SI].
.

________________________________________________________________
: ,

, , .
.
.
, , MASK,
WIDTH RECORD
.
LENGTH
---------------- LENGTH ,
DUP. , MOV DX 10:
TABLEA

DW
...
MOV

10 DUP(?)
DX,LENGTH TABLEA

DUP , LENGTH
01. . SIZE TYPE .
OFFSET
----------------- OFFSET
. :
OFFSET
,
MOV DX,OFFSET TABLEA
DX () TABLEA
. (, LEA ,
OFFSET.)
PTR
-------------- PTR BYTE, WORD
DWORD (DB, DW DD)
NEAR FAR .
:
PTR
"" , BYTE.
.
PTR:
FLDB DB
DB
FLDW DW
MOV
ADD
MOV
MOV
CALL

22H
35H
2672H
A,BYTE PTR FLDW
BL,BYTE PTR FLDW+1
BYTE PTR FLDW,05
AX,WORD PTR FLDB
FAR PTR[BX]

;0 7226
; 1- (72)
; 2- (26)
; 05 1-
;3 (2235)
;

LABEL, , ,
PTR.

SEG
------------- SEG ,
.
,

. :
SEG
SEG MOV:
MOV
MOV

DX,SEG FLOW
DX,SEG A20

;
;

SHORT
--------------- SHORT - NEAR JMP,
+127 -128 :
JMP

SHORT


.
,
SHORT.
SIZE
-------------- SIZE LENGTH TYPE
DUP.
:
SIZE
. TYPE.
TYPE
-------------- TYPE ,
:

DB
DW
DD
DQ
DT
STRUC
NEAR
FAR

1
2
4
8
10
, STRUC
FFFF
FFFE

TYPE:
TYPE

, TYPE, LENGTH
SIZE:
FLDB
TABLEA

DB
DW
...
MOV
MOV
MOV
MOV

?
20 DUP(?)

; 20

AX,TYPE FLDB
AX,TYPE TABLEA
CX,LENGTH TABLEA
DX,SIZE TABLEA

;AX
;AX
;CX
;DX

=
=
=
=

0001
0002
000A (10)
0014 (20)

TABLEA DW, TYPE


0002, LENGTH - 000 ( DUP) SIZE -
, .. 14 (20).

________________________________________________________________
. .5
(DB, DW
.).
ASSUME
----------------- ASSUME -
CS, DS, ES SS. :
ASSUME

_:

[, ... ]

, (GROUP)
SEG. ASSUME
, :
ASSUME

CS:CODESG,DS:DATASG,SS:STACK,ES:DATASG

ASSUME
NOTHING:
ASSUME

ES:NOTHING

, , DS
NOTHING,
DS:
MOV
MOV

AX,DS:[BX]
AX,DS:FLDW

;
; FLDW

, DS
.
EXTRN
---------------- EXTRN -
, ,
. :
EXTRN

: [, ... ]

EXTRN .21.
GROUP
---------------- (,
, ). GROUP -
, 64 ,
:

GROUP [, ... ]

GROUP SEG1 SEG2


:
GROUPX
SEG1
ASSUME
SEG1
SEG2
ASSUME
SEG2

GROUP
SEGMENT
CS:GROUPX
ENDS
SEGMENT
CS:GROUPX
ENDS

SEG1,SEG2
PARA 'CODE'
PARA 'CODE'

INCLUDE
------------------

.
,
.

,
ASCII- ,
CONVERT.LIB.

INCLUDE C:CONVERT.LIB
,
ASCII-.
.
( ,
INCLUDE .)
LST- 30-
( LST- 33- ).
.20 () INCLUDE
,
.
LABEL
---------------- LABEL .
:
LABEL

BYTE, WORD

DWORD

.
LABEL , NEAR FAR.
, , DB,

DW. BYTE WORD:


REDEFB
FIELDW
REDEFW
FIELDB

LABEL
DW
LABEL
DB
DB
MOV
MOV

BYTE
2532H
WORD
25H
32H
AL,REDEFB
BX,REDEFW

;
;

MOV FIELDW.
MOV , FIELDB.
PTR .
NAME
--------------- NAME :
NAME
:
1) NAME ,
;
2) NAME ,
TITLE;
3) NAME TITLE ,
.
.
ORG
--------------
.
:

00
02
03
05

FLDA
FLDB
FLDC
FLDD

DW
DB
DW
DD

2542H
36H
212EH
00000705H


02
03
05
09

- 00. FLDA
,
02. FLDB ,
03 ...

ORG. :
OR6
, ,
.
, FLDD:

00
01
03

FLDX
FLDY
FLDZ

ORG
DB
DW
DB
ORG

0
?
?
?
$+5

00
01
02
04
09

ORG .
FLDX, FLDY FLDZ , FLDA,
FLDB FLDC:
: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
| |
|
FLDA
FLDB FLDC FLDD
| |
|
FLDX FLDY
FLDZ
, ($), ORG,
. , $+5
04 + 5 = 09,
, FLDD.
FLDC ,
03, FLDZ
:
MOV
MOV

AX,FLOC
AL,FLDZ

;
;O

ORG .

. ,
, ,
. ORG
STRUCT.
PROC
--------------- ,
PROC ENDP.
.
JMP,
CALL RET
.
, ,
NEAR:
- PROC

[NEAR]

, NEAR no .
,
CALL,
PUBLIC. ,
ASSUME CS,
FAR:
PUBLIC -,
- PROC
FAR
CALL

RET.
PUBLIC
----------------- PUBLIC - ,
. :
PUBLIC [,...]
PUBLIC .21.
RECORD
----------------- RECORD .
-
. :
RECORD -: [=] [, ... ]

. (:)
, 1 16 :

1...8
9...16

8
16

8 , 9
16 - , (
). RECORD:
BITREC RECORD BIT1:3,BIT2:7,BIT3:6
BIT1 3 BITREC, BIT2 - 7
BIT3 - 6 . - 16, .. .
BITREC, , :
BITREC2 RECORD BIT1:3=101B,BIT2:7=0110110B,BIT3:011010B
, RECORD .
,
. ,
RECORD , (
):
DEFBITS BITREC <>
AD9A.
9AAD . ,
BITREC.
.24.1 BITREC
RECORD, .
.
RECORD WIDTH, MASK
.

RECORD ,
RECORD.

WIDTH. WIDTH
RECORD . .24.1 10
WIDTH. MOV
BH RECORD BITREC (16 );
MOV AL BIT2 (7 ).
.
__________________________________________________________________________
TITLE RECORD (COM) RECORD
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
0100
ORG
100H
0100 EB 02
BEGIN:
JMP
SHORT MAIN
; ----------------------------------------------------BITREC RECORD BIT1:3,BIT2:7,BIT3:6
;
0102 9A AD
DEFBITS BITREC <101B,0110110B,011010B> ;
; ----------------------------------------------------0104
MAIN PROC
NEAR
0104
A10:
;:
0104 B7 10
MOV
BH,WIDTH BITREC ; (16)
0106 B0 07
MOV
AL,WIDTH BIT2
; (07)
0108
B10:
; :
0108 B1 0D
MOV
CL,BIT1
; .0D
010A B1 06
MOV
CL,BIT2
;
06
010C B1 00
MOV
CL,BIT3
;
00
010E
C10:
;:
010E B8 E000
MOV
AX,MASK BIT1
; .E000
0111 BB 1FC0
MOV
BX,MASK BIT2
;
1FC0
0114 B9 003F
MOV
CX,MASK BIT3
;
003F
0117
D10:
; BIT2:
0117 A1 0102 R
MOV
AX,DEFBITS
; ,
011A 25 1FC0
AND
AX,MASK BIT2
; BIT1 BIT3,
011D B1 06
MOV
CL,BIT2
; 06,
011F D3 E8
SHR
AX,CL
;
0121
E10:
; BIT1:
0121 A1 0102 R
MOV
AX,DEFBITS
; ,
0124 B1 0D
MOV
CL,BIT1
; 13,
0126 D3 E8
SHR
AX,CL
;
0128 C3
RET
0129
MAIN
ENDP
0129
CODESG ENDS
END
BEGIN
_____________________________________________________________________
0000

Structures and records:


N a m e
BITREC
BIT1 .
BIT2 .
BIT3 .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

Segments and Groups:


N a m e
CODESG . . . . . . . . . . . .

.
.
.
.

Symbols:

Widht # fields
Shift Widht
0010 0003
000D 0003
E000
.
0006
0007
0000 0006
003F
Size
0129

Align
PARA

Mask

Initial

0000
1FC0
0000

0000

Combine Class
NONE
'CODE'

N a m e
Type
Value Attr
A10. . . . . . . . . . . . . . L NEAR 0104
CODESG
B10. . . . . . . . . . . . . . L NEAR 0108
CODESG
BEGIN. . . . . . . . . . . . . L NEAR 0100
CODESG
C10. . . . . . . . . . . . . . L NEAR 010E
CODESG
D10. . . . . . . . . . . . . . L NEAR 0117
CODESG
DEFBITS. . . . . . . . . . . . L WORD 0102
CODESG
E10. . . . . . . . . . . . . . L NEAR 0121
CODESG
MAIN . . . . . . . . . . . . . N PROC 0104
CODESG Length =0025
__________________________________________________________________________
.24.1. p RECORD
. RECORD,:
MOV

CL,BIT2

BIT2.
, "
", .

, BIT2
. .24.1 10 ,
CL BIT1, BIT2 BIT.
MASK. MASK ""
, ,
, , . ,
MASK , BITREC,
:

11
12
1

1110000000000000
0001111111000000
0000000000111111


000
1FC0
003F

.24.1 10
MASK BIT1, BIT2 BIT. D10 10
BI2 BI1
BITREC. D10
, RECORD,
MASK BI2:
RECORD:
AND MASK BI2:
:

101 0110110 011010


000 1111111 000000
000 0110110 000000

, BI2.

:
0000000000110110

(0036)

10 A ,
RECORD, BI1 ,
13
:
0000000000000101

(0005)

SEGMENT
------------------ ,
. :
_ SEGMENT [] [] []
.
.
.
_ ENDS
.
, .

.
,
PAGE
PARA
WORD
BYTE

=
=
=
=

xxx00
0 ( )
e ( )

- ,
- .
.
, :
NONE: .
,

.
, ;
PUBLIC: PUBLIC - , ,
.
;
STACK: STACK PUBLIC.

STACK. ,
(SP) ;
COMMON: COMMON
.
.
;
AT-: .

, , ROM
. ,


VIDEO_RAM

SEGMENT AT 0B800H

,
.

,
. 'STACK' 'CODE'.

-------------------------------SEG1 SEGMENT PARA PUBLIC 'CODE'


ASSUME CS:SEG1
...
SEG1 ENDS
-------------------------------SEG2 SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:SEG1
...
SEG2 ENDS
--------------------------------

:
SEG1
SEG2
SEG2
SEG1

SEGMENT
...
SEGMENT
...
ENDS
...
ENDS

SEG1
SEG2
SEG1

GROUP.
STRUC
---------------- STRUC
. ASM.
:
- STRUC
...
[ ]
...
- ENDS
STRUC

ENDS. ;
, .
DB, DW, DD DT
.
.24.2 STRUC PARLIST
.
:
PARAMS

PARLIST <>

.
( ) ,
.

.
(PARAMS )
:

MOV

AL,PARAMS.ACTLEN

,
.
.
__________________________________________________________________________
TITLE DSTRUC (COM)
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG
100H
BEGIN: JMP
SHORT MAIN
; --------------------------------------------PARLIST
STRUC
;
MAXLEN DB
25
;
ACTLEN DB
?
;
NAMEIN DB
25 DUP(' ')
;
PARLIST
ENDS
;
PARAMS PARLIST <>
;

0000
0100
0100 EB 29
0000 19
0001 ??
0002
19 [ 20 ]
001B

0102 19
0103 ??
0104
19 [ 20 ]
011D 57 68 61 74 20 69 PROMPT DB
'What is name?', 'S'
73 20 6E 61 6D 65
3F 24
; --------------------------------------------012B
MAIN
PROC
NEAR
012B B4 09
MOV
AH,09
;
012D 8D 16 011D R
LEA
DX,PROMPT
0131 CD 21
INT
21H
0133 B4 0A
MOV
AH,0AH
;
0135 8D 16 0102 R
LEA
DX,PARAMS
0139 CD 21
INT
21H
013B A0 0103 R
MOV
AL,PARAMS.ACTLEN ;
;
...
013E C3
RET
013F
MAIN
ENDP
013F
CODESG ENDS
END
BEGIN
Structures and records:
N a m e
PARLIST.
MAXLEN
ACTLEN
NAMEIN

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

Width # fields
Shift Width Masc
001B 0003
0000
0001
0002

Segments and Groups:


N a m e
Size
CODESG . . . . . . . . . . . . . 013F

Initial

Align
PARA

Combine Class
NONE
'CODE'

Value
0100
012B
0102
011D

Attr
CODESG
CODESG Length =0014
CODESG
CODESG

Symbols:
BEGIN.
MAIN .
PARAMS
PROMPT

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

N a m e
. . . .
. . . .
. . . .
. . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

L
N
L
L

Type
NEAR
PROC
001B
BYTE

__________________________________________________________________________
.24.2. pp p pp

25

__________________________________________________________________________
:
.

________________________________________________________________

.
,
:
:
40
50
3
CB
FD

INC AX
PUSH AX
RET (short)
RET (far)
STD

:
; AX 1
; A
;
;
;


. , , 8-
, ,
.

________________________________________________________________
, , ,
, "w", :
. ,
. .25.1 .
MOV :
MOV

,00

10110 100 00000000


| |
w rg = A

__________________________________________________________________________
, :
:
000
001
010
011
100
101
110
111

w = 0
AL
CL
DL
BL
AH
CH
DH
BH

w = 1
AX
CX
DX
BX
SP
BP
SI
DI

: :
00
ES
01
CS
10
SS
11
DS
__________________________________________________________________________
.25.1.

(w = 0) A (100). MOV
:
MOV

AX,00 10111 000 00000000 00000000


| |
w reg = AX

(w=1)
A (000). ,
w .

________________________________________________________________
, ,
:
1) mod - , 11
00, 01 10 ;
2) reg - ;
3) r/m - (r , m - ).
, "",
1 2.

BX:
ADD

BX,AX

00000011 11 011 000


dw mod reg r/m

d=1 , mod (11) reg (011)


1, r/m (000) 2. w=1,
. , AX (OOQ) B
(011).

.
.
MOD
--------- mod .
:
00

/m , (
) ;

01
10
11

/m
;
/m
/m .
-


;
w ( )
.

REG
--------- reg ( w) -
.
R/M
--------- /m (/) mod
, .25.2.
__________________________________________________________________________
r/m

mod=00

mod=01

mod=10

mod=1.1
mod=11
w=0
w=1
000 BX+SI
BX+SI+disp
BX+SI+disp
AL
AX
001 BX+DI
BX+DI+disp
BX+DI+disp
CL
CX
010 BP+SI
BP+SI+disp
BP+SI+disp
DL
DX
011 BP+DI
BP+DI+disp
BP+DI+disp
BL
BX
100
SI
SI+disp
SI+disp
AH
SP
101
DI
DI+disp
DI+disp
CH
BP
110 Direct
BP+disp
BP+disp
DH
SI
111
BX
BX+disp
BX+disp
BH
DI
__________________________________________________________________________
.25.2. r/m

________________________________________________________________
B A:
ADD

BX,AX

0000 0011 11 011 000


dw mod reg r/m

1 , reg w 1 (B),
mod, r/m w - 2 (A);
w
1 ,
mod 11 , 2 ;
reg 011 , 1 B;
r/m 000 , 2 AX.
AL BL:
MUL

BL

11110110 11 100 011


w mod reg r/m

MUL , AL .
(w = 0), mod
, /m = 011 BL. reg = 100
.


________________________________________________________________
MOV :
MOV

mem,AX 10100001 dddddddd dddddddd

A AL ,
: . w = 1
, , 16- A.
AL w = 0. 2 3
. ,
AL, () .

________________________________________________________________
AL .
, AL

A :
MUL

mem_byte

11110110 00 100 110


w mod reg r/m

reg 100, mod = 00


, a r/m=110 - .
,
.
, LEA,
:
LEA

DX,mem 10001101 00 010 110


LEA mod rg r/m

Reg =010 DX. Mod =00 r/m=110


.
.

________________________________________________________________

. , ,
. 80186,
80286 80386
.
:
addr
addr-high
addr-low
data
data-high
data-low
disp
rg

;
();
() . ;
(8 w=0 16 w= 1);
() ;
() ;
( );
.

AAA: ASCII-
------------------------------------------ : ASCII- AL.
AL 9 AF
1, AAA
AF CF.
AL.
: AF CF ( OF, PF, SF
ZF ).
: 00110111 ( ).
AAD: ASCII-
----------------------------------------- : ASCII- . AAD
A
( ASCII-).
AL .
A 10.
AL A. AAD .
: PF, CF, ZF ( AF CF OF
).
: |11010101|00001010|.
AA: ASCII-
------------------------------------------- : AAM
.
AL 10, A,
AL.
: PF, SF ZF ( AF CF
OF ).
: |11010100|00001010| ( ).
AAS: ASCII-
------------------------------------------- : ASCII-
AL. 9 CF
1, AAS 6 AL 1 , AF
CF 1.
AL.
: AF CF ( OF PF SF ZF
).
: 00111111 ( ).
ADC:
-------------------------- :

.
CF 1, ADC 1 1.
2 1, ADD.
: AF, CF, OF, PF, SF ZF.
( ):
:
|000100dw|modregr/m|
(AL) :
|0001010w|-- data--|data, w=1|
:
y100000sw|mod010r/m|--data--|data, sw=01|
ADD:
----------------------------- : ,

.
: AF, CF, OF, PF, SF ZF.
( ):
:
|000000dw|modregr/rm|
AX (AL) :
|0000010w|--data--|data, w=1|
:
|100000sw|mod000r/m|--data--|data, BW=01|
AND:
------------------ : ()
. -
.

. AND .
1,
, - . . OR,
XOR TEST.
: CF, OF, PF, SF ZF ( AF
).
( ):
:
|001000dw|modregr/m|
AX (AL) :
|0010010w|--data--|data, w=1|
:
|1010000w|modl00r/m|--data--|data, w=1|
CALL:
---------------------- :

. RET.
CALL SP 2
( IP), IP
. RET
. CALL
. SP,
CS,

.
: .
( ):
:
|11101000|disp-low|diep-high|
:
|11111111|mod010r/m|
:
|11111111|mod011r/m|
:
|10011010|offset-low|offset-high|seg-low|seg-high|
CBW:
---------------------------------- :
AL . CBW (7)
AL . CWD.
: .
: 10011000 ( ).
CLC:
-------------------------- : , 0,
, , ADC . CLC
. . STD.
: CF ( 0).
: 11111000.
CLD:
------------------------------ : , 0.
, CMPS MOVS
. . STD.
: DF ( 0).
: 11111100 ( ).
CLI:
---------------------------- :
INTR IF

0. . STI.
: IF ( 0).
: 11111010 ( ).
CMC:
--------------------------------- : CF, ..
CF .
: CF ().
: 11110101 ( ).
CMP:
--------------- : .
CMP ,
. : .
CMP ,
;

. . CMPS.
: AF, CF, OF, PF, SF ZF.
( ):
:
|001110dw|modregr/m|
AX (AL):
|0011110w|--data--|data, w=1|
:
|100000sw|mod111r/m|--data--|data, sw=0|
CMPS/CMPSB/CMPSW:
---------------------------------- : .
REPn, REPE CMPSB. CMPSB
, CMPSW - .
DS:SI, - ES:DI.
DF 0, ,
SI DI .
DF 1, , SI
DI .
: AF, CF, OF, PF, SF ZF.
: 1010011w.
CWD:
------------------------------------------ :
DX:AX,
(15- ) DX.

32- . . CBW.

: .
: 10011001 ( ).
DAA:
--------------------------------------- : BCD (
) AL.
9 AF 1, DAA 6
AL AF. AL
, 9F, CF 1, DAA 60
AL CF. . DAS.
: AF. CF, PF, SF 2F ( OF
).
: 00100111 ( ).
DAS:
---------------------------------------- :
BCD
( ) AL.
9 AF 1, DAS
60 AL CF. .
DAA.
: AF, CF, PF, SF ZF.
: 00101111 ( ).
DEC:
--------------- : 1
DEC . . INC.
: AF, OF, PF, SF ZF.
( ):
:
|01001reg|
: |1111111w|mod001r/m|
DIV:
------------- : (16 32
) (8 16 ).
, .
16- ,
8- , DIV BH.
AL, - A.
32- DX:AX
16- , DIV .
A, - DX.
. IDIV.

: AF, CF, OF, PF SF ZF (


).
: |1111011w|mod110r/m|
ESC:
--------------------------------- :

.
8087 80287.
ESC
.
: .
: |11011xxx|modxxxr/m| (x - .).
HLT:
----------------------------- : ,
. HLT CS:IP
.
CS IP
. IRET
CS IP ,
HLT.
: .
: 11110100 ( ).
IDIV:
------------------------------------- : (16 32 )
(8 16 ).
. 16-
, a 8-
, IDIV DL.
AL, - . 32-
DX:AX, 16-
, IDIV BX.
, - DX. . CBW CWD
, DIV.
: AF, CF, OF, PF, SF ZF.
: |1111011w|mod111r/m|
IMUL:
--------------------------------------- : (8 16
).
. 8- AL,
, IMUL BL.
. 16-
,

, IMUL BX.
DX:AX. . MUL.
: CF OF ( AF PF SF ZF
).
: |1111011w|mod101r/m|
IN:
---------------------------------- : AL
).
(IN ,#) DX (IN AX,DX).
80186, 80286 80386 , , INS (Input
String - ). . OUT.
: .
( ):
: |1110110w|
: |1110010w|--port--|
INC:
--------------- : 1
, INC . . DEC.
: AF, OF, PF, SF ZF.
( ):
:
|01000reg|
: |1111111w|mod000r/m|
INT:
---------------- :
256 ( ). INT
: 1) SP 2
, IF TF; 2) SP 2
CS ,
CS; 3) SP 2 IP ,
IP.
: IF TF.
:
|1100110v|--type--| ( v = 0, type = 3).
INTO:
--------------------------------- :
( OF 1) IRET 4.
( ) 10. .
INT.

: .
: 11001110 ( ).
IRET:
-------------------------------------- :
. IRET : 1)
IP SP 2; 2)
CS SP 2; 3)
SP.
2. . RET.
: .
: 11001111 ( ).
JA/JNBE: "" " "
--------------------------------------------------- :
. CF (
) ZF ( ),
IP ( )
.
: .
: |01110111|--disp--|
JAE/JNB: " " " "
--------------------------------------------------- :
. CF (
), IP

( ) .
: .
: |01110011|--disp--|
JB/JNAE: "" " "
--------------------------------------------------- :
. CF (
), IP

( ) .
: .
: |01110010|--disp--|
JBE/JNA: " " " "
--------------------------------------------------- :
. CF (

) AF , IP
( )
.
: .
: |01110110|--disp--|
JC:
------------------------ : JB/JNAE.
JCXZ: "CX "
--------------------------------- :
, CX . JCXZ
LOOP.
: .
: |11100011|--disp--|
JE/JZ: "" ""
:
. ZF
( ), IP
( ) .
: .
: |01110100|--disp--|
JG/JNLE: "" " "
------------------------------------------------------- :
. ZF ( )
SF OF ( 0 1),
IP ( )
.
: .
: |01111111|--disp--|
JGE/JNL: " " " "
------------------------------------------------------- :
. SF OF ( 0
1), IP
( ) .
: .
: |01111101|--disp--|

JL/JNGE: "" " "


------------------------------------------------------- :
. SF OF ,
IP
(
) .
: .
: |01111100|--disp--|
JLE/JNG: " " " "
------------------------------------------------------- :
. ZF (
) SF OF , IP
( )
.
: .
: |01111110|--disp--|
JMP:
------------------------- :
. JMP IP .
JMP
. CS
.
: .
( ):
:
|11101001|disp-low|disp-high|
():
|11101011|--disp--|
:
|11111111|mod100r/m|
:
|11111111|mod101r/m|
:
|11101010|offset-low|offset-high|seg-low|seg-high|
JNC:
------------------------------- : JAE/JNB.
JNE/JNZ: " " " "
------------------------------------------------ :
. ZF (

), IP
( ) .

: .
: |01110101|--disp--|
INO: ,
------------------------------------ :

.
OF , ( ), IP
( )
. . JO.
: .
: |01110001|--disp--|
JNP/JPO: ,
--------------------------------------------------------- :
,
. ,
.
. PF ( ),
IP ( )
. . JP/JPE.
: .
: |01111011|--disp--|
JHS: ,
----------------------------- :
, .
SF (), JNS IP
( )
. . JS.
: .
: |01111001|--disp--|
JO:
---------------------------- :
, .
OF (), JO
IP ( )
. . JNO.
: .
: |01110000|--disp--|

JP/JPE: ,
------------------------------------------------------ :
, .
,
. PF
( ), IP
( ) . .
JNP/JPO.
: .
: |01111010|--disp--|
JS:
--------------------- : ,
. SF
(), JS IP
( ) . .
JNS.
: .
: |01111000|--disp--|
LAHF:
----------------------------------- : .
8080. .
SAHF. LAHF
:
SZ * A * P * C

(* )

: .
: 10011111 ( )
LDS:
--------------------------------------- :
.
LDS
, .
DS, -
.
DI:
LDS

DI,_

: .
: |11000101|modregr/m|

LES:
------------------------------------------------ :

.
. . LDS.
: .
: |11000100|modregr/m|
LOCK:
--------------------------------------- : (
. LOCK
, .
,
, .
: .
: 11110000
LODS/LODSB/LODSW:
---------------------------------------------------------------- : AL
A. , LODS
, REP.
DS:SI ( LODSB) ( LODSW),
AL A . DF ,
1 ( ) 2 ( ) SI.
DF , 1 ( ) 2 (
) SI.
: .
: 1010110w ( ).
LOOP:
----------- :
. CX -
. LOOP ,
. . CX
, ,
( IP );
LOOP (
).
: .
: 11100010--disp--
LOOPE/LOOPZ: ,
---------------------------------------- :

ZF ( ).
LOOPE/LOOPZ LOOP, ,
CX,
ZF ( ). .
LOOPNE/LOOPNZ.
: .
: |11100001|--disp--|
LOOPNE/LOOPNZ: ,
----------------------------------------------- :
ZF ( ).,
LOOPNE/LOOPNZ LOOP ,
CX,
ZF ( ). .
LOOPE/LOOPZ.
: .
: |11100000|--disp--|
MOV:
---------------------- :
,
. MOV
( MOVS).
MOV.
: .
( ):
/ / :
|100010dw|modregr/m|
/:
|1100011w|mod000r/m|--data--|data w=1|
:
|1011wreg|--data--|data w=1|
AX (AL):
|1010000w|addr-low|addr-high|
AX (AL) :
|1010001w|addr-low|addr-high|
/ :
|10001110|mod0sgr/m| (sg - )
/:
|10001100|mod0sgr/m| (sg - )
MOVS/MOVSB/MOVSW:
-------------------------------------------------------- : .
MOVS(B/W) REP. MOVSB
, MOVSW - .
DS:SI
("") ES:DI - ("").

DF ,
SI DI. DF
SI DI.
: .
: 1010010w ( ).
MUL:
--------------------------- : (8 16 )
(8 16 ).
, .
8- AL,
, MUL CL.
. 16-
, , MUL
. DX:AX. .
IMUL.
: CF OF ( AF, PF, SF
ZF ).
: |1111011w|mod100r/m|
NEG:
--------------------------- :

. NEG
:
.
. . NOT. : AF,
CF, OF, PF, SF ZF.
: |1111011w|mod011r/m|
NOP:
------------------ :
. NOP XCHG
,, .
: .
: 10010000 ( )
NOT:
-------------------- : .
. .
NEG.
: .
: |1111011w|mod010r/m|

OR:
------------------- : ()
.
, . OR
.
, 1 ,
1 . . AND XOR.
: CF, OF, PF, SF ZF ( AF
).
( ):
/ :
|000010dw|modregr/m|
:
|0000110w|--data--|data w=1|
/:
|1000000w|mod001r/m|--data--|data w=1|
OUT:
---------------------------------- : AL
A.
(OUT #,) DX (OUT DX.AX).
80186, 80286 80386 , , OUTS (Output String ). . IN.
: .
( ):
: |1110111w|
:|1110011w|--port--|
POP:
------------------------------- : ( )
. SP .
POP SP 2.
POP : ,
, . . PUSH.
: .
( ):
:
|01011reg|
: |000sg111| (sg-..)
/:
|10001111|mod000r/m|
POPA: (80188,80186,80286)
------------------------------------------------------------------- : Dl, SI
BP, SP, BX, DX, CX, AX

SP 16.
PUSHA.

: .
: 01100001 ( ).
POPF:
--------------------------------- : ( )
. . PUSHF POP. SP
. POPF
SP 2.
PUSHF , POPF
.
: .
: 10011101 ( ).
PUSH:
----------------------------- : ( )
. SP
. PUSH SP 2
.
PUSH : ,
. . POP PUSHF.
: .
( ):
:
|01010reg|
: |000sg111| (sg-..)
/:
|11111111|mod110r/m|
PUSHA: (80188,80186,80286)
----------------------------------------------------------------- : AX, CX,
DX, BX, SP, BP, SI, DI
SP 16. POPA .
: .
: 01100000 ( ).
PUSHF:
------------------------------- :
. SP
. PUSHF SP 2
. . POPF PUSH.
: .

: 10011100 ( ).
RCL RCR:

--------------------------------------------------- : ()
CF.
, .
1; CL,
. RCL CF
0, . CF;
. RCR CF
, 0 CF;
. . ROL ROR.
: CF OF.
: RCL: |110100cw|mod010r/m|
RCR: |110100cw|mod011r/m|
( = 0, 1;
= 1, CL).
REP/REPE/REPZ/REPNE/REPNZ:
----------------------------------------------------- : .

CMPS, MOVS, SCAS, STOS.
CX . CX 1
.
REP

, CX .
REPE/REPZ , CX
ZF 1 ( ). REPNE/REPNZ
, CX
ZF 0 ( ).
: .
: REP/REPNE: 11110010
REPE:
11110011
RET:
-------------------------- : ,
CALL. CALL
. RET
IP SP 2.
RET, , CS
SP 2.
(, RET 4) SP.
: .
( ):
:
|11000011|
: |11000010|data-low|data-high|
:
|11001011|

: |11001010|data-low|data-high|
ROL ROR:
-------------------------------------------------------------- : ()
. ,
.
1; CL,
. ROL 0;
. ROR 0
; . . RCL
RCR.
: CF OF.
: ROL: |110100cw|mod000r/m|
ROR: |110100cw|mod001r/m|
( = 0, 1;
= 1, CL).
SAHF:
-------------------------------------- :
8080
. . LAHF. SAHF
:
SZ * A * P * C

(* )

: .
: 10011110 ( )
SAL, SAR, SHL SHR:
-------------------------------------------- : .
, .
1;
CL, .
SAR ,
. SHL SHR
. SAL
SHL. SAL SHL
.
SHR

. SAR

(0 1). ,
, .
: CF, OF, PF, SF ZF ( AF
).
: SAL/SHL: |110100cw|mod100r/m|
SAR:
|110100cw|mod111r/m|
SHR:
|110100cw|mod101r/m|
( = 0, 1;

=1, CL);
SBB:
------------------------ :

. CF 1, SBB 1
1. SBB 2 1,
SUB. . ADC.
: AF, CF, OF, PF. SF ZF.
( ):
: |000110dw|modregr/m|
AX (AL):
|0001110w|--data--|data, w=1|
:
|100000sw|mod011r/m|--data--|data, sw=01|
SCAS/SCASB/SCASW:
------------------------------------------------- :
. SCASB AL,
SCASW - AX. ES:DI
, .
REPE REPNE. DF ,
DI.
DF ,
DI.
: AF, CF, OF, PF, SF ZF.
: 1010111w ( ).
STC:
------------------------------ : CF 1. .
STD.
: CF ( 1).
: 11111001 ( ).
STD:
--------------------------------- : 1.
, , MOVS CMPS,
. . CLD.
: DF ( 1).
: 11111101 ( ).
STI:

-------------------------------- :
IF
1. . CLI.
: IF ( 1).
: 11111011 ( ).
STOS/STOSB/STOSW:
-------------------------------------------------------------- : .
REP
, .
STOSB AL, STOSW
. ES:DI
, .
DF ,
DI. DF ,
DI.
: .
: 1010101w ( ).
SUB:
------------------------------ : ,
;
. . SBB.
: AF, CF, OF, PF, SF ZF.
( ):
:
|001010dw|modregr/m|
(AL):
|0010110w|--data--|data, w=1|
:
|100000sw|mod101r/m|--data--|data, sw=01|
TEST:
--------------------- :
. TEST
AND, .

.
.
.
: CF, OF, PF, SF ZF ( AF
).
( ):
:

|1000010w|modregr/m|
(AL):
|1010100w|--data--|data, w=1|
:
y1111011w|mod000r/m|--data--|data, w=1|
WAIT:
------------------------------------------------ :
, .


. , (
) TEST
( ).
: .
: 10011011
XCHG:
------------------- :
(, XCHG AH,BL) (,
XCHG CX,word).
: .
( ):
:
|10010reg|
/ : |1000011w|modregr/m|
XLAT:
-------------------- : ,
ASCII-
EBCDIC-.
. AL
, XLAT.
AL ,
AL.
: .
: 11010111 ( ).
XOR:
--------------------- :
.
, .
XOR . ,
XOR 1 ,
, 1 . .
AND OR.

: CF, OF, PF, SF ZF ( AF


).
( ):
/ :
|001100dw|modregr/m|
AX (AL):
|0011010w|--data--|data w=1|
/:
|1000000w|mod110r/m|--data--|data w=1|

__________________________________________________________________________
1:
ASCII-
________________________________________________________________
128 ASCII-.
BASIC 128 . , .20
.
A-1. ASCII
__________________________________________________________________________

000
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028

032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060

00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
0Ch
0Dh
0Eh
0Fh
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1Ah
1Bh
1Ch


.

.


Shift out
Shift in
Data line esc
1
2
3
4

End of medium

Escape
.

20h sp
21h !
22h "
23h #
24h $
25h %
26h &
27h '
28h (
29h )
2Ah *
2Bh +
2Ch ,
2Dh 2Eh .
2Fh /
30h 0
31h 1
32h 2
33h 3
34h 4
35h 5
36h 6
37h 7
38h 8
39h 9
3Ah :
3Bh ;
3Ch <

064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092

40h
41h
42h
43h
44h
45h
46h
47h
48h
49h
4Ah
4Bh
4Ch
4Dh
4Eh
4Fh
50h
51h
52h
53h
54h
55h
56h
57h
58h
59h
5Ah
5Bh
5Ch

@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\

096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124

60h
61h
62h
63h
64h
65h
66h
67h
68h
69h
6Ah
6Bh
6Ch
6Dh
6Eh
6Fh
70h
71h
72h
73h
74h
75h
76h
77h
78h
79h
7Ah
7Bh
7Ch

`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|

029 1Dh .
030 1Eh .
031 1Fh .

061 3Dh
062 3Eh
063 3Fh

=
>
?

093 5Dh
094 5Eh
095 5Fh

^
_

125 7Dh }
126 7Eh ~
127 7Fh

2:
-
________________________________________________________________

.
. A7B8 42936, - 42936
. A7B8.

------------------------------------------------------- . A7B8

, . (A), 16
.
, . A F
10 15.
: A (10)
16

10
16
--160
, 7
+7
--167
16
16
---2672
, B (11)
+11
---2683
16
16
----42928
, 8
+8
----
42936

2,
4.

. . A7B8
(8) 1, (B)
(7) 3 (A)
B-1 . :

1
1
1
1

(8),
(8),
(8),
(8),

1
1
1
1

8
176
1792
40960
----42936


-------------------------------------------------------- 42936
42936 16;
,
, (6) .

16
(11 B) .
, 0,
.

42936
2683
167
10

/
/
/
/

16
16
16
16

2683
167
10
0

8
11
7
10

8
B
7
A

( )
( )


B-1. 42936
,
.
42936
:
.

42936
40960
----1976
1792
---184
176
--8

.
A000
700
B0
8
---A7B8

B-1. -
-------------T-----------T----------T--------T-------T------T-----T-----




+------------+-----------+----------+--------+-------+------+-----+-----+
0
00
00
00
00
00
00 00 0
1 2684354561 167772161 10485761 655361 40961 2561 161 1
2 5368709122 335544322 20971522 1310722 81922 5122 322 2
3 8053063683 503316483 31457283 1966083 122883 7683 483 3
4 10737418244 671088644 41943044 2621444 163844 10244 644 4
5 13421772805 838860805 52428805 3276805 204805 12805 805 5
6 16106127366 1006632966 62914566 3932166 245766 15366 966 6
7 18790481927 1174405127 73400327 4587527 286727 17927 1127 7
8 21474836488 1342177288 83886088 5242888 327688 20488 1288 8
9 24159191049 1509949449 94371849 5898249 368649 23049 1449 9
A 2684354560A 167772160A 10485760A 655360A 40960A 2560A 160A 10
B 2952790016B 184549376B 11534336B 720896B 45056B 2816B 176B 11
C 3221225472C 201326592C 12582912C 786432C 49152C 3072C 192C 12
D 3489660928D 218103808D 13631488D 851968D 53248D 3328D 208D 13
E 3758096384E 234881024E 14680064E 917504E 57344E 3584E 224E 14
F 4026531840F 251658240F 15728640F 983040F 61440F 3840F 240F 15
+------------+-----------+----------+--------+-------+------+-----+-----+

5 4 3 2 1

L------------+-----------+----------+--------+-------+------+-----+-----p
3:

________________________________________________________________


( - ):

AH
AL
AX

AAA
AAD
AAM
AAS
ADC
ADD
AND
CALL
CBW
CLC
CLD
CLI
CMC
CMP
CMPS
CWD
DAA
DAS
DEC

DIV
ESC
HLT
IDIV
IMUL
IN
INC
INT
INTO
IRET
JA
JAE
JB
JBE
JCXZ
JE
JG
JGE
JL


----------------BH CH DH CS SS
BL CL DL DS SI
BX CX DX ES DI

----------JLE
JS
JMP
JZ
JNA
LAHF
JNAE
LDS
JNB
LEA
JNBE
LES
JNE
LOCK
JNG
LODS
JNGE
LOOP
JNL
LOOPE
JNLE
LOOPNE
JNO
LOOPNZ
JNP
LOOPZ
JNS
MOV
JNZ
MOVS
JO
MUL
JP
NEG
JPE
NOP
JPO
NOT

---------------------EXTRN
IFNB
GROUP
IFNDEF
IF
IF1
IFB
IF2
IFDEF
INCLUDE
IFDIF
IRP
IFE
IRPC
IFIDN
LABEL

ASSUME
COMMENT
DB
DD
DQ
DT
DW
ELSE

END
ENDIF
ENDM
ENDP
ENDS
EQU
EVEN
EXITM

BYTE
COMMENT
CON
DUP


----------------------FAR
LENGTH
MOD
GE
LINE
NE
GT
LT
NEAR
HIGH
LOW
NOTHING

BP
SP

OR
OUT
POP
POPF
PUSH
PUSHF
RCL
RCR
REP
REPE
REPNE
REPNZ
REPZ
RET
ROL
ROR
SAHF
SAL
SAR

SBB
SCAS
SHL
SHR
STC
STD
STI
STOS
SUB
TEST
WAIT
XCHG
XLAT
XOR

LOCAL
MACRO
NAME
ORG
OUT
PAGE
PROC
PUBLIC

PURGE
RECORD
REPT
SEGMENT
STRUC
SUBTTL
TITLE

PRT
SEG
SHORT
SIZE

THIS
TYPE
WIDTH
WORD

EQ

LE

MASK

OFFSET

STACK

4:

________________________________________________________________

-------------------------- :
ASM.EXE - , ,
MASM.EXE - ,
.
, - .
RAM- ( ),
. MASM
( ASM), .
:
source filename
object filename
source listing
cross-reference

[.ASM]:
[filename.OBJ]:
[NUL.LST]:
[NUL.CRF]:

,
. (
) . ASM -
.
( ). , .
, .
,

. :.
,
Return. ,
OBJ-, LST- CRF-
:
source filename
object filename
source listing
cross-reference

[.ASM]:B:ASMPROG [Return]
[filename.OBJ]:B: [Return]
[NUL.LST]:B: [Return]
[NUL.CRF]:B: [Return]

:
MASM B:name.ASM,B:name.OBJ,B:name.LST,B:name.CRF
:
MASM B:filename,B:,B:,:;
- B:filename ,
;
- :
filename.OBJ;
- :

filename.LST;
- :
filename.CRF;
-

.
,
.
ASM
, ,
MASM , .
100 .
:
MASM /A
MASM /D
MASM /E
MASM /N
MASM /R
MASM /S

;
LST- ;
8087
;
;
8087 ( /E);
.


------------------------- CRF-
,

. CRF-
, . :, ,
:
cross-reference [NUL.CRF]:B: [Return]
CRF-
CREF,
. CREF; :
Cref filename [.CRF]:
List filename [cross-ref.REF]:
CRF-, B:ASMPROG.
.
CRF-
filename.REF .
, :
CREF : filename. CRF, CON CREF B:filename.CRF,B:
.
filename.REF .

-------------------- - DOS ,
- . , RAM-
( ),

.
LINK,
. :
Object Modules [.OBJ]:
Run File [d:filename.]:
List File [NUL.MAP]:

Libraries [.LIB]:
,
. (
) . OBJ -
.
( ). , .
, .
DOS.
,
Return. ,
CON:
Object Modules [.OBJ]:B:ASMPROG [return]
Run File [d:filename.]:: [return]
List File [NUL.MAP]:CON [return]
Libraries [.LIB]: [return]
CON
. LINK
:
LINK B:ASMPROG,:,CON
LINK
no DOS.

2IN
------------------ EXE2BIN.COM DOS
- -, ,

-.
EXE2BIN DOS ,
- - .
. :
EXE2BIN B:filename,B:filename.COM
-,
. -;
, .
, OBJ
.


__________________________________________________________________________
1.1. ) 01001101; ) 00111111.
1.2. ) 0101; ) 10101.
1.3. ) 00100010; ) 00100000.
1.4. ) 11101101; ) 11000110.
1.5. ) 00111000; ) 10000000.

1.6. ) 51; ) 5D.


1.7. ) 238; ) 8000.
1.8. ) 13; ) 59; ) FFF.
1.9. ) , ; ) .
1.l0. a) AX, BX, CX, DX, Dl, SI; ) AX DX; ) .
1.11.a) ROM (
-.
) RAM ( ) ,
.
2.1. ) 82946.
2.2. CS:101 54.
2.3. a)

MOV
AX, 3004
ADD
AX,3000
RET
) R IP IP 0.

2.4. 0612.
2.6. N (, ),
CX W
.
3.1. TITLE PAGE.
3.2. ), ) ) ; ) , ;
) AX.
3.4. a) END; ) ENDS.
3.6. RET ,
; END , ,
.
3.7. ASSUME

CS:CDSEG,DS:DATSEG,SS:STKSEG.

3.8. PUSH
SUB
PUSH

DS
AX, AX
AX

4.1. ) MASM : :TEMPY :, : :


4.2. a) DEBUG B:TEMPY.EXE; ) B:TEMPY
4.3. )
)
)
)

;
;
;
.

4.4. MOV
MOV

AX,DATSEG
DS,AX

4.5. MOV

AL,30H

SHL
MOV
MUL

AL,1
BL,18H
BL

4.6. :
FLDA
OB
28H
FLDB
DB
14H
FLDC
DW
?
5.1. ) 2; ) 10; ) 8.
5.2.

CONAME

DB

'RGB Electronics'

5.3. a)
)
)

FLDA
FLDC
FLDE

DD
DW
DW

73H
?
16, 19, 20, 27, 30

5.4. a) ASCII 3236; ) 1AH.


5.5. ) 26; ) 732500.
5.6. a)
)
)

MOV
ADD
SHL

AX,320
BX,40H
FLDB,1 ( SAL)

6.1. 64 .
6.3. COM-
- .
6.4.

EXE2BIN SAMPLE,SAMPLE.COM.

7.1. +127 -128. 00


7FH ( 0 + 127) 80 0FFH ( -128 -1).
7.2. ) 62; ) 5 ( 6 ).
7.3. :
MOV
MOV
MOV
MOV

AX,00
BX,01
CX,12
DX,00

ADD
MOV
MOV
LOOP

AX,BX
BX,DX
DX,AX
B20

20:

7.4. ) CMP DX,CX


JA

) JCXZ
CMP CX,0
JZ

; AX

) CMP BX,AX
JLE JNG

7.5. a) OF (1); ) ZF (1); ) DF (1)


7.7. () PROC FAR,
. NEAR
,
(.. ).

7.9. ( CALL).
7.10.) 1001 1010; ) 1111 1011; ) 0001 1100.
7.12.) 01011100 11011100; ) 11001101 11001000.
8.1. = 18, = 27.
8.3.

MOV
MOV
MOV
MOV
INT

AX,0600H
BH,07
CX,OCOOH
DX,164FH
10

;3
;
;
;

8.4. ) DOS:
MSSGE

DB
MOV
MOV
INT

'What Is the date (mm/dd/yy)?',07H,'$'


AH,09
;
DX,MSSGE
;
21H

8.5. ) DOS:
DATEPAR
MAXLEN
ACTLEN
DATEFLD

LABEL BYTE
DB 9
DB ?
DB 9 DUP(' ')
DB '$'
MOV AH,0AH
LEA DX,DATEPAR
INT 21H

;
;

9.1. a) 1000 0001; ) 0111 1000.


9.2. a)
)

MOV
MOV
INT
MOV
MOV
MOV
MOV
INT

,00
AL,02
10
A,060A
BH,07
CX,0000
DX,184FH
10

;
; 8025 BW
;3 10
;
;

9.3. ) 48; ) 47.


9.5. INT 10 .
10.1. 16 .
10.2. ) 1011 0101; ) 1000 1100.
10.3. : 16 .
: 4 .
: 2 "" (BW - ).
10.4.

MOV
MOV
MOV
MOV

AH,09
AL,04
BH,00
BL,01011010

;
;
; #0
;-

MOV CX,05
INT 10

; 5

10.6. , ,
INT 10 (AH=0BH),
.
10.7. .
MOV
MOV
MOV
INT
11.1. )

AH,0DH
CX,13
DX,12
10

JCXZ
label1: MOV
MOV
INC
INC
INC
INC
LOOP
label2: ...

;
;
;

lbl2
AX,[SI]
[DI],AX
DI
DI
SI
SI
label1

11.2. DF .
MOVSB NAME1 + 9 NAME2 + 9.
MOVSW NAME1 + 8
NAME2 + 8. H10SCAS
MOV AX,'mb'
SCASW .
11.3. a)

CLD
LEA
LEA
MOV
REP

SI,CONAME
DI,PRLINE
CX,20
MOVSB

;
;
;
; 20

CLD
;
LEA
SI,CONAME+2 ; 3-
LODSW
;

CLD
MOV
LEA
LEA
REPE

CX,20
SI,CONAME
DI,PRLINE
CMPSB

;
;20
;
;
;

11.4. :
H10SCAS PROC
CLD
MOV
LEA
MOV
20:
REPNE

NEAR
CX,10
DI,NAME1
AL,'e'
SCASB

;
;10
;
;
;

JNE
CMP
JNE
MOV
30:
RET
H10SCAS ENDP

H3Q
; ?
BYTE PTR[DI],'r' ; -
20
; r?
AH, 03

11.5. PATTERN DB
0,04,05,04
DISPLAY DB
80 DUP(' '),'$'
CLD
;
LEA
SI,PATTERN ;
LEA
DI,DISPLAY ;
MOV
CX,20
;20
REP MOVSW
;
INT 21
DISPLAY.
12.1.a)

MOV
ADD
MOV

AX,DATAY
AX,DATAX
DATAY,AX

) . .12.2 ( ).
12.2. STC CF. 0148 0237 1
12.3.a)

MOV AX,DATAX
MUL DATAY

) . .12.4 .
12.5. a)

MOV AX,DATAX
MOV BL,25
DIV BL

13.1. ) ADD 6, AAA - 0102.


) SUB 02, AAS .
13.2.

LEA SI,UNPAK
MOV CX,04

;
;

OR [SI],
INC SI
LOOP B20

; ASCII
;
; 4

20:

13.3. ..13.2, - CX = 03.


13.4. ..13.3, - CX = 03.
13.5. ) ASCII- :

81
2
3
6
4

=
10 =
100 =
1000 =
10000 =

8
20
300
6000
40000

8
14
12
1770
940
---B4F8

14.1.

WKDAYS

DB
DB
DB

14.2.

DAYNO
DAYNAM
NINE

DB
?
DB
9 DUP(?)
DB
9
LEA
SI,WKDAYS
SUB
,
MOV
AL,DAYNO
DEC
AL
MUL
NINE
ADD
SI,AX
MOV
CX,09
LEA
DI,DAYNAM
REP MOVSB

14.3. a) ITEMNO
) ITPRICE

'Sunday...'
'Monday... '
'Tuesday..'

DB
DW

;
;
;
;-1
;
;
;
;
; 9

'06','10','14','21','24'
9395,8225,9067,8580,1385

14.4. :

1OREAD
C10SRCH
D10MOVE
E10CONV
F10CALC
G10CONV
K10DISP

.
.
.
ASCII .
( ).
. . . ( ASCII).
.

14.5.

SORTAB

DB
LEA
LEA
MOV
CLD
REP MOVSB

5 DUP(9 DUP(?))
SI,ITDESC
;
01,SORTAB
;
CX,45
;
;
;

.
. .14.6.
15.1. 512.
15.3. 5.
15.5. FAT F8.
15.6. ) 28...31 ;
) 4 40.
16.1. INT 21 : ) 16; ) 15; ) 14.
16.2. ) 4; ) 108 (9 3 4 );
) , .. 27.
16.3. .16.1 .13.6
ASCII- .
16.4. .16.2 .13.6

ASCII-.
16.5.) 0, 44; ) 1, 21.
16.6. 2652 05,
500000.
16.7. INT 21: ) 22; ) 28.
16.8. FCBFLSZ (
), FCBRCSZ .
FCBFLSZ ( DX:AX) FCBRCSZ
( ).
16.9. . .16.4 .
16.10. .13 , ASCII-
.
16.11. .16.3
.13.6 ASCII-
.
17.1. 01 06.
17.3.)

MOV
MOV
LEA
INT
JC
MOV

AH,3CH
CX,00
DX,PATH1
21H
error
CUSTHAN,AX

;-
;
;ASCIIZ-
; DOS
;
;.

17.4.)

MOV
MOV
LEA
INT
JC
MOV

AH,
AL,OO
DX,PATH1
21H
error
CUSTHAN.AX

;-
;
;ASCIIZ-
; OOS
;
;.

17.5. .
18.1. INT 13H AH = 00.
18.2. INT 13H AH = 01.
18.4.

MOV
MOV
LEA
MOV
MOV
MOV
MOV
INT

,03
AL,03
BX,OUTDSK
CH,08
CL,01
,00
DL,01
13H

;
;3
;0
; 08
; 01
; 0
;

18.5. 00000011.
19.2. )
)

MOV
MOV
INT
LEA
MOV

AH,05
DL,0CH
21H
SI,NAMEFLD
CX,length

;
;
;.
;

20:
MOV
MOV
INT
INC
LOOP

AH,05
DL,[SI]
21H
SI
20

;
;
; DOS
;
; length

) (0) .
),
) (0).
19.3.

HEADNG

DB

13, 10, 15, 'Title', 12

19.5. CX ,
.
BX :
MOV BX,05
20:
DEC BX
JNZ 20
20.1. a) .SAIL.
20.2. a)

MULTBY MACRO MULTPR,MULTCD


MOV
AL,MULTCD
MUL
MULTPR
ENDM

20.3.
:

IF1
INCLUDE library-name
ENDIF
20.4. :
BIPRINT MACRO PRTLINE,PRLEN
PRTLINE PRLEN
, .
BIOS INT 17H . .19.
20.5. IF .
IF ,

. , , :
CMP
JNZ
CALL

DIVISOR,00
; ?
()
; -
( )

21.1. a) EXTRN SUBPRO:FAR


21.2. a) PUBLIC QTY,VALUE.PRICE
21.3. .21.5.
21.4. .21.5.

,
.
(PRICE) [BP+10].
PRICE .
RET.
21.5. c : 8 (-
), 13 (

ASCII

), 12 ( ) 21 ( ).
.

__________________________________________________________________________
p p .. : 02/04/99

You might also like