Professional Documents
Culture Documents
P. Abel - Assembler
P. Abel - Assembler
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
________________________________________________________________
,
, .. , 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--------
--------
|
-
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.
) 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. ,
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 - ,
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
,
.
________________________________________________________________
.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),
:
B:EXASM1
B:
CON
[Return]
EXASM1.OBJ
EXASM1.EXE
EXASM1.MAP
- , OBJ
.
- (), (
A:EXASM1.EXE). B: ,
. ( )
.
, LINK y -
. 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
.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 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
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 ,
+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
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<
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.
:
:
:
.5.3
.
, .
,
.
__________________________________________________________________________
0000
0000 ??
0001 ????
0003
0000
0000
TITLE
;
;
DATASG
FLD1
FLD2
DATASG
page
60,132
EXIMM (EXE) .
( ,
)
SEGMENT PARA 'Data'
DB
?
DW
?
ENDS
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
FIELDA
DB
10 DUP (?)
, EQU,
, :
COUNTR
EQU 05
...
MOV CX,COUNTR
; 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 () ,
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,
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
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
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.
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.
__________________________________________________________________________
-------------------------
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 [ ???? ]
0040
STACKG ENDS
0000
0000
:
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
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
DB
...
MOV
MOV
MOV
LEA
INT
20 DUP(' ')
AH,40H
BX,01
CX,20
DX,DISAREA
21H
;
;
;
;
; DOS
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
;
;
;
;
;
; DOS
,
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
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)
;
; 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
, .
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.
LABEL2:
JCXZ
MOV
MOV
INC/DEC
UNC/DEC
LOOP
...
LABEL2
AL,[SI]
[DI],AL
DI
SI
LABEL1
;
;
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
:
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
|
: ||
| 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:
:
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
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
;
;
;
;
. 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
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
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
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
14
__________________________________________________________________________
: ,
.
________________________________________________________________
, , , , .
- XLAT. ,
- ,
.
.
.
.
________________________________________________________________
, .. (
),
.
, -
, 64- :
STACK
DW
64 DUP(?)
:
MONTAB
COSTAB
DB
DB
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....'
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
;
;
;
;
; (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
. ,
. ,
,
. ,
, ,
.
,
, .
,
,
. ,
,
. -
, .
. ,
.
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
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
FCB, .
,
( ), , DOS
,
, DOS .
0 "" .
AL:
00
FF
;
; 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
) .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)
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).
:
________________________________________________________________
__________________________________________________________________________
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
.
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)
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
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
;
;
;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
.
.
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
;
;
; DOS
;
,
. :
.
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
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. .
________________________________________________________________
:
: 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
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
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
DOS21
0AH,IPFIELD
. ,
.
EXITM:
IFxx
.
.
.
EXITM
.
.
ENDIF
[]
( )
EXITM,
ENDM.
EXITM
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
+
+
+
+
+
+
+
+
+
+
+
+
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
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
0016H
0003H
0004H
0080H
CODESG
CODESG
DATASG
STACKSG
Class
CODE <--: 2
CODE <--
DATA
STACK
.
.
,
. , 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
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
Class
CODE <-- : 1
DATA
STACK
SEGMENT
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 [????]
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
Symbols:
N a m e
Type
Value Attr
PRICE. . . . . . . . . . . . . V WORD 0000
External
Class
CODE
DATA
STACK
.
- 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
;
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. . . . . . . . . . . . . .
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
Class
CODE
DATA
STACK
.
. 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.
. ,
.
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
;
:
; ""
; ""
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-.
,
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
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
; ?
.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
.
.
EXDOS
CSEG
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)
_:
[, ... ]
, (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
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,
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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:
:
, 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
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
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
__________________________________________________________________________
, :
:
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
(w=1)
A (000). ,
w .
________________________________________________________________
, ,
:
1) mod - , 11
00, 01 10 ;
2) reg - ;
3) r/m - (r , m - ).
, "",
1 2.
BX:
ADD
BX,AX
/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
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
MUL , AL .
(w = 0), mod
, /m = 011 BL. reg = 100
.
________________________________________________________________
MOV :
MOV
A AL ,
: . w = 1
, , 16- A.
AL w = 0. 2 3
. ,
AL, () .
________________________________________________________________
AL .
, AL
A :
MUL
mem_byte
;
();
() . ;
(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.
, 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--|
), 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.
__________________________________________________________________________
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.
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.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
MOV
ADD
SHL
AX,320
BX,40H
FLDB,1 ( SAL)
6.1. 64 .
6.3. COM-
- .
6.4.
EXE2BIN SAMPLE,SAMPLE.COM.
AX,00
BX,01
CX,12
DX,00
ADD
MOV
MOV
LOOP
AX,BX
BX,DX
DX,AX
B20
20:
) JCXZ
CMP CX,0
JZ
; AX
) CMP BX,AX
JLE JNG
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
8.5. ) DOS:
DATEPAR
MAXLEN
ACTLEN
DATEFLD
LABEL BYTE
DB 9
DB ?
DB 9 DUP(' ')
DB '$'
MOV AH,0AH
LEA DX,DATEPAR
INT 21H
;
;
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
;
;
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
LEA SI,UNPAK
MOV CX,04
;
;
OR [SI],
INC SI
LOOP B20
; ASCII
;
; 4
20:
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
19.5. CX ,
.
BX :
MOV BX,05
20:
DEC BX
JNZ 20
20.1. a) .SAIL.
20.2. a)
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
; ?
()
; -
( )
,
.
(PRICE) [BP+10].
PRICE .
RET.
21.5. c : 8 (-
), 13 (
ASCII
), 12 ( ) 21 ( ).
.
__________________________________________________________________________
p p .. : 02/04/99