Академический Документы
Профессиональный Документы
Культура Документы
-
2011
681.3.068+800.92
32.973.26-018.1
17
. .
17
. . 2- ., . .
.: -, 2011. 336 .: . + CD-ROM
ISBN 978-5-9775-0591-8
. Intel, 16- 32- ,
, ,
, . , , ( Norton Commander FAR Manager) .
, , . . - , , .
681.3.068+800.92
32.973.26-018.1
:
.
.
ISBN 978-5-9775-0591-8
. ., 2011
, "-", 2011
................................................................................................................................... 1
.......................................................................................................................... 2
...................................................................................................... 3
I. : ............................................................................. 7
1. ........................................................................................................ 9
1.1. ................................................................................ 9
1.2. ........................................................................................................ 12
1.3. ......................................................................................................... 13
1.4. .................................................................................................................................... 16
2. .................................................................................................. 17
2.1. 808680186 ...................................................... 17
2.1.1. ............................................................................................................. 17
2.1.2. -......................................................................................................... 18
2.1.3. ..................................................................................................... 18
2.2. .......................................................................................... 19
2.2.1. add ................................................................................................................... 19
2.2.2. sub ................................................................................................................... 19
2.2.3. inc .................................................................................................................... 20
2.2.4. dec ................................................................................................................... 21
2.3. ....................................................................................................... 21
3. .............................................................. 23
3.1. . ............................................................................ 23
3.1.1. ................................................................ 25
3.1.2. ................................................................ 25
3.1.3. .............................................. 26
3.2. ............................................................................. 26
3.2.1. ......................................................................... 28
3.3. ...................................................................................................... 32
3.3.1. ASCII? ............................................................................................................. 32
3.4. ....................................................................................................... 33
3.5. ...................................................................................................................... 34
II. ....................................................................................... 37
4. ......................................................................................................... 39
4.1. ..................................................................................... 39
4.1.2. .................................................................................................... 39
4.2. .................................................................................................................... 42
4.2.1. ....................................................................... 43
4.3. ..................................................................................... 44
4.3.1. .......................................................................... 45
IV
4.4. ....................................................................................................... 45
4.4.1. .......................................................................................... 46
5. ............................................................................................................ 47
5.1. ............................................................................................................... 47
5.2. ....................................................................................................................... 48
5.3. ....................................................................................................... 51
5.4. AFD....................................................................................... 53
6. ......................................................................................................... 54
6.1. ......................................................................................................................................... 54
6.2. ....................................................................................................... 61
6.2.1. nop ................................................................................................................... 61
6.2.2. ........................................................................................................... 62
7. ................................................................................................ 64
7.1. 6 ............................................................................................... 64
7.2. ............................................................................................................... 66
7.3. .................................................................... 69
7.4. ASCII ..................................................................................................... 69
7.5. ....................................................................................................... 71
8. ..................................................................................... 74
8.1. .............................................................................................. 74
8.2. .................................................................................................... 76
8.3. ....................................................................................................... 82
9. ........................................................................................................ 84
9.1. .............................................................................................. 84
9.2. ....................................................................................................... 87
III. , , ........................................... 91
10. . .......................................... 93
10.1. ............................................................................................ 93
10.2. ..................................................................................................................................... 97
10.2.1. .......................................................................... 98
? .................................................................................................... 98
? ................................................................................. 98
? .................................................................................................................. 98
? .......................................................................................... 98
? ....................................................................................................... 98
? ....................................................................................................... 98
10.3. ................................................................................................................................ 99
10.3.1. ........................................................................................... 99
10.4. ...................................................................................... 101
10.4.1. ................................................................ 104
10.5. ........................................................................................... 104
10.5.1. ? ........................................................................... 106
11. ................................................................................ 109
11.1. ............................................................................................................................. 109
11.2. ................................................................................................... 112
VI
VII
VIII
, . , , ,
. , , , . , : , ,
.
"? ! ". ,
18 000 ,
. , (
). MS-DOS Windows.
, . , , .
.
, , ,
.
,
, , , .
, ,
, , , .
:
I , ( ), II Windows; III
/ ;
,
;
, ;
;
, 10,
:
;
;
( Norton Commander, FAR Manager . .) XMS-;
(, ).
, ,
. -, , , . , .
- ,
http://www.Kalashnikoff.ru (
).
.
.
(-), .
.
,
, , , , , -.
, !
, . II III.
! ,
, ( , , , .).
, , , , http://RFpro.ru.
,
.
1. ( MS-DOS)
( Windows)?
-, . .
, .
-, WinAPI, ,
MS-DOS. WinAPI
, Windows. , WinAPI.
-, , COM-, MS-DOS Windows, .
2. ?
Microsoft
, . , , MS-DOS 3.30, , , , ,
, .
Windows 95/98/2000/XP/Vista ,
, MS-DOS, DOS-, "" , , ,
, , , DOS4GW.
, (Windows Explorer), . , Norton
Commander, Far Manager,
, .
Microsoft (Windows)
MS-DOS: | | cmd | <Enter>.
,
, COM- MS-DOS.
Microsoft IBM- :
Windows 2000 Pro Server;
Windows XP Home Edition Pro;
Windows Vista/Server 2008/7.
!
,
Windows.
. ? : !
3. ,
, ?
, , , , Akelpad,
- (, Far Manager). ,
, . . . Far Manager
(<F4>). , ,
, , .
,
. MASM.EXE (ML.EXE)
Microsoft, TASM.EXE Borland, FASM .
Windows MASM32.
http://Kalashnikoff.ru. , ,
. MASM 6.11
Macro Assembler Microsoft 6.11 I
MASM32 II, . , 2 http://RFpro.ru.
(AFD, SoftIce, CodeView).
.
AFD CodeView SoftIce
.
, , ,
. IDA,
.
,
: http://www.Kalashnikoff.ru.
4. ?
.
, .
().
().
1. , ,
, . , , , , -
, . ,
Basic, Pascal, C - ,
. , .
, MS-DOS, . .
( | | cmd). Far Manager, Windows Commander, Total Commander . .
5. ?
.
Intel 8086, 80286, 80386, 80486.
16- 32- .
.
.
(XMS-).
.
CGA, EGA, VGA ().
.
BIOS () MS-DOS.
, .
.
.
MS-DOS Windows.
, . . .
6. , ?
, ,
http://RFpro.ru. ,
:
;
;
, .
http://RFpro.ru
!
1 , "Hello, world!".
!
I
:
1.1.
. . . , , , .
, , -
, 10 . :
1 10 = 10
10 10 = 100
100 10 = 1000
. .
0 9, . . (, ).
, ,
"". "" , . . . 0 9 , ,
: A, B, C, D, E, F. F, , 15 (. 1.1).
1.1.
26
1A
27
1B
28
1C
29
1D
30
1E
...
...
...
...
158
9E
I. :
10
1.1 ()
159
9F
10
160
A0
11
161
A1
12
162
A2
13
...
...
14
254
FE
15
255
FF
16
10
256
100
17
11
257
101
...
...
...
...
, -
, 16 ( 1.1).
1.1
1 16 = 10
10 16 = 100
100 16 = 1000
. .
1.1 ?
: 10, 12, 45, 64, 12, 8, 19?
, . , , h H ( .
hexadecimal ),
hex. , , . 0
9 , , 5
5h, . , 1
( 1.2 1.3).
1.2.
1 16 = 10h
10h x 16 = 100h
100h x 16 = 1000h
1.
11
1.3.
1h x 10h = 10h
10h x 10h = 100h
100h x 10h = 1000h
.
, , .
, .
10 ( 0 9) 6 (A, B, C, D,
E, F). -
, 16 . , . . .
,
. ,
,
. , 1.1.
1.1. ,
...
(01)
mov ah,9
(02)
mov al,8
...
(15)
mov dl,5Ah
...
, ,
! , :
(01) -, (15) -.
, -, , , -
. ,
.
. -
. :
mov ah,9
MOV AH,9
I. :
12
. , , , .
, .
1.2.
, (\001\prog01.asm) ( 1.2).
1.2.
(01) CSEG segment
(02) org 100h
(03)
(04) Begin:
(05)
(06)
mov ah,9
(07)
(08)
int 21h
(09)
(10)
int 20h
(11)
(12) Message db 'Hello, world!$'
(13) CSEG ends
(14) end Begin
: , !
- ( \001\prog01.asm, 001 , prog01.asm
DOS-).
, !
1.2, . .
, .
. , (01), (02) (13) .
(03), (05), (09) (11) .
. -
.
. (04) . , .
(14) end Begin (Begin ; end ). . Begin
1.
13
. , Start. ,
End Start (14).
(06)(08) "Hello, world!".
( ).
. , , :
A=5
B=8
C=A+B
A, B C ( ), . = 5 : " 5".
- mov ( . move ""). (06) : " ah 9" ( , ah 9). , . (07)
dx ( "Hello,
world!$"). , (08) MS-DOS,
. , .
1.3.
MS-DOS ( MS-DOS),
. ( 1.3).
,
. MASM/TASM . :
;
mov ah,9
, .
1.3. ()
A=5
; A 5
B=8
; B 8
Addition
; 13
A=10
; ,
14
I. :
B=25
Addition
; 35
;
...
Addition
C = A + B
; ,
() Addition,
, A B. .
, , ,
, , , .
,
.
(08) (. 1.2)
( ), .
, , , . .
. ( ,
) . (08) : "
" (int . interrupt ).
, 21 h. , , (33 ). ,
int 21h int 33. . ,
.
(10) , , 20h.
- . ( DOS).
20h , (, ). , Norton Commander DOS Navigator. -
exit .
(12) . (message ) . (, mess
string .). (07),
dx .
1.
15
, Mess2. ,
(09), :
...
(09)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
mov ah,9
mov dx,offset Mess2
int 21h
int 20h
Message db 'Hello, world!$'
Mess2 db ' !$'
CSEG ends
end Begin
, , .
Message Mess2 $.
. , 21h
, -
$. , , "" , .
. 1. , COM-, EXE!
COM-, (MASM/TASM) . COM- Macro Assembler 6.11 . 1.1.
2, .
(AFD, CodeView), ( !)
.
, .
. 1.1. Prog01.com
I. :
16
1.4.
.
, . , 34 ,
.
, , , ,
.
,
, .
, , ,
. , , .
, , ,
, 10 "", FOR,
NEXT, PRINT ., . , - . . ,
, . . , ,
. ,
, . . , " ".
* * *
2
.
2.1.
808680186
, ,
- . 808680186
14 . 1 : ah dx. . 2.1, 2.3
2.4 , ip , .
2.1.1.
( ). : ,
. . 2.1 32- ,
0 4 294 967 295 (0FFFFFFFFh). . 16-, 0
65 535 0h FFFFh , .
8- : ah, al, bh, bl, ch,
cl, dh, dl. 255 (FFh).
( ) 16- .
2.1.
EAX
EBX
ax
ah
bx
al
bh
cx
bl
ch
dx
cl
dh
dl
mov, . , , al 35h, :
mov al,35h
I. :
18
ax 346Ah, :
mov ax,346Ah
, ,
. , :
mov ah,123h
FFh
mov bx,12345h
FFFFh
mov dl,100h
FFh
,
(12h), (5h), : 0C5h.
, - , , . .
, mov ax,1234h.
ah 12h, al 34h. ah, al, bh, bl, ch, cl, dh
dl (Low) (High) 16-
(. 2.2).
2.2.
mov
mov
mov
mov
ax
bx
cx
dx
ax,1234h
bx,5678h
cx,9ABCh
dx,0DEF0h
=
=
=
=
1234h, ah = 12h, al =
5678h, bh = 56h, bl =
9ABCh, ch = 9Ah, cl =
0DEF0h, dh = 0DEh, dl
34h
78h
0BCh
= 0F0h
2.1.2. -
si ( ) di ( ) . bp sp (. 2.3).
.
2.3. -
si
Di
bp
sp
2.1.3.
(. 2.4)
(, ). , .
2.4.
CS
DS
ES
SS
2.
19
2.2.
: add, sub, inc, dec.
2.2.1. add
add . 2.5. .
.
, () ,
. , , .
2.5. add
add ,
Addition
8086
; al 10
add al,15
;al = 25; al , 15
mov ax,25000
; ax 25000
add ax,10000
mov cx,200
; cx 200
mov bx,760
; bx 760
add cx,bx
2.2.2. sub
sub (. 2.6, 2.2).
2.6. sub
sub ,
Subtraction
8086
I. :
20
2.2. sub
mov al,10
sub al,7
;al = 3; al , 7
mov ax,25000
sub ax,10000
mov cx,100
mov bx,15
sub cx,bx
, . ,
0
65 535.
. , 100 , , 100 . ,
:
...
mov ax,2700
mov bx,15000
add ax,bx
...
ax 17 700,
bx 15 000. add ax,bx
80486. , 486 DX2-66
0 0FFFFh 66 (!) !
2.2.3. inc
inc . 2.7.
2.7. inc
inc
Increment
8086
inc (
). :
add , 1
( 80486)
( 2.3).
2.
21
2.3. inc
mov al,15
inc al
; al = 16 ( add al,1)
mov dh,39h
inc dh
mov cl,4Fh
inc cl
2.2.4. dec
dec . 2.8.
2.8. dec
dec
Decrement
8086
dec ( 2.4).
:
sub , 1
2.4. dec
mov al,15
dec al
; al = 14
mov dh,3Ah
dec dh
;dh = 39h
mov cl,50h
dec cl
;cl = 4Fh
2.3.
, , .
DOS.
BIOS () 16h,
, 20h,
21h . IO.SYS/MSDOS.SYS
MS-DOS.
, 10h 16h. :
mov ah,10h
; ah
int 16h
; 16h BIOS ()
I. :
22
,
ax , .
(\002\prog02.asm)
, PAUSE BAT- ( 2.5).
2.5.
(01) CSEG segment
(02) org 100h
(03) Start:
(04)
(05)
mov ah,9
(06)
(07)
int 21h
(08)
(09)
mov ah,10h
(10)
int 16h
(11)
(12)
int 20h
(13)
(14) String db ' ...$'
(15) CSEG ends
(16) end Start
.
* * *
3 ,
. .
. ,
. , . ,
. ,
. - !
. , , . 4,
.
,
. : CodeView (CV.EXE)
AFD Pro (AFD.EXE). ,
prog03.asm. , prog03.com. , CodeView/AFD,
MS-DOS :
CV.EXE prog03.com
:
AFD.EXE prog03.com
, !
3.1. .
, . , , , ""?
( ).
, , (
). .
, :
0000 ( ),
0001,
0010 (. . ,
1).
I. :
24
0011
0100
0101
0110
0111
1000
1001
. .
"" "" . , , 0 1, . . ("0" "1" ).
, , ,
, : 0001 ;
0010 ; 0100 ; 1000 . .
. 0 9,
( ; : 1010, 1011, ..., 1111).
. (, , , .) . "" 256 ( 0 255)
. , (09),
(az, AZ), (, ) . (. 3).
(255) 8 .
8 . ,
1 (. 3.1).
3.1. "Z"
0
.
, , "", <Enter>. , 1 .
,
. ""
4Dh , , 1001101 . , "" 4 4 8 = 32 .
, ()
, "" "".
3.
25
" , (, , ), "-"?" .
, , ( ) (),
. , , , .
b.
, -
, . : 10
, 10h , 10b . ,
, . :
...
mov ax,20
mov bh,10100b
mov cl,14h
...
ax, bh cl , , .
( bh).
, . ( ) : 10101110 10010010 01111010
11100101 (, ; ). . , . . .
, . , . . , "".
, - , ! .
3.1.1.
, ,
.
, 20. :
10100b.
, , 4 0.
:
10100b = 24 + 0 + 22 + 0 + 0 = 16 + 8 = 20
10100b = 1 16 + 0 8 + 1 4 + 0 2 + 0 1 = 16 + 0 + 4 + 0 + 0 = 20.
3.1.2.
, :
20/2 = 10, 0;
10/2 = 5, 0;
I. :
26
5/2 = 2, 1;
2/2 = 1, 0;
1/2 = 0, 1.
: 10100b = 20.
3.1.3.
, 16:
8Ah = 8 16 + 10 (0Ah) = 138.
, . , Windows. DOS
Navigator. ,
, , , .
!
3.2.
: " ".
, "" "" , ... . , .
, 3.1 ( "_" ).
3.1
0000:
0010:
0020:
0030:
3.
27
mov ax,0020
(2)
mov es,ax
(3)
mov di,2
...
;!
mov ss,34h
;!
,
. COM
( ,
, ).
. , , COM ,
5674h,
:
cs = 5674h
ds = 5674h
ss = 5674h
es = 5674h
: cs = ds = ss = es = 5674h.
COM 100h. ,
, org 100h,
I. :
28
100h
, ( ,
). , , , . cs:ip
.
3.2.1.
, , ( 3.1).
3.1.
(01) CSEG segment
(02) org 100h
(03) _start:
(04)
mov ah,9
(05)
(06)
int 21h
(07)
int 20h
, (01) (09) :
( ) segment ( , ,
);
CSEG ends (END Segment ) .
(02) , ,
100h. COM.
3.1 AFD Pro. ,
1DF1h (. 3.1). (04)
:
CSEG
CSEG
cs ip!
. AFD
<F1>, CodeView <F8>, , ;
- <F8>+<Step> <F7>+<Trace>. , (. 3.2):
ax = 0900h (, ah = 09h, al = 0, . . mov ah,9
9 ah, al. al , , 15h,
ax 0915h);
ip = 102h (. . ). , mov ah,9 2 : 102h 100h = 2.
3.
29
( <F8>/<F1>) dx
ip. dx "Test message$"
, . . 109h, ip 105h ( ). , mov dx,offset String 3 (105h 102h = 3) (. 3.3).
, :
mov dx,offset String
:
mov dx,109
;109 , CodeView
; 'h' . .
I. :
30
.
. ,
(07), 3.1:
...
(07)
int 20h
(08)
int 20h
int 20h (, ,
(07)). .
. CodeView, , . . , ,
. , , 0A09h. ,
dx. , dx 109h, . , .
,
CodeView.
Memory () CodeView ( AFD ) (. 3.2 . 3.4).
3.
31
3.2. CodeView
1
0A09
0000
CD 20 FF 9F 00 9A F0 FE
= .
:
1 (0A09) , (
);
2 (0000) ( (:));
3 (CD 20 FF ... F0 FE) ,
, 0A09:0000;
4 (= .) ASCII ( ), .
. 3.4. , ,
3.1 CodeView
2 () ,
dx (5). 4 Test
message$, 3 Test message$
... dx (. 3.5)! ,
() !
, dx CSEG ( (01) (09) 3.1). : int 21h. DOS 9 (mov ah,9) dx (mov dx,offset String).
, ah . ( -
I. :
32
), ,
.
3.3.
09h 21h ,
dx. . 3.3.
.
,
, .
3.1.
3.3. 09h 21h
ah = 09h
dx = ASCII- , $
3.3.1. ASCII?
, , ASCII-, ASCII. ASCII- 0 255 DOS, , , . (
ASCII- . 3).
3.
33
.
- , . , . , .
3.4.
(\003\prog03.asm) ,
( 3.2).
3.2.
(01) CSEG segment
(02) org 100h
(03) _beg:
(04)
mov ax,0B800h
(05)
mov es,ax
(06)
mov di,0
(07)
(08)
mov ah,31
(09)
mov al,1
(10)
mov es:[di],ax
(11)
(12)
mov ah,10h
(13)
int 16h
(14)
(15)
int 20h
(16)
(17) CSEG ends
(18) end _beg
. .
(. 3.6),
.
, . . . (04)
(05) es 0B800h,
( !). (06)
di . 0B800h. (08)
(09) ah (31 -
) al ASCII- (01 "").
(10) 0B800:0000h ( ) ASCII- (31 01 -
I. :
34
). mov (10). [ ] , ,
, ( , , 0B800:0000h).
. 3.6. Prog03.com
.
(04) (05). es, , , ds . .
.
.
. (10) 35 .
, Pentium 100 20 (!) !
3.5.
! I .
, . :
;
;
Intel 8086/8088/80186;
;
:
org ;
mov
();
add
sub
inc
int
3.
35
09h 21h ( );
10h 16h ( ).
, ,
. 75% ,
, , , . , , , . ,
I. - , , ,
. !
,
II " ".
!
II
4.1.
3.1. - :
(01)
...
(02)
mov ah,9
(03)
(04)
int 21h
(05)
...
...
(03) dx .
: mov dx,offset My_string. , mov
. :
mov cx,125
(03) offset.
? : mov dx,My_string?
4.1.2.
"offset" .
(MASM/TASM) (03), offset My_string () . mov dx,My_string ( mov dx,word ptr My_string,
), dx (),
( ""). , dx 16- , . , ,
. : mov dl,My_string ( mov dl,byte ptr My_string). , dl
"", . . dl 8- .
mov dl,byte ptr My_string mov dx,word ptr
My_string. Byte , word ( ).
40
II.
. , 8-
(dl), byte. 16- (dx) word.
-, .
, . .
"!$" ds () dx ().
ds? ,
COM- ( ), , ,
( ds). ds
( ). COM ,
, . COM-
64 (65 536 ). , "" ,
, 64 .
. Norton Commander (
III).
36 . ,
Norton Commander ( Norton Commander
).
Volcov Commander .
Norton Commander, 64 000 (
Norton). Volcov Commander "" ,
. Volcov , Norton.
.
21h ds . , :
...
mov dx,offset My_string
mov ax,10h
mov ds,ax
mov ah,9
int 21h
...
My_string db 'Hello!$'
...
4.
41
Hello!, .
, . 21h ds 10. ,
, ds:dx
0010:010Ch, .
. 4.1.
,
, , ( ),
ds:
...
mov ax,cs
mov ds,ax
...
. 4.1 .
4.1. 09h 21h
AH = 09h
DS:DX = ASCII- , $
, .
II.
42
4.2.
? ,
. , , 09h 21h
( 4.1).
4.1.
...
mov ah,9
mov dx,offset Str
int 21h
mov ah,9
mov dx,offset Str
int 21h
mov ah,9
mov dx,offset Str
int 21h
...
3 Str.
, . ...
loop (. 4.2).
4.2. loop
loop
loop
8086
cx (). 4.2 ,
( 4.1).
4.2.
...
(01)
mov cx,3
(02) Label_1:
(03)
mov ah,9
(04)
mov dx,offset Str
(05)
int 21h
(06)
loop Label_1
...
4.
43
(01) cx ,
3 0. (02) ( . Label
). ( (03)(05)) .
(06) loop cx ,
, Label_1 (02).
. (07),
cx .
4.1. (02)(06)
.
4.2.1.
, , ,
, . . (03)
(05), loop. , . .
09 21h . 4.3 4.2.
4.3.
...
(01)
mov ah,9
(02)
(03)
mov cx,3
(04) Label_1:
(05)
int 21h
(06)
loop Label_1
...
, . , ,
.
, .
. 4.2 , 4.3.
, , Label_1, . 4.1,
, , loop, int 21h. , . , .
,
. , 10h 16h, ax , , 4.3.
II.
44
. 4.2.
4.3.
, . loop,
, cx . cx , , . . .
,
, - .
.
. 4.3 , .
4.3. jmp
jmp
Jump (
)
8086
jmp
( 4.4).
4.4.
...
(01)
mov ah,9
(02)
4.
(03)
int 21h
(04)
jmp Label_2
45
(05)
(06)
add cx,12
(07)
dec cx
(08) Label_2:
(09)
int 20h
...
(05)(07) . , jmp
(08), .
4.3.1.
dec , , loop. 4.5
, 4.2, - (
).
4.5.
...
(01)
mov cx,3
(02) Label_1:
(03)
mov ah,9
(04)
(05)
int 21h
(06)
dec cx
(07)
jnz Label_1
...
(07). .
, ,
(, ).
, . ,
, .
.
4.4.
3,
"" ( 4.6, \004\prog04.asm).
II.
46
4.6.
(01)
(02)
(03)
(04)
(05)
(06)
(07)
(08)
(09)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
CSEG segment
org 100h
Begin:
mov ax,0B800h
mov es,ax
mov di,0
mov al,1
mov ah,31
mov cx,2000
Next_face:
mov es:[di],ax
add di,2
loop Next_face
mov ah,10h
int 16h
int 20h
CSEG ends
end Begin
, ,
. , .
4.4.1.
(01) (10) (15) (20) . . (11) , "" , (14) "". ,
(10)(14), . 2000 , cx 2000 ( (08)).
(12) 0B800:DI ,
ax ( + ). , .
di 2, .
2? , 2 :
. al,
ah, (12), di () 2. di .
cx 1 . , , (14).
.
, ,
. , . . , .
5.1.
, , TASM, . TASM :
Near jump or call to different CS
2
assume cs:CSEG, TASM .
?
, assume , cs CSEG. .
MASM . assume , MASM
.
TASM. , :
loop Label_1
jmp Label_2
call Procedure
"", , .
, COM-,
( CSEG). ,
, DSEG, (link.exe), COM-
( COM-!), . ,
:
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
II.
48
5.2.
.
I.
.
, , " ...", ,
: " !", ,
, .
? 09h 21h
10h 16h ( 5.1).
5.1.
...
(01)
mov ah,9
(02)
(03)
int 21h
(04)
mov ah,10h
(05)
int 16h
(06)
mov ah,9
(07)
(08)
int 21h
(09)
mov ah,10h
(10)
int 16h
(11)
int 20h
...
(12) Mess1 db ' ...$'
(13) Mess2 db ' !$'
...
, , .
, , . , .
5.
49
, , ,
call (. 5.1) ( 5.2).
5.1. call
call
Call
8086
5.2. call
...
(01)
(02)
(03)
(04)
(05)
(06)
(07)
...
int 20h
, . ( ) . .
II.
50
, ? , .
.
(01) dx Mess1. (02) , Out_string.
?
() ( (03)) Out_string
( (08)). dx , . .
Mess1 (. 5.1).
(09), (10) 09h 21h
. (11)
, (03) (ret . return ).
, (. 5.2)!
. 5.1.
. 5.2. 0114h
5.
51
, , : " ( , ) , , ?" , .
, . . .
, (stack).
. 6 , ,
ss:sp, .
, (
(03)) . ,
:
Out_string proc
...
Out_string endp
:
;
proc (procedure) ;
endp (end procedure) .
, . . ,
, ""!
.
Out_string
5.3.
4, (\005\prog05.asm).
5.3.
5.3.
(01) CSEG segment
(02) assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
(03) org 100h
(04) Start:
(05)
mov ax,0B800h
(06)
mov es,ax
(07)
mov al,1
(08)
mov ah,31
(09)
mov cx,254
(10) Next_screen:
(11)
mov di,0
II.
52
(12)
call Out_chars
(13)
inc al
(14)
loop Next_screen
(15)
mov ah,10h
(16)
int 16h
(17)
int 20h
mov dx,cx
(20)
mov cx,2000
(21) Next_face:
(22)
mov es:[di],ax
(23)
add di,2
(24)
loop Next_face
(25)
mov cx,dx
(26)
ret
5.
53
5.4. AFD
AFD, ,
:
32- ;
808680186 ,
8087;
PE NE (Windows).
:
;
, , .;
.
DOS , . AFD http://www.Kalashnikoff.ru, 64 .
, , , !
6.1.
(, stack)
() .
, . ,
"" :
0000
0001
0002
...
FFFE
FFFF
.
, , ,
jmp, call . . .
0FFFFh, () 0000h. - call, call . ,
, .
ss:sp. , , , - COM- sp 0FFFEh,
ss, , CSEG (, , cs, ds, es).
. . 6.1 .
6.1.
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
begin:
call Our_proc
6.
55
int 20h
Our_proc proc
ret
Our_proc endp
CSEG ends
end Begin
ss:sp. sp=0FFFEh, . .
(. 6.1).
. 6.1.
. CodeView <F8>,
AFD <F1>. sp ! 2.
int 20h. , call Our_proc,
. 103 (. 6.2).
<F8>/<F1>. sp . 2,
0FFFEh. ret "" 0103h .
call int 20h. , . 0FFFEh
0FFFEh (. 6.3).
. ,
.
II.
56
. 6.2.
. 6.3. .
, ,
(. 6.1 6.2).
6.1. push
push
Push
8086
6.2. pop
pop
Pop
8086
6.
57
, . ,
, . ( 6.2).
6.2.
...
(01)
mov ax,345h
(02)
push ax
(03)
mov ah,10h
(04)
int 16h
(05)
pop ax
...
, :
...
pop cx
pop bx
pop ax
...
,
, . :
...
mov ax,1234h
mov bx,5678h
push ax
push bx
pop ax
pop bx
...
II.
58
. 6.4.
6.
59
. 6.5.
. 6.6.
( ) ss:sp ( : ). , ,
, ss sp
, .
cli sti (. 6.3 6.4).
6.3. cli
cli
Clear interrupt
8086
II.
60
6.4. sti
sti
Restore interrupt
8086
, ""
! . cli sti.
.
? , . . . -
, .
. , 18,2 . - ! , , , .
, , , ? , . , , ,
,
(, , /
/). , , , , " " , - .
. , , :
...
(01)
mov ax,100h
(02)
mov ss,ax
(03)
mov sp,200h
...
, , (02). ss 100h, sp
200h. , ,
, , , , sp=0FFFEh. ,
ss=100h, sp=0FFFEh. .
. ss=100h, sp=200h! , . , 0100h:0FFFEh (
). ? , , "".
:
ss:sp, cli, , ,
6.
61
(Pentium) , . . .
, ,
"";
ss:sp .
, ;
, . ,
COM- , ss ,
, sp = 0FFFEh. 100h (org 100h).
. , ,
2000h , sp 2200h. 100h
( ) (. .
100h (org 100h), 2000h 100h). , , . (, 100h
), . !
6.4 .
sti.
6.4.
...
cli
mov ax,0B900h
mov ss,ax
mov sp,100h
sti
...
, , : " ss:sp?"
,
, ,
( , ),
, .
6.2.
6.2.1. nop
, (. 6.5).
6.5. nop
Nop
No operand
8086
II.
62
,
, 1 . , "" , . , , , , ,
. ""
, .
Hacker's View, : http://www.Kalashnikoff.ru.
: 90h.
,
(Volcov Commander, Hacker's View), ,
, :
90h
90h
0CDh
20h
6.2.2.
( 6.5). (\006\prog06.asm).
6.5.
(01) CSEG segment
(02) assume cs:CSEG, es:CSEG, ds:CSEG, ss:CSEG
(03) org 100h
(04) Begin:
(05)
(06)
mov ax,9090h
(07)
push ax
(08)
int 20h
(09) Lab_1:
(10)
mov ah,9
(11)
(12)
int 21h
(13)
int 20h
6.
63
. 6.7.
. 6.8.
7.1. 6
. , 7.1
.
7.1. 6
...
(01)
(02)
mov ax,9090h
(03)
push ax
(04)
int 20h
(05) Lab_1:
(06)
mov ah,9
(07)
(08)
int 21h
(09)
int 20h
...
- ?
6, nop 90h.
(02). ax 90h (
nop). sp Lab_1 (01).
, , , Lab_1. ,
! MASM/TASM, ,
(05), () ( 109h).
(01) , sp,
, . , 109h
mov ah,09, . . Lab_1 .
! (03) "" 90h, . . nop. ? , , "" .
7.
65
II.
66
, , , ,
. ,
, , . .
. , " ", , .
7.2.
10h 16h,
. , .
ax.
? cmp (. 7.1
7.2).
7.1. cmp
cmp ,
Compare
8086
7.2. cmp
...
(01)
mov ah,10h
(02)
int 16h
(03)
cmp al,'Y'
(04)
jz Yes_key
...
(05) Yes_key:
...
(02) , - . 10h ax
, . (03) ,
<Y>. :
cmp al,'Y'
ASCII- . .
MASM/TASM . , ,
cmp al,'Y'
cmp al,59h
7.
67
<Y>! , cmp
.
, , ,
, ( 7.3).
al,59h.
7.3.
...
mov al,'2'
mov dh,'d'
...
al 32h, dh 64h. !
(04) Yes_key (05), <Y>. jz ( . jump if zero , ) , .
. , ,
.
, ( 7.4 7.5).
7.4.
...
mov ax,15
cmp ax,15
jz Our_lab
mov ah,3
Our_lab:
...
II.
68
7.5 Our_lab, . .
cmp ax,16 . mov ah,3 ,
, , .
, , - . <> <>, . , . ,
! 7.6 .
7.6. <> <>
...
Next_key:
mov ah,10h
int 16h
cmp al,''
jz F_pressed
cmp al,''
jz F_pressed
jmp Next_key
F_pressed:
mov ah,9
mov dx,offset Mess
int 21h
int 20h
Mess db ' <> <>!!!$'
...
, jz je ( . jump if equal ,
) .
7.6 , 7.7.
7.7. je jz
...
int 16h
cmp al,''
je F_pressed
...
je - jz. ,
.
je jz !
7.
69
7.3.
jmp ( ) .
. , : goto.
goto 20 20
je jz . , - . , : cmp
al,''. :
if Key = "" then goto 20
, - -. , , .
( ), ,
, . , (, , ,
, .), . ,
. "".
?
7.4. ASCII
ASCII.
ASCII? , ,
10h 16h, ax.
- al:
cmp al,'Y'
, (.../A...Z), (0,..., 9)
, , , <F1><F12>. , , <F1>:
cmp al,'F1'
, 'F1' 2 ,
al 1 .
ASCII. ,
<F1>, al 0, ah .
. 7.2 ASCII-
.
II.
70
7.2. ASCII
ASCII
cmp al,0
jnz No_ext
(06)
(07)
cmp ah,57h
je Shift_f4
(08)
jmp No_ext
(09) Shift_f4:
...
, <F1>, <Alt>+<F1> . . al
0, ah . (04)(07) . (05) No_ext, ,
(: <A>, <>, <>, <Enter> . .).
"" . (06) ,
<Shift>+<F4>. <Shift>+<F4>, , , Shift_f4 (09) ( Shift_f4, , -). -
, , -
No_ext (08).
7.
71
, , <Shift>+<F4>.
. 7.3 , , . . 10h 16h al.
7.3.
<Enter>
0Dh (13)
<ESC>
1Bh (27)
<> (<Spacebar>)
20h (32)
<Tab>
09h (9)
. ASCII
3.
7.5.
(\007\prog07.asm), 8. ( 7.9).
7.9.
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Begin:
call Wait_key
cmp al,27
je Quit_prog
cmp al,0
je Begin
call Out_char
jmp Begin
Quit_prog:
mov al,32
II.
72
call Out_char
int 20h
; === ===
; --- Wait_key --Wait_key proc
mov ah,10h
int 16h
ret
Wait_key endp
; --- Out_char --Out_char proc
push cx
push ax
push es
push ax
mov ax,0B800h
mov es,ax
mov di,0
mov cx,2000
pop ax
mov ah,31
Next_sym:
mov es:[di],ax
inc di
inc di
loop Next_sym
pop es
pop ax
pop cx
ret
Out_char endp
CSEG ends
end Begin
, ! - ,
. (
7.
73
-) -
http://www.Kalashnikoff.ru. ,
http://RFpro.ru.
, ,
.
? ,
? , !
, ! ,
? .
:
, , ( 50
200 320 ++);
;
, .
:
;
() , ;
- .
, (, , .), . ,
, , , .
: . Windows.
, Windows. Win32 . DOS , Windows .
: , , , ,
, , , , ?
, .
, , , .
, , . .
.
, ,
. , ,
. .
, . ,
.
.
8.1.
, 7 . ,
, . - , . :
20h 32, <>;
100h 256, ;
1Bh 27, <Esc>;
21h 33, MS-DOS
. .
( 8.1).
8.1. 7
...
(01)
call Wait_key
; ...
(02)
cmp al,27
; <Esc>?
je Quit_prog
(04)
cmp al,0
; ? (<F1>-<F12> . .)
(05)
je Begin
; ...
;
(06)
call Out_char
(07)
jmp Begin
; ...
;, <Esc>
(08) Quit_prog:
(09)
mov al,32
; al <>
; al ( ).
; "" Out_char,
; . <>
8.
; .
(10)
call Out_char
(11)
int 20h
(12)
...
; DOS...
; ()
; , ...
(15)
push cx
(16)
push ax
(17)
push es
(18)
push ax
; ax, . . ...
(19)
mov ax,0B800h
; es
(20)
mov es,ax
(21)
mov di,0
;di
; 2000 (80 * 25 )
(22)
mov cx,2000
(23)
pop ax
; (. 18)...
(24)
mov ah,31
; , 2000 (
; 22)
(25) Next_sym:
; ( 31)
(26)
mov es:[di],ax
; 2 ( , )
(27)
inc di
(28)
inc di
(29)
loop Next_sym
;
(30)
pop es
(31)
pop ax
(32)
pop cx
(33)
ret
75
II.
76
(12) . , :
;
ASCII (<F1><F12>, ), ;
ASCII (<A><Z>, <0><9> . .) ;
<Esc> (27 1Bh),
(mov al,32) .
8.2.
MS-DOS
.
, .
3Dh 21h (. 8.1).
8.1. 3Dh 21h
ah = 3Dh
ax =
al = (00 , 01
, 02 , )
jc
ds:dx = ASCII-
, al , . . ,
:
;
;
.
, (al=02)
, - . / - , . ,
" " ("read-only")
(al=2) / (al=02), .
8.2 command.com /.
8.2. /
...
mov ax,3D02h
mov dx,offset File_name
8.
77
int 21h
...
File_name db 'command.com',0
...
, ax : 3Dh 02h.
, :
...
mov ah,3Dh
mov al,02h
...
File_name db 'command.com',0 ,
. , :
...
mov ax,3D02h
mov dx,offset File_name
File_name db 'command.com',0
int 21h
...
File_name db 'C:\ASSM\command.com',0
, .
, - .
. :
My_file db 'a:myfile.doc',0
II.
78
. 8.1.
myfile.doc,
A: .
, . :
...
mov ax,3D00h
mov dx,offset Just_file
int 21h
...
Just_file db 'file',0
...
, file (. ) . 3Dh ( ).
- , (
).
jc ( .
jump if carry , ) jnc ( . jump if not
carry , ):
...
int 21h
jc Error
Ok:
...
Error:
...
8.
79
:
...
int 21h
jnc Ok
Error:
...
Ok:
...
II.
80
jmp Quit_prog
...
File_name db 'c:\assm\masm\binr\ml.exe',0
Mess1 db ' !$'
Mess2 db ' !$'
...
. 8.2.
ax . , , , . .
3Dh , ax!
. 8.2.
(
-), 3Eh 21h (. 8.2).
8.2. 3Eh 21h
ah = 3Eh
bx =
, ,
. , . ,
.
8.
81
! , , , ,
(. . ,
-, ). ,
, Handle:
...
mov ah,3Eh
mov bx,Handle
int 21h
;
...
. . 8.4 ,
, ,
.
8.4.
...
mov ax,3D00h
mov dx,offset File_name
int 21h
jc Error
mov Handle,ax
; ...
mov ah,3Eh
mov bx, Handle
int 21h
;
Error:
int 20h
...
Handle dw 0
...
3Fh,
40h. bx Handle,
II.
82
, ds:dx
/. 40h . 8.3.
cx
8.3.
,
. , 1:
() .
, 8.5 ( 65 000 (0FDE8h) )
, , (\008\prog08.asm).
8.5.
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
;
Begin: mov ax,3D00h
mov dx,offset File_name
int 21h
jc Error_file
mov
mov
mov
mov
mov
int
Handle,ax
bx,ax
ah,3Fh
cx,0FDE8h
dx,offset Buffer
21h
mov ah,3Eh
mov bx,Handle
int 21h
mov dx,offset Mess_ok
Out_prog:
mov ah,9
int 21h
int 20h
Error_file:
mov dx,offset Mess_error
8.
83
jmp Out_prog
;=== ===
Handle dw 0
Mess_ok db ' ! !$'
Mess_error db ' '
; :
File_name db 'c:\msdos.sys',0,'!$'
Buffer equ $
CSEG ends
end Begin
.
, , , .
() , ds:dx.
9.1.
9.1 8 .
9.1. 8
...
; CSEG .
(01) Begin: mov ax,3D00h
; , ( ).
(02)
(03)
int 21h
(04)
jc Error_file
;ds:dx
; ( , ,
; ), Error_file
; Handle.
; , bx ,
; , ax.
; ( , ax) ,
; (). ax, .
; mov bx,Handle .
(05)
mov Handle,ax
(06)
mov bx,ax
; Handle
(07)
mov ah,3Fh
; 3Fh
(08)
mov cx,0FDE8h
; 0FDE8h = 65000
;ds:dx
(09)
(10)
int 21h
; . ...
(11)
mov ah,3Eh
9.
85
; bx. . . bx ,
; (Handle)
(12)
mov bx,Handle
(13)
int 21h
; dx , .
(14)
; 09h
(16)
int 21h
(17)
int 20h
; dx , ...
(18)Error_file: mov dx,offset Mess_error
;... Out_prog ( , ?)
(19)
jmp Out_prog
;=== ===
(20) Handle dw 0
(21) Mess_ok
; 2
db ' ! !$'
; (22)(23)
(22) Mess_error db ' () '
(23) File_name
db 'c:\msdos.sys',0,'!$'
$, (24).
, ( 9.2).
9.2. $
(01) CSEG segment
(02) assume cs:CSEG
(03) org 100h
(04) Begin:
(05)
My_lab equ $
(06)
(07)
II.
86
(08)
(09)
int 20h
. 9.1. $
, 09h
(. 9.2):
() c:\msdos.sys !
9.
87
. 9.2.
'0' c:\msdos.sys .
'0' (23)? ds:dx
.
'0'. , , , . c:\msdos.sys!$ !
, . :
Mess_error db ' () c:\msdos.sys!$'
File_name db 'c:\msdos.sys',0
,
.
9.2.
. 9.3 (\009\Prog09.asm).
9.3. ,
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
; -------------- ------------Begin:
mov dx,offset File_name
call Open_file
jc Error_file
II.
88
; -------------- ----------mov bx,ax
mov ah,3Fh
mov cx,offset Finish-100h
mov dx,offset Begin
int 21h
; ------------- ---------------call Close_file
; ------------ -------------mov ah,9
mov dx,offset Mess_ok
int 21h
ret
; ---------- ----------------Error_file:
mov ah,2
mov dl,7
int 21h
ret
;
; --- --Open_file proc
cmp Handle,0FFFFh
jne Quit_open
mov ax,3D00h
int 21h
mov Handle,ax
ret
Quit_open:
stc
ret
Handle dw 0FFFFh
Open_file endp
; --- --Close_file proc
mov ah,3Eh
9.
89
mov bx,Handle
int 21h
ret
Close_file endp
;
File_name db 'Prog09.com',0
Mess_ok db ' !', 0Ah, 0Dh, '$'
Finish equ $
CSEG ends
end Begin
!
Prog09.asm!
.
. ,
.
10.
III
,
,
10
.
10.1.
9 (
) .
Prog09.asm. , , . . , , .
( 10.1).
10.1. Prog09.asm 9
; ,
;
CSEG segment
assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
org 100h
Begin:
; (. ).
mov dx,offset File_name
call Open_file
; Prog09.com
jc Error_file
; Error_file
mov bx,ax
;
;
mov ah,3Fh
; ( ) cx...
mov cx,offset Finish-100h
mov dx,offset Begin
; ,
int 21h
; Begin.
call Close_file
III. , ,
94
;
mov ah,9
mov dx,offset Mess_ok
int 21h
ret
; (File_name db 'Prog09.com',0),
;
Error_file:
mov ah,2
mov dl,7
int 21h
ret
;
;
Open_file proc
cmp Handle,0FFFFh
;,
jne Quit_open
mov ax,3D00h
int 21h
mov Handle,ax
ret
Quit_open:
stc
; 1,
ret
; ( jc)
Handle dw 0FFFFh
Open_file endp
;
Close_file proc
mov ah,3Eh
mov bx,Handle
int 21h
ret
Close_file endp
File_name db 'prog09.com',0
;0Ah,0Dh
10. .
95
; ()
CSEG ends
end Begin
. 10.1.
ret
:
...
mov ah,9
mov dx,offset Mess_ok
int 21h
ret
; ret ?
...
. , ,
cs:0000h int 20h,
(. 10.2 10.3).
ret ,
. . . , ret , . . ss:sp, .
96
III. , ,
. 10.2. ret
10. .
97
10.2.
, , Pascal, , Visual
Basic . , , .
. . , "" .
. . " ", ,
( , -).
,
.
?
, , - ,
, -
.
: X Y. ,
Y ? " ", - ?
X, . !
, Y, ( ;
, . .).
,
. , , .
? Yandex., , . .
.
, .
, , Visual Basic for Applications (VBA).
. ,
, . "" , .
, (DrWeb, NOD32, Norton Antivirus, .). ,
. , , ,
, . (!) , .
III. , ,
98
10.2.1.
?
, -
. , , . , ,
. .
?
, , /, , . 500600 . ,
100150 , , 1,53 .
?
, . , 0,5
1 FDISK, . .
, (FAT File Allocation
Table), ! .
?
, COM- ( ).
?
, .
?
, COM-, ( 10.2).
10.2.
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Start:
...
; .
CSEG ends
end Start
10. .
99
COM-, .
EXE-, .
.
10.3.
, . . , .
!
,
, API-. , , FAR Manager.
, DOS Navigator.
() ,
. , Norton Guide, , , . , ( DOS ).
, , , .
(
).
10.3.1.
(), (, print_string), . 256 . BIOS () . , 16h:
...
mov ah,10h
int 16h
...
(MS-DOS):
...
mov ah,9
mov dx,offset String
int 21h
...
, , ,
, . , 09h 21h:
21h
...
mov ah,9
100
III. , ,
"!".
21h, -
, ds:dx
. 09h 21h . ( 10.3).
10.3. 21h
...
cmp ah,9
je Out_str
Go_21h:
...
; () 21h.
...
Out_str:
push cs
pop ds
mov dx,offset My_string
jmp Go_21h
...
My_string db " $"
...
,
09h 21h - . ,
. ds:dx - 21h. , , .
, ( ) . ,
,
(. . , ). , . .
10. .
101
10.4.
, 10.4 (\010\prog10.asm) ( ).
III. , ,
102
10.4.
CSEG segment
;: 09h?
je Ok_09
; , 21h.
;. Ok_09
jmp dword ptr cs:[Int_21h_vect]
Ok_09:
push ds
push dx
push cs
; ds:dx
pop ds
; (My_string) ,
;, 21h
mov dx,offset My_string
pushf
; ...
pop ds
iret
; ( )
;, , ,
; . !
; 21h
10. .
103
Int_21h_vect dd ?
My_string db ' !$'
int_21h_proc endp
; (
;). ( 27h)
Init:
; (Int_21h_proc) ( )
; 21h. 25h 21h.
; .
; 35h 21h:
;ah
mov ah,35h
;al , ( )
mov al,21h
int 21h
; es:bx () 21h (es , bx )
;
mov word ptr Int_21h_vect,bx
mov word ptr Int_21h_vect+2,es
;, . :
mov ax,2521h
mov dx,offset Int_21h_proc
;ds:dx
;(. . Int_21h_proc)
int 21h
;! , - 21h,
; (Int_21h_proc). ? ,
; ( .
; .).
mov dx,offset Init
int 27h
; 27h DOS ( 20h),
;. dx ,
;( Init). 0000h ,
; Init.
CSEG ends
end Start
III. , ,
104
10.4.1.
,
(. 10.110.3).
10.1. 35h 21h: ()
ah = 35h
es =
bx =
ah =25h
ds =
dx =
10.3. 27h:
ds:dx = ,
( DOS)
10.5.
(. 10.4 10.5).
10.4. pushf
pushf
Push flags
8086
10.5. popf
popf
Pop flags
8086
:
...
(01)
(02)
cmp ax,23
je Ok_ax
...
, (01), .
(02) . , ,
10. .
105
Int_21h_proc 10.4. :
...
cmp ah,9
je Ok_09
...
III. , ,
106
.
. ,
( )
cs:ip, . ,
iret
.
, ,
. - , 21h. , , ds dx. ,
( Int_21h_proc) , cs:ip .
:
; 21h
Int_21h_vect dd ?
(Define Double word ). , 16- 2 ( ) (dx, ax, es, ss . ., ah, dl, bh, ...
8- , 1 ). Int_21h_vect (2 ), :
mov word ptr Int_21h_vect,ax
1 , :
mov byte ptr Int_21h_vect,ah
10.5.1. ?
,
"" 21h. , AFD, TD, SoftIce ., CodeView.
AFD, http://www.Kalashnikoff.ru.
,
09h 21h. , , 10.5 (\010\test10.asm).
10.5.
CSEG segment
assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
org 100h
Begin:
mov ah,9
mov dx,offset String
10. .
107
int 21h
int 20h
String db 'My string.$'
CSEG ends
end Begin
10.4.
, 10.5. , . 10.5 .
"" 21h . . 10.6 test10.com, int 21h.
( ) . 21h-
Int_21h_proc prog10.com, ds:dx. . 10.7 , .
. 10.6 10.7 , int_21h_proc :
;
ds:dx, " !";
21h, ;
;
108
III. , ,
. 10.7.
* * *
11 Norton Commander.
11
, - , ,
, . , , . :
print ""
, , . , , . , ,
, , , . , ,
, ? , , , .
, ,
, . . .
11.1.
: Norton Commander (Windows Commander, FAR Manager . .) XMS-.
, ,
. , ,
, , 808680486 , ,
, XMS-, .
(, ), , , Norton Commander.
, .
. ?
, 300 .
, ,
"" FAR Manager, . ,
, .
110
III. , ,
,
COM- (. . 64 ).
" ?" . .
Volcov Commander, COM 64 .
, , ,
. .
, ( 11.1).
11.1. ""
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Begin_shell:
;
call Check_video
; -
mov ah,9
mov dx,offset Mess_about
int 21h
;
call Main_proc
; , .
int 20h
;
; ,
include main.asm
; :
include display.asm
; :
include files.asm
; :
include keyboard.asm
11.
111
; , :
include messages.asm
; . ...
CSEG ends
Begin_shell endp
Sshell11.asm ( . ).
, , Sshell Super shell
( ), ,
( 11).
(): include.
- (MASM/TASM): . include , . .
? , ( ), ( , ): main.asm, display.asm, files.asm, keyboard.asm, messages.asm.
?
(Far Manager, Norton Commander . .)
<Shift>+<F4>. ( ). <Enter>, <F2> <Esc>. .
- DOS-, c
http://www.Kalashnikoff.ru/.
, . . , Sshell11.asm. . .
!
main.asm, display.asm, files.asm, keyboard.asm,
messages.asm. !
( MASM 6.11):
ML.EXE Sshell11.asm /AT
( TASM):
TASM.EXE Sshell11.asm
TLINK.EXE Sshell11.obj /t /x
. 1.
Sshell11.com. , . ASM.
, . .
III. , ,
112
11.2.
10h
BIOS () (. 11.1).
11.1. 0Fh 10h:
ah = 0Fh
al =
ah =
bh =
: .
, . , 40 25, 80 25 (
, , Norton Commander), (CGA) ( Digger), .
. 11.2 .
11.2.
/
CGA+
01h
, 16
40
25
03h
, 16
80
25
04h
, 4
320
200
06h
, 2
640
200
VGA+
11h
, 2
640
480
12h
, 16
640
480
13h
, 256
320
200
sVGA
(, 1024 768, 64 ).
, ( ) VBE (
, ). CGA-, EGA-
helpassm.exe, http://www.Kalashnikoff.ru/.
11.
113
, CGA- EGA-.
. :
...
mov ah,0Fh
int 10h
cmp al,3
je Ok_video
...
, 3 (. . 80 25). ,
. , 0h
10h:
...
mov ax,3
int 10h
; 8025
...
, 3.
, ,
( sVGA , ,
8 ).
?
(, . .). , , . ,
"" .
(
). , , , , . , , .
, .
, MS-DOS
.
, . 09h 21h ( ) , . .
05h 10h
(. 11.3).
114
III. , ,
ah = 05h
al =
.
:
, ( ) ,
;
00h 10h
, ;
. , . , , " ", , .
.
.
* * *
. 12 .
12
12.1.
.
- resid12.asm test12.asm.
resid12.com , test12.com.
Resid12.com ,
ASCIZ (ASCII-, 0). Int_10h_proc
10h ( BIOS ()). 10. (88h)
10h, , ,
, , . 88h, 10h, (). :
ah = 88h ;
ds:si = , (ds , si ).
, ds () ,
si (). , COM- cs, ds, es, ss ,
. . ,
, .
12.2.
, , . , . " "
.
- , .
? , "". 10h, ax " " 8899h.
, -
III. , ,
116
. 12.1. : !
12.
117
pushf
; , . . ...
cmp ax,8899h
jne Next_test
;
; , ...
; ah al , ,
;- .
xchg ah,al
popf
;
iret
; ( )
;ax 9988h!!!
...
xchg ,
Exchange
8086
12.2. xchg
...
mov ax,10h
mov bx,15h
xchg ax,bx
...
; ax=15h, bx=10h
, cs ( . code segemt )
, , ip ( .
instruction pointer ) . ,
10h 0010:0400h,
1234h. :
;cs:ip = 1234:0100h
...
[1234:0100h] mov ax,8899h
; cs:ip=1234:0103h
[1234:0103h] int 10h
; cs:ip = / () 10h,
;. . 0010:0400h
[1234:0105h] mov bx,10
; , ...
...
118
III. , ,
iret,
ret.
10h.
.
(resid12.com) .
cs:ip. , .
, (
; AFD <F1>, CodeView <F8>) (. 12.2).
. 12.2.
12.3.
, :
stos, lods, rep. . (, , .).
lods ax/al , ,
ds:si, si .
ax/al? , : lodsb lodsw. Lodsb (b byte, ) al, lodsw (w word,
) ax ( 12.3, . 12.3 12.4).
12.3. lodsb lodsw
...
mov si,offset String ;si String, . . '1'
lodsb
12.
119
. 12.3. lodsb
. 12.4. lodsw
III. , ,
120
: lods b,
al, si 1. w, () ax, si .
:
1. ds?
2. lodsw ax '32', '23',
?
('32'), , 2 .
3, 2.
: String
, ,
, .
. COM- .
.
, - . ,
, ( )
. 12.4 .
12.4.
...
Handle dw 1234h
; 1234h.
; : 3412h. ...
...
mov ax,Handle
;ax=1234h
;al=34h
;al=12h
...
Byte ptr, , , 1 : Handle dw 1234h (dw . define word ( )) . 12.512.7.
, ,
10h , ,
( 12.5).
12.
. 12.5. ax
. 12.6. al
. 12.7. al
121
III. , ,
122
12.5.
...
mov ax,3510h
; () 10h.
int 21h
; es , bx ...
;
mov word ptr Int_10h_vect,bx
; , ,
mov word ptr Int_10h_vect+2,es
...
; ( )
Int_10h_vect dd ?
...
, Int_10h_vect.
, dd ( . define double
word ). - (es bx)!
, ,
.
, lodsb al ,
ds:si (:). ,
:
word ptr
...
mov al,ds:[si]
inc si
;( add si,1)
...
, . : lodsw ax ,
ds:si. :
...
mov ax,ds:[si]
add si,2
...
, (lodsb/lodsw)
( ).
(), . , :
Data_array db ' '
12.
123
12.6. stosw
...
mov di,offset Data_array
mov ax,2030h
stosw
...
Data_array dw ?
; 2030h,
;: mov Data_array,2030h
...
. 12.8. stosw
, "", . ( 12.7).
12.7. "" stosw
...
mov ax,0B800h
mov es,ax
mov di,0
mov ah,07h
; ( )
mov al,01h
;( "")
stows
;, : mov es:[di],ax
...
III. , ,
124
, :
:
...
. , ah , al . , (. .
ah () ), ,
. , ax !
rep,
. , .
stosw, ( 12.8).
12.8. loop
...
mov
mov
mov
mov
mov
ax,0B800h
es,ax
di,0
cx,2000
ax,0720h
; ,
;8025=2000
;07 , 20h
Next_sym:
stosw
loop Next_sym
;
...
, :
1. loop rep .
2. , rep.
3. ( Next_sym).
, rep
( 12.9).
12.9. rep
...
mov
mov
mov
mov
mov
rep
...
ax,0B800h
es,ax
di,0
cx,2000
ax,0720h
stows
;cx counter,
;/
; , .
12.
125
, . .
IBM PC/XT. rep stosw 0.
!
rep ( . repeat ) , loop !
:
stosw , ax
es:di;
rep stosw , ax es:di
, ;
rep, .
. , si, di.
; mov ax,0
(. 12.10):
sub ax,ax
; ax ax
. 12.9. xor
126
III. , ,
. 12.10. sub
12.5.
resid12.asm test12.asm (
AFD): .
13
, . , , , "" .
13.1.
:
"" , ;
;
.
, , ,
COM-.
, COM ,
100h. , "-",
"" , , jmp
(. . ).
,
( 100h) .
. , 13.1 13.2.
13.1. ( )
; , 100h
[1234:0100h] mov ax,34
[1234:0103h] mov dx,15
; , ...
III. , ,
128
[1234:0502h] ---
; , "-"...
...
13.2.
;"" ( )
[1234:0100h] jmp 0502h
[1234:0103h] mov dx,15
; "-"
; .
...
; . , ...
;=== , ===
; "-"
[1234:0700h] mov word ptr cs:[0100h], First_bytes_1
; "-"...
[1234:0705h] mov byte ptr cs:[0102h], First_bytes_2
; 100h jmp 502h, mov ax,34
;(. . ). ,
; " "...
; , !
;... 100h, . .
[1234:0709h] jmp 0100h
...
: . ...
13.2.
. virus13.asm.
.286 , (, ) 8086, 80286.
8086 ! Init
( ).
13. :
129
: DOS DTA
"-". : DTA
?
HELPASSM,
http://Kalashnikoff.ru. , .
, COM- 100h (org 100h).
0 100h? PSP (Program Segment Prefix,
),
, .
80h DTA (Disk Transfer Area,
). DTA
(4Eh 4Fh 21h). ,
, (80h)
. :
FORMAT.COM C:/S/U
cs:0080h L_C:/S/U, L , _ . ,
CodeView :
CV.EXE FORMAT C:/S/U
, cs:0080h (. 13.1).
. 13.1. PSP
PSP? ,
, (L_C:/S/U). , "-", "", ,
III. , ,
130
. L_/S/U.
:
PSP . , , ;
DTA , . 1Ah 21h (. 13.1).
13.1. 1Ah 21h: DTA
ah = 1Ah
ds:dx = DTA
, . . DTA .
: " ".
,
. :
mov dx,offset String
dx String .
:
mov dx,125h
dx . ,
() , 0.
- ,
! ,
, !
13.3
, .
13.3.
...
[1234:0100h] mov dx,400h
; , mov dx,offset String.
; offset String ()
; , .
...
[1234:0400h] ''
; , 400h.
; , .
...
13. :
131
, "-" 100h ,
. , :
1234:0400h + 100h = 1234:0500h. ,
. 100 , 23 000 !
, , ( 13.4).
13.4. 100h
...
;1234:0200h , 100h "-",
; "" ...
[1234:0200h] mov dx,0400h
; "-"
...
[1234:0400h] --; "-"...
...
[1234:0500h] ''
;, !
...
; ""
13.6.
...
; 5678h, 0100h
[5678:0100h] mov dx,400h
...
[5678:0400h] ''
; ()!
...
132
III. , ,
: , , , ?
(. . , )
- 7- ( !). 80 25 ( 03). , ,
. ,
( ).
. 13.2.
13.2.
0B800h
00
0B900h
01
0BA00h
02
0BB00h
03
0BC00h
04
0BD00h
05
0BE00h
06
0BF00h
07
.
, ?
300400 . 03:
80 , 25. 2 (/). : 80 25 2 = 4000 (, 4096 ). ? , ! ,
, , , .
Init . , . .
. ,
...
: movs.
13.3. movs
movs . ,
.
stos, .
. 13.3.
13. :
133
13.3. movs
movs
Move string
()
8086
rep movsb
; , . . movsb.
; Str1 = Str2
...
Str1 db '0123456789'
Str2 db '9876543210'
...
. 13.2.
III. , ,
134
13.8. movs
...
mov cx,5
; ( )
rep movsw
; ( ), . . movsw.
; Str1 = Str2
...
Str1 db '0123456789'
Str2 db '9876543210'
...
. 13.3. movs
13.4. ,
, :
"-";
7- (0BF00:0100h).
"" 0BF00:ip. , cs:ip ( ). ,
"":
13. :
135
, Off_move, , cs:ip.
, , Lab_jmp, 7- . . 13.4 AFD
virus13.com .
. 13.4. Virus13.com
13.5.
DTA 7- 0. . COM . 4Eh 21h (. 13.4).
13.4. 4Eh 21h: /
ah = 4Eh
cf = 1: ( )
cx = : 0
(, read-only hidden!)
cf = 0: DTA
ds:dx = .
:
*.*
*.exe
comm???.c??
c:\*.asm
136
III. , ,
cf . cf=1, ,
( 1), cf=0, ( 0). DOS, , .
, 4Eh , , ,
( ), .
( ), DTA . . cf=0 ( ), - .
,
( ), 4Fh 21h
(. 13.5).
ah = 4Fh
cf = 1: , ( )
cx = : 0
(, read-only hidden!)
ds:dx = ( 4Eh)
cf = 0: DTA
14
- , , . , , .
. -, !
, . .
, :
.
.
sshell14.asm!
.
, ,
, . : "...
(Delete_file, files.asm)...".
Delete_file , , files.asm ,
.
14.1.
14.1.1. COM?
, Windows (FLAT)
COM-, (TINY).
14.1.2.
?
. :
TINY "" , , , 16- (. .
III. , ,
138
64 ).
COM,
(, ). ;
SMALL "" , , ;
COMPACT "" ,
, . ;
MEDIUM "" , ,
. , ,
, ( , . .)
, ;
LARGE HUGE "" "" , ,
;
FLAT "" , , ( TINY), 32- .
, 4 294 967 296 (
4 ). , , , Windows.
.model. 14.1 COM .
14.1. .model
; - (TINY).
; ASSUME .
.model TINY
csEG segment
; (ORG) .
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
ret
Message db 'Hello, world!$'
; , .
; 0FFFEh , .
CSEG ends
end Begin
14.
139
14.2. SuperShell
14.2.1.
main.asm. (Hide_cursor,
display.asm). , .
03h 10h (. 14.1).
14.1. 03h 10h:
ah = 3
dx = (dh , dl )
bh = ,
, bh ,
. ,
8 . . -
, , bh 0. dx : dh ,
dl . (. 14.1).
. 14.1.
, .
.
25- . - 3 (25 , 80 ).
III. , ,
140
, ( )
24. , 25 (19h), ""!
02h 10h (. 14.2).
14.2. 02h 10h:
ah = 2
bh = ,
dh = , dl =
14.2.2.
80286+
,
. ,
, , ,
. , Norton Commander Far Manager, <Ctrl>+<O>.
, , , , ?
, 8 . , ? (Save_mainscr,
display.asm). : pusha popa (pusha .
push all ; popa . pop all ). pusha
: ax, cx, dx, bx, sp, bp, si di, , , popa : di, si,
bp, sp, bx, dx, cx ax.
. 14.2 , pusha.
286+. , , - 386+, ,
80386, 80486, Pentium . ., 8086
(PC/XT) 80286 (PC/AT). pusha popa
80286 ( ) .
sshell.asm .286. (MASM, TASM),
() 8086, 80286.
" ?"
.
14.
141
. 14.2. pusha
( ),
(MASM, TASM) , 8086.
, pusha popa ,
. , , .
, :
...
push 0B800h
pop es
...
1 , :
...
mov ax,0B800h
mov es,ax
...
, ax, .
push 1234h 80286+,
, 80186+. 80186
, ,
80286.
(Save_mainscr, display.asm) . (Restore_mainscr, display.asm).
III. , ,
142
14.3. ()
14.3.1.
, . . , , . .
. . ,
"". .
, ( ),
. ,
. .
, .
, ,
. :
MDA (Monochrome Display Adapter );
Hercules ( "");
CGA (Color Graphics Adapter );
EGA (Enchanced Graphics Adapter );
VGA (Video Graphics Array );
MCGA (Multi-Color Graphics Adapter VGA);
sVGA (Super Video Graphics Array ,
).
CGA "". (?) EGA.
"" , 10h 21h.
,
( ,
), . ,
"" 21h .
. , CGA-,
. :
8086. PC/XT .
80286+...
( ) : Height_X Width_Y. .
. Height_X , Width_Y . Num_attr (Main_proc, main.asm).
Draw_frame, display.asm.
14.
143
14.3.2. Draw_frame
. ,
( ).
(main.asm), :
Height_X ;
Width_Y ;
Num_attr .
. .
, . Draw_frame (display.asm).
! , , . 2 . :
Draw_frame
...
(1)
(2)
(3)
(4)
...
mov
shr
mov
sub
ax,Height_X
al,1
dh,11
dh,al
ax,16
ax,1
ax,1
ax,1
ax,1
;ax
;ax
;ax
;ax
;ax
=
=
=
=
=
10000b, . . 16
1000b, . . 8
100b, . . 4
10b, . . 2
1b, . . 1
, 2.
. . , div (, , ). (3) dh , . . 11. 11 .
, 5 . :
ax = 10
ax = ax/2 = 5
ax = 11-5 = 6
, 6. (). . , -
, :
.
, / .
III. , ,
144
?
, , ,
0B800:0000h 0B800:1000h ( ). ,
. , . . 0
1000h. 2 ( ),
3 160 (80 2 = 160). (, , . . ),
161, 0B800h. , /, ,
"" . ( !):
;dh
mov dh,0
; dl ( )
mov dl,15
; ,
;(. . ), 15 .
2 ( ) ( Linear
):
; 2 , . .
; : +
Linear = dl*2
Linear = Linear + dh*160
; 8
mov dl,56
; 56
Linear = dl*2
; Linear = 112
( ):
Linear = (24 160 + 80 2) 2 = 0F9Eh.
:
80 , 2 (
, ).
24 , 0.
80 ( 1): 80 2 = 160, , (24-) , 24 160.
( 24- + 2).
:
(24- 160 + 80- 2) 2
14.
145
14.4.
, . , (Get_linear,
display.asm) ( 14.2).
14.2. Get_linear
...
; dl 2 (dl=dl*2). 1 (
;; . ).
shl dl,1
mov al,dh
; al ,
mov bl,160
; 160
mul bl
;: al () * 160; ax
; mul , .
mov di, ax
; di
xor dh, dh
; dh
add di,dx
; di .
...
14.5.
. 14.314.5 . 14.3
14.5 , . 14.314.5 .
14.3. shl
shl ,
Shift left
8086
14.3. shl
mov ax,100b
shl ax,1
; ax 1000b
14.4. shr
shr ,
Shift right
8086
III. , ,
146
. 14.3. shl
. 14.4. shr
14.4. shr
mov ax,100b
shr ax,1
; ax 10b
14.5. mul
mul bl
Multiplex
al bl
8086
al bl, ax.
14.
147
14.5. mul
mov al,5
mov bl,2
mul bl
; ax 10
. 14.5. mul bl
, , .
.
15
"" . ,
. :
1. (,
).
2. "A" "a" "" "" .
3. Norton Commander, Volkov
Commander, Dos Navigator.
, 746 !
15.1.
( Init) .
, :
"" ( 9889h ax) "" ( 8998h ax). 21h 9889h 8998h,
(- ah al). Int_21h_proc, ah/al,
, .
.
, int 27h ( 15.1).
15.1.
...
mov
int
cmp
jne
...
ax,9889h
21h
ax,8998h
Set_resident
,
, . , Int_21h_proc
15.
149
21h ! , ,
( , 25h
21h) ( 15.2).
15.2.
...
; 21h
mov ax, 3521h
int 21h
; () 21h
; ()
mov word ptr Int_21h_vect,bx
; ()
mov word ptr Int_21h_vect+2,es
mov ax, 2521h
mov dx,offset Int_21h_proc
;,
int 21h
...
,
int 27h, ,
.
Int_21h_proc 21h (. 15.1).
. 15.1.
150
III. , ,
, . DOS, int 20h,
""! , (Int_05h_proc, Int_21h_proc,
Int_1Ch_proc), , .
21h ,
( Int_21h_proc). , , . "" , -
.
15.1.1.
21h?
DOS, , .
, ,
, "", ,
, .
, 21h , 3Dh ( ) . , ,
21h, . ,
, 3Dh,
, . DOS,
, 21h . , ( )
21h, , , DOS,
.
32- , ( ):
Int_21h_vect dd ?
Int_1Ch_vect dd ?
. .
dd "define double word"
.
15.
151
15.1.2.
2
() .
jmp dword ptr cs:[Int_21h_vect]
dword ptr , "", ,
(:), Int_21h_vect.
cs: , . cs: , . . , . cs:,
:
jmp dword ptr ds:[Int_21h_vect]
, . . ds cs (.
-).
, , , ( resid15.asm). cs,
, , ( ).
([ ]) , "" ,
Int_21h_vect,
.
jmp dword ptr ... " jmp ".
call dword ptr cs:[Int_21h_vect]
, . .
, call
. . , . :
(near) . call .
,
, ,
. , call, .
:
call Near_proc
III. , ,
152
(far) . , . ,
,
.
, , .
, :
call dword ptr cs:[Far_proc]
Far_proc, , . . ,
call.
mov ax,0A0Bh
(2) [1234:0103h]
call Our_proc
(3) [1234:0105h]
mov dx,123h
; Our_proc
...
(4) [1234:0200h]
Our_proc proc
(5) [1234:0200h]
...
; ( 1234:0105h)
(6) [1234:0250h]
(7) [1234:0250h]
ret
Our_proc endp
...
, (1) 1234:0100h,
Our_proc 1234:0200h (. ). (2), cs
(1234h), ip (0105h).
15.
153
(2)
( !), . . 0105h. 0200h (
). , Our_proc proc : -.
Our_proc, ( 0105h) . , , . .
- , ,
, , ret,
, , .
, . ret. ret
, , . (
"" ), ret 0105h,
. . , call, .
ip
!
( 15.3 0105h).
15.2.2. retf
,
. , , 3456:0400h . , , , (
1234h, 3456h). ( New_proc)
3456h 0400h New_proc, . ( 15.4).
15.4.
...
;
mov word ptr [New_proc],0400h
;
mov word ptr [New_proc+2],3456h
;
call dword ptr [New_proc]
...
New_proc dd ?
; (2 )
...
15.4 New_proc ,
( , -
III. , ,
154
call Near_proc
...
; Near_proc ( ,
; )
[1234:4569h]
Near_proc proc
...
; (,
; , , )
[1234:6789h]
ret
[1234:6789h]
Near_proc endp
...
15.6.
...
[1234:0200h]
...
; New_proc ( )
[3456:0300h]
New_proc proc
...
; (,
; , , )
[3456:0534h]
retf
[3456:0534h]
New_proc endp
...
.
, , ,
, , .
15.
155
, , , ,
. , . , , .
15.3.
. iret
"! . - !
pushf , ?"
call dword ptr [Int_21h_vect]
...
pushf
...
pushf
? . ,
, .
: .
int,
. , , 21h, 16h,
10h .
,
() .
, , , . 15.7 09h
() , (
).
15.7. 09h
; 09h, - ,
; - :
...
[0900:0050h]
mov al,bl
; , . , ,
; , (. )
[0900:0052h]
...
[0900:0345h]
iret
...
; , :
...
(1) [1234:0200h]
mov ax,Num_regax
III. , ,
156
(2) [1234:0205h]
cmp ax,17
(3) [1234:0208h]
jne Not_equal
...
09h ,
- , , -
(, ).
, ,
(2). ? , . ,
, DOS .
. .
. ,
(2) . (3)
, , ax 17. 1234h, 0208h
( ).
, 09h,
( ,
10h 16h),
, , ?
(cs), ( ip), . , , 09h ,
. ,
, cs:ip! ,
( 09h).
cs:ip ,
( 09h),
(
, ). " "?
"" . "
", . . ( , , , jmp Init . 15.1.2), .
, 09h. - , ,
, 09h,
.
, 09h ax, , , , , ,
ax Num_Regax (1).
15.
157
: , , . , , 21h, "" , , . ,
. ,
"" , ...
, 09h (. . 09h) :
iret ( . interrupt return ).
ret ,
(cs), (ip) , (ip)
( ret). ret iret.
:
ret ; , ( near
( ));
retf ; , , (
far dword ptr);
iret , . .
iret (cs:ip). 15.7 cs=1234h, ip=0208h, , . .
1. . , , - . ,
.
:
call dword ptr cs:[Int_21h_vect] pushf ?
. retf iret
(. ). () call dword
ptr ... (cs) (ip)
call . iret , . call dword ptr! ,
"". , "".
, !
15.4.
21h?
,
, 4Eh 4Fh. ,
. .
158
III. , ,
4Eh , , -
, DTA , , :
;
;
;
.
4Fh. ,
. MS-DOS.
21h. , , DTA
21h ( 15.8).
15.8. 21h
...
;: - 4Eh 4Fh ( )
cmp ah,4Eh
je Do_not
cmp ah,4Fh
je Do_not
; ,
; 21h " jmp". ,
;. . . ...
Go_21h:
jmp dword ptr cs:[Int_21h_vect]
;, - 4Fh 4Eh...
Do_not:
pushf
call dword ptr cs:[Int_21h_vect]
...
DTA, 21h ,
. , , ,
, .
, Do_not 15.8. 21h. !
21h. ,
int 21h, , "" .
15.
159
! 21h,
.
, DOS. "" 21h.
""
, !
, .
DTA. ?
" , DTA!" . ,
. . DTA 2Fh
21h. , 21h:
int 21h
15.5.
, -. : and, or, xor.
. .
.
, .
15.5.1. or
or () ( !)
, (. 15.1 . 15.2).
mov
ax,1010b
or
ax,1111b
; ax=1111b=0Fh. ()
; .
III. , ,
160
15.1. or
or
. 15.2. or
mov
ah,1000b
or
ah,1001b
; ah=1001b. ,
; , !
15.5.2. and
and () (. 15.2, . 15.3).
mov
ax,1010b
and
ax,0101b
; ax=0000b=0h.
;( , ).
15.2. and
and
15.
161
. 15.3. and
mov
ah,1001b
and
ah,0001b
; ah=0001b. .
15.5.3. xor
xor ( )
(. 15.3, . 15.4).
mov
xor
ah,1010b
ah,1100b
; ah=0110b=06h
15.3. xor
xor
. 15.4. xor
III. , ,
162
xor / :
mov al,0
;al=0
xor al,1
;al=1
xor al,1
;al=0
xor al,1
;al=1 . .
15.6.
, 21h
. - ,
.
15.6.1. 05h
05h (. .
05h) <Shift>+<Print
Screen>. (
BIOS). ,
. 05h. ( Int_05h_proc).
<Shift>+<Print Screen> ... , . Screen.txt.
! .
05h. -.
, 2 : . - !
"", . . , 40h 21h,
Screen.txt. !
...
15.6.2. 09h
, ,
- . /, .
60h -.
, in.
15.
163
ASCII- -. 09h
- ASCII-. .
( 15.9).
15.9. 09h
...
(1) Int_09h_proc proc
(2)
pusha
(3)
in al,60h
(4)
cmp al,58h
(5)
jne No_F12
(6)
xor cs:Num_status,1
(7) No_F12:
(8)
popa
(9)
(10) Int_09h_vect dd ?
(11) Int_09h_proc endp
...
15.6.3. 1Ch
,
18,2 . -
1Ch, .
Int_1Ch_proc ""
"A" "a" "O" "o".
18,2 . :
...
cmp cs:Num_status,0
164
III. , ,
jnz Go_1Ch
...
, "" Num_status. ,
. ,
Int_1Ch_proc ,
Go_1Ch. :
...
Go_1Ch:
1Ch. Num_status
,
, . . . 09h, Num_status <F12>.
xor. xor
...
15.7.
, , , - .
,
.
16
AFD Pro.
, . . .
:
, . .
. ;
. ,
,
.
, AFD Pro. , .
http://www.Kalashnikoff.ru.
16.1.
, ?
? , !
. :
;
.
. .
,
? .
16.1.1. 03h
, ,
. :
<Shift>+<Print Screen> 05h;
III. , ,
166
09h;
1Ch 18,2 .
15.
00 1Fh "" BIOS (). ( ). , MS-DOS 20h 2Fh (int 20h
; int 21h . .).
" "? ,
,
20h0FFh (. . , / ). , ( 00 1Fh), , .
03h?
-, , ,
AFD CodeView.
-, 0CCh,
. , int 20h0CDh 20h, . .
.
-, 03h : iret, . .
. , , , . .
03h,
int 3.
03h.
, () . ( <F1>
<F2>),
0CCh, . . int 3. , , , int 3. . ,
"Q" ( 16.1).
16.1.
cseg segment
assume cs:cseg, ds:cseg, es:cseg, ss:cseg
org 100h
Begin:
mov ah,2
16.
167
mov dl,'Q'
int 21h
ret
cseg ends
end Begin
. 16.1 , .
16.1. :
0100h
Mov ah,2
0B402h
MOV AH,02
0102h
Mov dl,'Q'
0B251h
MOV DL,51
0104h
Int 21h
0CD21h
INT 21
0106h
ret
0C3h
RET
, . . , <F1>/<F2> AFD.
, . , . ,
( ). . ,
, .
, Hacker's View.
III. , ,
168
!). <F1>,
(. 16.2).
16.2. <F2>
0100h
mov ah,2
0B402h
MOV AH,02
0B402h
0102h
int 3
0CCh
MOV DL,51
0B251h
0103h
push cx
51h
0104h
int 21h
0CD21h
INT 21
0CD21h
0106h
ret
0C3h
RET
0C3h
03h ?
, 0102h (. . 16.2). <F1>/<F2>. 03h :
1. .
2. (0B2h) 102h.
3. (mov dl,'Q' = 2 =
= 0B251h).
4. mov dl,'Q' ( 104h),
0CCh (. . int 3),
( 0CDh) .
5. mov dl,'Q', int 3, ( 03h).
6. 03h - .
7. ( ).
8. .
<F2>,
(. 16.3).
16.3. <F2>
0100h
mov ah,2
0B402h
MOV AH,02
0B402h
0102h
mov dl,'Q'
0B251h
MOV DL,51
0B251h
0104h
int 3
0CCh
INT 21
0CD21h
0105h
and bx,ax
21C3h
RET
0C3h
0107h
""
""
""
""
, 0105h21C3h.
, 0104h, 0CCh (int 3).
16.
169
, , , 1,
2 . , mov ah,2 0B402h 2 ; ret 0C3h 1 .
""
0B4h, , 0C3h, mov ah,2 ret (
0C3h). ret , mov ah,2.
mov ah,2 (02h)?
02h add dh,[CD51+BP+SI].
4 , "" 02h 0B2h, 51h, 0CDh.
, ... 105h
. 16.3. 21h and. and
(, and ax,11b). ,
21h , 0C3h. 21C3h and
bx,ax! 103h - push cx . 16.2.
: " " , , ,
. . . ,
1 , ( ) . ,
Hacker's View , .
, ,
""? , 03h , . <F2>
(. 16.4).
16.4. <F2>
0100h
mov ah,2
0B402h
MOV AH,02
0B402h
0102h
mov dl,'Q'
0B251h
MOV DL,51
0B251h
0104h
int 21h
0CD21h
INT 21
0CD21h
0105h
int 3
0CCh
RET
0C3h
: ret int 3
. . 16.5 ,
<F2>.
16.5. <F2>
0100h
mov ah,2
0B402h
MOV ah,02
0B402h
0102h
mov dl,'Q'
0B251h
MOV dl,51
0B251h
0104h
int 21h
0CD21h
INT 21
0CD21h
0105h
ret
0C3h
RET
0C3h
III. , ,
170
16.2.
, AFD ?
. : AFD 03h, 0CCh (int 3) . 03h .
.
03h iret. 35h 21h. , ,
Microsoft . .
16.2.1.
, 0000:0000h.
, 4 : (2 )
(2 ), 2 ,
( , , ":"). , 0000:0000h, 0000:0004h,
0000:0008h . . 16.2
21h .
16.2.
...
xor ax,ax
mov es,ax
; es
mov bx,es:[21h*4]
; bx
mov es,es:[21h*4+2]
; es
; 21h
mov Int_21h_offset,bx
mov Int_21h_segment,es
; 21h
mov ah,2
mov dl,'!'
pushf
; pushf ...
; int 21h
16.
171
Int_21h_offset dw ?
Int_21h_segment dw ?
...
, , . . . :
mov bx,es:[21h*4]
mov es,es:[21h*4+2]
, , , , .
, , , 21h*4+2. , .
: 21h*4+2=134 (86h). , , , . . -. , , mov
es,es:[21h*4+2] mov es,es:[86h]. ,
, , :
mov ax,(23+5)*3
mov cx,34h+98/2
, , .
? ? :
. , es 21h:
mov es,es:[21h*4+2]
;21h ; +2 .
mov es,es:[86h]
- , , es. , , . :
...
, mov ax,[bx+di] ,
. . bx di , ! -, bx di ? ax ,
bx di.
[21h*4+2] es? ,
es, 21h, - .
es , es,
21h*4+2, - , , es. , , (. . ) es ( 16.3).
III. , ,
172
16.3. es
...
xor ax,ax
mov es,ax
; es
...
mov es,es:[21h*4+2]
; es
...
16.3.
. , 03h iret, "" . 03h ( 16.4).
16.4. 03
...
xor ax,ax
mov es,ax
mov bx,es:[03h*4]
; bx
mov es,es:[03h*4+2]
; es
...
, 03h . ,
. ( int 20h)
(. dbg16_01.asm).
int 20h , . . 20h ,
.
-,
"!DEBUG.ASM". :
1. .
2. "!DEBUG.COM".
3. DOS ( | | cmd) Far Manager.
4. AFD CodeView.
5. , call nop.
6. AFD 4 <F2>,
"Program terminated OK".
16.
173
0120h
int 21h
0CD21h
INT 21
0122h
int 3
0CCh
RET
, .
, 16.5.
16.5.
...
mov ah,3Fh
mov bx,Handle
mov cx,offset Finish-100h
mov dx,offset Begin
int 21h
; ...
ret
;... 16.6
...
.
, ,
?
int 3 (0CCh). ,
. int 3 ret!
, int 3 ()?
-, 016, dbg16_0?.asm. , , .
,
Windows 9x.
17
17.1.
, ,
. , 7- , . .
, ,
-
. , , , mov dx,offset Message mov dx,400h. "-" , , Message. ,
400h , - .
ip mov .
. , 17.1.
17.1. ip
...
; ,
; call (. . pop ax).
call Label_1
Label_1:
; .
pop ax
; ax ().
...
17.
175
. 17.1.
. 17.2.
III. , ,
176
17.2.
, virus17.asm. Init , Get_ip (. . 17.1).
Get_ip.
, . . , Get_ip 0203h ( 17.2).
17.2.
...
(1)
(2)
(3)
(4)
...
[1234:0200h]
call Get_ip
[1234:0203h] Get_ip:
[1234:0203h]
pop ax
[1234:0204h]
sub ax,offset Get_ip
. 17.3 , , .
. 17.3. ax
17.
177
,
, 1000h (
).
( 17.3).
17.3. "-"
...
(1) [1234:1200h]
call Get_ip
pop ax
(4) [1234:1204h]
...
ax "-", . . 1000h. ,
!
, .
, . . 20, ,
, . , "" .
, ax "-".
,
"" , ax, . . "-".
( 17.4).
17.4.
...
; 7- , . . ,
; , "".
push 0BF00h
pop es
;es , ,
mov di,offset Open_file
;di ( (. -))
mov si,di
;si (), . .
; "-"...
add si,ax
III. , ,
178
mov cx,offset Finish-100h
;. . cx =
rep movsb
...
, . , offset , , 09h.
( -) , di
() Open_file, . . mov ax,3D02h (
mov, ).
7- .
("") . jmp.
- . , : ret, retf iret ( 17.5).
17.5. retf
...
(1)
(2)
add bx,ax
(3)
push cs
(4)
push bx
(5)
retf
(6) Lab_jmp:
...
17.
179
. "", ax.
Lab_jmp (, , ). , (5).
: , "-"?
.
. 17.4.
. 17.5.
180
III. , ,
17.2.1. "-"
, "-", , :
First_bytes db 90h, 90h, 90h, 90h, 0CDh, 20h
:
90h nop;
0CDh int;
20h 20h.
:
nop
nop
nop
nop
int 20h
6 "-",
jmp . , , "-".
, , ,
100h "" . , - , , - .
nop, int 20h.
, .
- ( COM-) (
virus17.com). : , ,
6 100h, , "-" .
. , 100h, . -
First_bytes ,
(. 17.6 17.7).
-,
First_bytes db 90h, 90h, 90h, 90h, 0CDh, 20h
dup ( . duplicate) , , . . , . , 6 .
:
Array db 1500 dup ('1')
Array 1500 , 1,
. "-
17.
181
", , dup,
.
. 17.6. 100h
. 17.7. 100h
17.2.2. "-"
, 100h ( "-" , ) ( 17.6).
III. , ,
182
17.6. 100h
...
mov ax,100h
jmp ax
; , ax
...
. 18 ,
, ,
, .
18
18.1.
/ , Get_linear
display.asm 14,
( 18.1 18.2).
18.1. (14 )
; display.asm, Get_linear, 17
...
push ax
push bx
push dx
shl dl,1
;: dl 2 (dl=dl*2)
mov al,dh
; al ,
mov bl,160
; 160
mul bl
;: al()*160; ax
mov di,ax
; di
xor dh,dh
; dh
add di,dx
; di
pop dx
; ...
pop bx
pop ax
ret
...
III. , ,
184
18.2. (13 )
...
push ax
push dx
xor ax,ax
xchg dh,al
;: dx = dl, ax = dh
mov di,ax
shl ax,6
;dh * 64
shl di,4
;dh * 16
add di,ax
add di,dx
shl di,1
;di * 2
pop dx
pop ax
ret
...
, 1 . .
, . . shl, mul,
ax.
:
= (COL 80 + RAW) 2.
:
= (COL 64 + COL 16 + RAW) 2.
:
= ((COL shl 6) + (COL shl 4) + RAW) shl 1.
!
div () mul () ,
.
. ,
, .
18.2. 17
17 .
, .
? , ,
- , - . , , -
18.
185
. : ?
, -, !
, , . ,
, .
18.3.1.
Draw_frame.
. Windows . Windows
"". " ".
.
. : , , 20 , ,
, ,
. ?
ret N, N . , ret N ret, ,
,
. ( 18.3).
18.3.
...
(1)
push 123h
(2)
call Our_pr
(3)
pop ax
...
(4) Our_pr proc
...
(5)
ret
III. , ,
186
09h
.
Our_pr , ( 123h). , . .
. (3).
. , , 20 ?
? ,
. , - ,
.
ret N, N . ( 18.4).
18.4. ret N
...
(1)
push 123h
(2)
call Our_pr
...
(3) Our_pr proc
...
(4)
ret 2
ret 2 , sp 2, . . "" , .
?
,
, :
-, ;
-, ,
;
-, ;
-, .
, - , ( ) . , Draw_frame?
. . 10 . , ( 18.5).
18.
187
18.5. Draw_frame
...
push 23
push 78
push 1F00h
push 1E00h
push 1D00h
push 0
push 0
push 0
; ?
call Draw_frame
...
- 2
push 78
- 2
push 1F00h
- 2
- 2
... . ...
:
- 20
, Draw_frame
. , :
ret 20
,
20 (10 ), .
!
,
(. 18.118.3).
:
?
bp,
.
.
. ,
. .
( 18.6).
188
III. , ,
. 18.1.
. 18.2.
. 18.3.
18.
189
18.6. bp
...
(1)
(2)
(3)
call Print_string
...
(4) Print_string proc
(5)
mov bp,sp
(6)
add bp,2
(7)
mov ah,9
(8)
mov dx,[bp]
(9)
int 21h
(10)
mov dx,[bp+2]
(11)
int 21h
(12)
ret 4
, 09h 21h. , , , .
, ?
" !", "". , , :
. , , ,
. (8) Message2, (10) Message1.
!
. 18.4.
, ( (5), (6))
bp , bp 2.
, "" ,
(3). call . , . .
III. , ,
190
bp 2, .
. : , (12). 4 , , ret 4.
. 18.4.
(2)
(3)
call Print_string
...
(4) Print_string proc
(5)
mov bp,sp
(6)
add bp,2
18.
(7)
mov ah,9
(8)
mov dx,Mess1
(9)
int 21h
(10)
mov dx,Mess2
(11)
int 21h
(12)
ret 4
191
:
"", " ". (16), (17) . MASM/TASM
mov dx,Mess1
mov dx,Mess2
mov dx,[bp+2]
mov dx,[bp]
. ,
. , " ": . ,
(data.asm):
Height_X
equ [bp+18]
Width_Y
equ [bp+16]
Attr
equ [bp+14]
. .
(DRAW_FRAME,
display.asm):
mov ax,Height_X
mov ax,Attr
. .
, !
, :
Heigt_X , Height_X equ
[bp+18]. : ret 20, . . 20 . ()
III. , ,
192
, , . : / , . ,
. , Windows , ! ,
!
18.3.2.
. Other.
, ""
"". . , , , ( )
,
(. ). , ,
, .
, Other , . , . , 8 ( , , 8 ).
. 8
? , !
, :
push offset Mess_head
. :
; ( 0, )
push offset Mess_head
push 1E00h
, .
, ? ...
, ,
( ). , . 16 , 20. .
18.3.3.
, , ,
:
Mess_quit db '',0
Mess_quitl equ $-Mess_quit
!
mov dx,offset Mess_quitl
18.
193
mov dx,0009
? mov ax,23+5*2.
. , - Mess_quit , - (MASM/TASM) . ...
; dl. dh = , dl = 0
call Get_linear
...
(, ).
160 ( 18.9).
18.9.
...
mov bl,160
; ,
mul bl
mov cx,ax
...
; cx ( cx )
III. , ,
194
al .
bl al, ax, cx. . , . .
(dl 0 79; dl ).
, .
. (
, ) ( 18.10).
Mul bl
18.10.
...
mov si,di
;ds:si
xor di,di
;es:si
;
mov Num_copysi,si
mov Num_copydi,di
mov Num_copycx,cx
push 0B800h
pop ds
push 0BA00h
pop es
rep movsb
;...
...
,
. (. Restore_scr.)
18.3.5. scas
, (
) (. 18.1).
18.1. scas
scas
Scan string
8086
, movs stos, :
,
( ). es:di ( 18.11).
scasb scasw. scasb
scasw
18.
195
18.11. scas
...
;es:di
(1)
;cx /
(2)
; (9)
(3)
mov al,9
; , al
(4)
repne scasb
...
(5) String db 1,2,3,4,5,6,7,8,9,10,11,12
(6) String_len equ $-String
...
cx ( /) String, . . 12.
al , . (4) di
, (. . 10). , , :
1. repne? rep.
, repne ( . repeat if not equal , )
() , , al/ax,
() .
, repe ( . repeat if
equal , ).
2. repe?
, ,
repne ( 18.12).
18.12. repne
...
;es:di
(1)
;cx /
(2)
;
(3)
mov al,1
; , , al
(4)
repe scasb
III. , ,
196
...
(4) di
6 (. . 1), .
, , al, , je Label ( Label, ).
(repe) ,
, al/ax.
3. , 18.11 al 13?
, 12 String 13, , di String.
4. , 18.11 cx , , 7?
, scasb 7 , 9
( al). , di 8 String, . ,
jnz Label (, ,
).
18.3.6.
scas, (Count_strmid, display.asm). ?
ASCII- 0. ,
. , ( 18.13).
18.13.
...
(1)
(2)
(3)
(4)
(5)
(6)
push cs
pop es
mov di,si
xor al,al
mov cx,0FFFFh
repne scasb
;es=cs
;di=si
;al=0
; ( )
; 0 ...
;0 ! di
;si=
;di= +1
(7)
sub di,si
;di=di-si-1 =
18.
(8)
(9)
(10)
(11)
(12)
...
dec
shr
mov
sub
mov
di
di,1
ax,40
ax,di
dl,al
197
; 2
; 2 = 40
;ax=40- =
;dl=, .
si , . scas es:di, di si (
(3)). al (4), cx .
, ,
, cx. (6)... ,
'0' (7). .
: si , di
+ 1. , di si
((7), (8)):
di = di si 1 = .
, (. 18.5).
. 18.5. 2. di = / 2
(9).
80 ( 3), 80 , . . :
di = ,
dl = (80/2) (di/2).
dl , .
.
198
III. , ,
18.3.7.
18.14.
18.14. (Print_string, display.asm)
...
Print_string proc
(1)
call Get_linear
...
Next_symstr:
(2)
lodsb
;
(3)
or al,al
; 0 ( ?)
(4)
jz Stop_outstr
; ...
; (ah) (al)
(5)
stows
(6)
jmp short Next_Symstr
; ...
(7) Stop_outstr:
(8)
ret
Print_string endp
...
ds:si
, dx (dh , dl
()), ah .
dx . , ?
-, . ,
, , ? , , .
-, : / , ? , .
-, . 8086/8088 .
.
, , 0. , (,
09h '$'). , . .
, 0 .
18.
199
. !
, , (MAIN_PROC, main.asm).
Quit_prog .
""/"". , , .
, <Ctrl>+<F5> (MAIN_PROC, main.asm).
18.4.
,
Far Manager, HELPASSM.
, " ", ,
,
. .
, (,
Draw_frame, Print_string), .
! ,
. !
19
19.1.
.
, , .
, 21h.
(, )
LOG-.
21h . 19.1.
19.1.
ax
ax = 4B00h
ah = 39h
ah = 3Ah
ah = 3Bh
ah = 3Ch
ax = 3D02h
ah = 41h
Microsoft 21h
ds:dx . , - .
19.1 19.2.
19.1.
mov ah,39h
mov dx,offset Directory
int 21h
19.
201
19.2.
mov ah,41h
mov dx,offset File
int 21h
4B00h. ,
ds:dx, . , . . .
.
MS-DOS Windows
(. 19.2).
19.2. MS-DOS
000001b
000010b
000100b
001000b
010000b
100000b
Windows MS-DOS
, Windows , : , , . .
, . :
100001b " " "";
000110b "" "".
, .
, "" " " .
. 19.1 ,
3Ch.
ds:dx, cx.
"" "".
100010b, 22h.
, , " ".
() ,
. "", "".
202
III. , ,
. 19.1.
?
COM 100h. 0 0FFh
PSP (Prefix Segment Program). PSP . ,
0 int 20h, 80h DTA
.
, PSP (. . ""
100h ). , 100h . ,
, , ,
. - , PSP ( ,
).
:
1. , 100h,
0. . .
2. ,
.
3. PSP , . .
, 100h .
, .
, .
,
21h , LOG- (c:\report.txt). ,
21h ( 19.3).
19.
203
19.3. 21h
...
cmp ax,4B00h
; ?
je Start_f
cmp ah,39h
; ?
je Create_dir
...
; - ,
; 21h ...
jmp short Go_21h
Start_f:
; LOG-.
mov si,offset Start_filemess
call Move_string
; ...
; 21h...
Create_dir:
; ...
, - . , - .
, 39h.
Create_dir ( ). . si Create_dirmess:
...
Create_dirmess dw Create_dirmessl
db ' ---> '
Create_dirmessl equ $-Create_dirmess-2
...
, , si,
. , :
204
III. , ,
-
, , . :
Create_dirmessl
, ,
. - ,
, .
, .
19.2. ?
. , , , . .
21h, 03h.
, . , 21h .
, .
-.
, , .
20
. ! , ,
. , !
. ( ,
!)
. ,
, COM-. , .
, .
, ! ,
Dr. Web, - .
COM- . ?
, C:\assm :
test.com;
dn.com;
nc.exe.
test.com . test.com ,
dn.com. dn.com, , . .
COM-.
PATH ( autoexec.bat) c:\assm,
, test.com , , c:\nc,
COM- c:\nc. !!!
, , ,
, . 24, . , ,
virus20.com , , .
COM-, C:\Windows\Command,
. .
PKLITE, . , -...
COM-.
III. , ,
206
, 16? ,
,
. , ,
, ,
. ? , int 3 (0CCh). , int 3, .
.
: 24 .
, !
20.1.
20.1.1. ret, call jmp
: ret call jmp, jmp ret?
. , .
. 20.1 .
20.1.
ret
pop ax
jmp ax
call proced
""
jmp proced
lab_ret:
jmp label1
, (Init) :
...
push offset Init
;3
ret
;1
...
, , ,
Init . , ,
, .
20.
207
20.1.2.
Infect_file. , , .
( 20.1).
20.1.
...
mov ax,cs:[1Ch]
or ax,ax
; 0, ...
jnz Error_infect
;... , 64
mov bp,cs:[1Ah]
; (. . )
...
, , COM- 64 ?
, ,
, . "MZ"
"ZM", EXE, COM. , .
, , test.exe 450 test.com.
, EXE-, .
command.com, MS-DOS
7.0 95 . COM
, DOS.
, command.com, ,
, command.exe?
. . , , , .
, . 4Fh
4Eh , DTA 1Ah . 65 535,
. ( 1Ah) , (
1Ch) . , .
, ("MZ" "ZM"). ? , EXE-
64 , COM.
.
, .
:
1. / ( 3D02h 21h).
2. ( 3Fh 21h).
3. , .
208
III. , ,
.
, .
+4 . ,
1122h
1122h : 2211h.
, .
, - +4
? , , ? , .
, ,
? ,
.
, , 10
20 , , .
, .
. ""
"-" .
4202h 21h (. 20.2).
20.2. 4202h 21h:
ax = 4202h
jc
bx =
cx, dx = ,
cx dx 0,
. .
, (). , , , ,
7.
, :
.
, ,
, ;
.
3000 , , 1500 , .
20.
209
,
"" "-" ( 20.2).
20.2.
...
mov ax,4202h
; / .
mov bx,Handle
xor cx,cx
; 0 .
xor dx,dx
int 21h
jc Error_infect
...
/ ,
,
40h.
( 20.3).
20.3.
...
mov ah,40h
; bx .
; "" "-"
mov cx,offset Finish-100h-F_bytes
mov dx,100h
; .
int 21h
jc Error_infect
...
"" "-",
, .
.
"-" , . , ,
,
.
"-" (
100h) , , ,
"" 100h.
: 6 ,
( 20.4).
210
III. , ,
20.4. "-"
...
; 6 "-"...
mov ah,40h
mov cx,F_bytes
mov dx,offset Finish
int 21h
...
, , "-", , "-"
, ,
.
6 , ""
, ,
Init. , , 6 "-".
6 ? , bp (. ). "-",
( 20.5).
20.5. "-"
...
push Init
ret
...
20.1.3.
, , :
1. COM-.
2. 6 .
3. 64 , (
1). .
20.
211
4. +4 1122h, ( 1). .
5. "" .
6. 6 "-".
7. .
8. Init .
9. ( ).
10. 6 +1122h ,
.
11. .
12. 6 "-" , "" "-" (. 6).
13. "-".
-
.
: . , COM-,
. . !
20.2.
! ! .
?
, , ,
, , .
: " , ?" , . , , , , , . , , ,
, . . .
, , , "" . .
DIR , , (, , ...). , ,
, , .
, , . ,
, - . !
: . ,
212
III. , ,
. , . , , . , " ".
, , . , -, :
? , , - -, ?
, ? ?
" , ?" .
: ,
. .
, , , , .
, ", " .
, COM-
. . :
, COM EXE,
COM- EXE-. ,
( ). . ,
, , ,
, , , .
, , , .
, , ! 21 .
21
21.1. SuperShell
21.1.1.
"", ,
, . . , , , . :
1. .
2. '.' 1, ( 4).
3. .
4. .
5. .
6. , .
7. , ( 4).
8. , .
9. 20 , ( 8). 20
, 10.
10. .
11. <Esc>, 12. ,
10.
12. : , .
13. , , <Y> <y>,
10.
14. <Y> <y>, .
, , .
1
. ,
. 'CD .', .
. DIR
.
III. , ,
214
21.1.2.
, Draw_frame (Main_proc,
main.asm). . .
,
. .
, ? , Mess_head Mess_down:
Mess_head
Mess_down
.
, , ,
.
. (Draw_messfr,
display.asm) , , ah ,
. ( 21.1).
21.1.
...
;SI
mov ah,[si]
;
inc si
;
call Count_strmid
;
call Print_string
;
...
. 21.1
.
. 21.1.
21.
215
(Draw_frame, display.asm) . ( 21.2).
21.2.
...
push 10b
; , .
call Draw_frame
...
( ) , .
.
21.1.3. test
, , ? , cmp .
, , cmp . .
, , , . 1.
Draw_frame ( 21.3).
21.3.
...
; , ,
push 1
call Draw_frame
...
, . . Other=1, .
. , ,
, . . , 0 ( 21.4).
216
III. , ,
21.4.
...
push 10b
; push 2
call Draw_frame
...
cmp Other,2
...
, , , ,
( 21.5).
21.5.
...
push 11b
; push 3
call Draw_frame
...
cmp Other,3
...
, , , , .
( , ) Draw_frame
, , , , .
: cmp , , (Other)?
and cmp. 21.6 , .
21.6. cmp
...
; ax Other
mov ax,Other
push ax
; , ( )
and ax,1
;, ax 1?
cmp ax,1
pop ax
mov Other,ax
; Other
je Ravno
;,
...
21.
217
, mov pop (
),
, 21.6.
: ? ,
, , 7 .
, ? !
, !
, , ... ,
test (. 21.1).
21.1. test
test ,
Test ,
8086
21.7.
21.7. test
...
mov ax,10100001b
test ax,1
;, .
jnz Ravno
;,
...
, cmp je/jz ,
. test .
, jne/jnz. , . . , ,
je/jz ( 21.8).
!
21.8. test
...
mov cl,100101b
test cl,1000b
;,
jz Ne_ravno
;,
...
III. , ,
218
, Other 8 .
"" "", . . "" " ". , , Draw_frame. ,
, .
, Other
, .
.
, ,
. , , .
21.9 -,
.
21.9. Other
...
mov ax,Other
test al,1
; 0?
jz No_copyscr
; , .
...
. 21.2 .
. 21.2. test
21.
219
21.2. DOS
21.2.1.
MS-DOS. 640 . .
, .
, DOS
.
, , ()
.
? : , , , .
, . ( ) ,
.
, 4Ah 21h
(. 21.2).
21.2. 4Ah 21h:
ah = 4Ah
jc , :
es =
ax =
bx = 16-
, , cs . 4Ah , es , . . 21.3
.
21.3.
Finish
220
III. , ,
,
.
: Finish. . , (Prepare_memory, main.asm) ( 21.10).
21.10.
...
mov bx,offset Finish
;bx=
; bx ,
; 16 , 4
shr bx,4
inc bx
; bx ( )
mov ah,4Ah
; /
; , . . , ,
; .
int 21h
...
4Ah
(. 21.4).
21.4.
Finish
Finish
640 ,
, Finish
640
Finish.
21.
int 21h
...
mov Seg_files,ax
...
221
. . 21.5.
21.5. 48h 21h:
ah = 48h
jc , :
bx = 16-
ax =
: ax =
65 536 . 21.6.
21.6.
Finish
Finish + 65 536
, Finish +
65 537
. 21.3.
222
III. , ,
21.2.2.
64 ?
. :
, .
, , DIR .
. ,
. , , , .
? :
1. . , 5.
2. .
.
3. . , 5.
4. , ( 3).
5. ,
,
.
6. ( Number_files) (Out_files, files.asm).
, .
22
,
, . ,
http://RFpro.ru.
1. ?
,
.
.
- (,
MS-DOS),
Hacker's View,
.
2. . ?
CF (Carry Flag). 1,
. .
PF. 1,
, . .
.
AF. 3- .
.
ZF (Zero Flag). 1, 0,
0 .
SF (Sign Flag). 1,
( , . .
( )).
TF (Trass Flag). 1,
,
1.
224
III. , ,
IF (Interrupt Flag). 1,
.
DF (Direction Flag).
: 0,
1,
1.
OF (Overflow Flag). 1,
, , . . , .
3. , MS-DOS.
?
http://www.Kalashnikoff.ru.
helpassm.exe.
, RFpro.ru, . !
23
PSP DTA.
( DOS)
. , , :
( MS-DOS DOS);
;
" " ;
;
(
);
, .
,
, ,
( LOG).
(,
, , / .) LOG-,
. , , LOG- (, , COM-, Hacker's View).
. LOG- , . :
RESID23.COM c:\assm\log_file.txt
C:\assm\log_file.txt, .
, " ". .
, , LOG-
A:\super\file.log. LOG-, , . . , , , ? ? ?
226
III. , ,
23.1.
, . , .
. :
SYS.COM C: A:
SYS.COM C: A: , C: A:
, SYS.COM .
SYS.COM : :. ?
, , , PSP 80h. PSP, , , COM-. , COM 100h (org 100h), 80h , DTA. , , .
?
, - .
80h ?
, 80h,
. , . , , (20h). ,
.
0Dh ( <Enter>). . 23.1.
23.1.
80h
81h
82h
0Dh (13)
, SYS.COM :
SYS.COM C: D:
80h (. 23.2).
227
23.2.
80h
06h
81h
82h
87h
0Dh (13)
6 , , 81h, .
. :
afd resid23.com params
params (. 23.1).
. 23.1. DTA
23.2.
( MS-DOS)
,
. :
PATH C:\WINDOWS;C:\WINDOWS\COMMAND
COMSPEC=C:\COMMAND.COM
228
III. , ,
TEMP=C:\TEMP
PROMPT=$P$G
... .
, .
, . ,
, path. , , .
SET, . . 23.2 Windows 2000.
SET .
:
, | |
| .
.
DOS , , PSP 2Ch, .
. ,
.
. 23.2. DOS
229
, , ,
, . , COM- , , 130 , 350 . ? , 27h, , dx
. , , dx,
. . 23.3 COM.
23.3.
0000h
002Ch
DOS
0080h
DTA
00FFh
PSP
0100h
(:
Begin)
( ). ,
. ,
0134h
, ,
(: Init)
,
27h
( , , .)
,
27h
0154h
int 27h (
DOS)
,
27h
0156h
, ., .
,
, .
int 27h
,
27h
. 23.3 .
III. , ,
230
. 23.3.
, PSP .
(256 ), . , : + 256 PSP.
, .
, .
, , .
,
. PSP, DOS,
().
32 , , , 50100 .
DOS, , ?
, MS-DOS
. 640 .
, , ,
, - .
PSP 2Ch DOS. ,
.
, . ,
- ( 23.1).
23.1.
...
mov es,word ptr cs:[2Ch]
mov ah,49h
int 21h
...
; .
; .
; ...
231
. . 23.4.
23.4. 49h 21h:
ah = 49h
jc , :
es =
ax =
. , , (. . 49h),
, .
, DOS,
env23.asm, . DOS (
), .
23.3.
. ,
.
?
PSP , ASCII- , ( )
LOG-. ? , ,
, , " ", . . ,
.
, . , . , , ,
80 , . , . , , <Backspace>.
, LOG- "".
, PSP. , PSP, . ,
, 256 (100h) .
, 0 , . 00F6h ,
( ). , , , , .
III. , ,
232
LOG-?
, :
<Enter>;
, (: <F1>
<F10>, .);
80 , , ( ).
Store_sym ( 23.2).
23.2. Store_sym
...
; di :
(1)
mov di,cs:[0F6h]
; 79?
(2)
cmp di,79
;, . .
(3)
jb OK_store
(4)
push di
(5)
push ax
(6)
call Save_string
(7)
pop ax
(8)
pop di
(9)
OK_store:
(10)
stosb
; .
(11)
; .
(12) ret
; .
; ...
...
23.3.1.
,
(3). , (2), (3) ,
79, , di. ,
OK_store. , , . . , . je (
. jump if equal , ) ,
, jb ( . jump if below , ) ,
, , (. . ,
di 9). . 23.5,
23.3.
233
23.5.
JB (Jump if Below)
, ( JAE)
JA (Jump if Above)
, ( JBE)
23.3.
...
mov ax,34
cmp ax,35
...
:
JNE;
JAE;
JNA;
JB;
JBE.
:
JE;
JA;
JNB.
.
23.3.2.
( CF) : stc clc
(. 23.6 23.7).
23.6. stc
stc
8086
III. , ,
234
, .
23.7. clc
clc
8086
? ?
. , ( 23.4).
23.4.
...
call Find_symbol
jc Not_found
...
- .
, ,
, . ,
- ( 23.5).
23.5.
...
call Find_symbol
cmp ax,1
je Not_found
...
ax=1, . , . , .
:
/
add, sub, mul .;
/ .
(. 23.8, 23.9).
23.8. std
std
8086
235
23.9. cld
cld
8086
? ?
(lods, stos, movs .). ,
, 0 4000, 4000 0 ( ,
). , , . ,
( ). , , , , . ,
, "". , lods, stos .,
, "".
, ( 09) - ( , ). . , ,
, :
cld
; !
: , ,
.
, .
cmp ax,0FAAFh
(3)
jne Next_step
(4)
xchg ah,al
; ?
III. , ,
236
(5)
iret
(6) Next_step:
(7)
cmp ax,0FBAFh
; LOG-?
(8)
jne Run_int
(9)
push cs
(10)
pop es
(11)
(12)
iret
; es LOG-
; di LOG-
(13) Run_int:
(14)
(2)(5) , 10h
, ah/al, , , , . ,
.
(6)(12). 10h 0FBAFh ax, , , ,
LOG-. ?
, LOG. , . , :
0FAAFh.
Resid23.com c:\newfile.txt
, ,
. ,
?
0FBAFh 10h, . , 10h ( ,
10h) es , di LOG- ( 23.7).
23.7.
...
mov ax,0FBAFh
; LOG-
int 10h
; es , di LOG- .
...
237
,
, , LOG-.
!
23.8 10h
(Int_10h_proc).
23.8. 10h
...
cmp ax,0FBAFh
; LOG-
jne Run_int
push cs
; es LOG-
pop es
mov di,offset File_name
; di LOG-
iret
...
23.4.
, . . ,
, .
- .
24
!
, 20. ,
!
24.1.
80386/80486.
, 80386/80486. . 24.1
.
24.1. 386+
eax
32
ax
16
8
ah
ax
al
ah
al
, eax 32- .
65 535 65 535 (. . 65 535 ). 16 (ax, bx, cx .).
32-. ,
. 32- ,
.
eax.
, ebx, ecx, edx, edi, esi, ebp.
32- :
.386
.486
24.
239
.8086
.286
, 32- 80386.
, - (MASM/TASM), 386+.
(.386), - . , TASM 5.0 MASM 6.13 ( http://www.Kalashnikoff.ru).
32- :
mov eax,0
;eax=0, ax=0
mov eax,15h
;eax=15h, ax=15h
mov ax,0FF00h
;ax=0FF00h, eax=0FF00h
mov eax,12345678h
;eax=12345678h, ax=5678h
, .
:
...
(1)
mov Variable,12345678h
(2)
mov eax,Variable
(3)
...
(4) Variable dd ?
...
240
III. , ,
24.
241
24.1.2. use16/use32
- : use16.
cseg segment use16
; 16-
use16 , 16 , .
, .386 , 32- (use32),
32- Windows. 16-
, 32-
. , , use16. , .386. .
use16, -
use32 (. . 32- ) :
mov dx,offset Message
( use16) :
mov edx,offset Message
24.1.3.
, ,
, ?
. ,
antivr24.asm display.asm , -
III. , ,
242
. ( ),
.
display.asm , , ,
. , , , . , . .
, #include stdio.h, include display.asm.
, stdio.h. , , , - .
.
, Hide_cursor
, , , .
,
. ,
! , , .
24.2. .
, Init, .
, 21h
int 99h, 21h- 99h-.
.
. " " , , . ,
20. . :
! , 20, .
, , PSP, ss:sp, , 21h ( 24.1).
24.1. PSP
...
(1)
(2)
(3)
cli
mov cs:[0],ss
mov cs:[2],sp
(4)
; PSP
;
;
24.
(5)
(6)
(7)
...
243
push cs
pop ss
mov sp,0FEh
, cli ( (1)).
, ss:sp
0 (. . PSP ) ( (2)(3)). , . . .
,
( 24.2).
24.2.
...
push ds
pop es
push cs
pop ds
...
, 4Bh ( )
3Dh ( ), ds , dx
. , ds es, ds
cs. es:dx. ,
dx. , , , ,
, , .
, ,
.
Check_prog, ,
/ COM- ( 24.3).
24.3. Check_prog
...
(1)
(2)
(3)
(4)
cld
mov di,dx
mov al,'.'
mov cx,65
(5) Next_sym:
(6)
repne scasb
(7)
jne No_com
...
; !
;
; 65
; es:di, .
; ?
III. , ,
244
com+ASCII 0
COM+ASCII 0
, (. .
), , .
,
, "" (. . ASCII 0). , :
prog.cOm
prog.CoM
24.
245
24.4.
...
mov ebx,es:[di]
; ebx +0
cmp ebx,006D6F63h
; 'com'0 ?
je Got_file
;!
cmp ebx,004D4F43h
;, 'COM'0 ?
jne Next_sym
;!
...
, 32- ebx, . ,
, . , cmp , "com". :
, . . .
. , /
COM, . Check_file.
/
20 ( 24.5).
24.5.
...
push es
; ...
pop ds
push cs
pop es
mov cx,65
; 65 ...
mov si,dx
mov di,20
rep movsb
; .
push cs
pop ds
...
19 ( Draw_frame). .
6 . , 2
1122h . ( 68h (. . push)) ( 24.6).
III. , ,
246
24.6.
...
mov bx,ax
; bx
mov Handle,ax
mov ah,3Fh
mov cx,6
mov dx,10
int 99h
; .
jc Not_infected
; !
mov ah,3Eh
; .
mov bx,Handle
int 99h
cmp byte ptr cs:[10],68h
; - 68h ( push)?
jne Not_infected
; - !
; ...
and eax,0FFFFFF00h
;: ( ,
; )?
cmp eax,1122C300h
jne Not_infected
;! !
call Cure_file
; . ...
...
"" (. 24.6). Cure_file, . :
1. 64 . (
, - ),
, - 28 .
2. , es,
Bytes_read. Kill_zarazu,
.
, , , . . .
and,
24.
247
24.3.
, .
, .
,
. , , .
-, ,
.
25
25.1.
1. ?
(FPU, Floating Point Unit
) ,
, (
).
2. ?
(, , , , .) . ,
FPU. , , .
3. ?
. 80486DX, . ,
Pentium, .
4. ,
,
?
, . - .
5. ?
-, . .
6. ? , ?
.
7. ? .
-, , . .
25.
249
-, . ,
, .
-, , ,
.
8. ?
. ,
. , .
9. ? ,
, PRINT 25*4, .
, . , . .
.
10.
?
, - . ""
. , ...
11. ?
! . , , , , .
. . ,
, , , . ,
http://RFpro.ru. !
25.2.
, , , .8087 (.287,
.387). , .
, : 8086 (.8086),
8086 80286 (.286) . . 25.1 ,
- (MASM/TASM), .
25.1.
; ,
; 8086!
.386
250
III. , ,
; 386 , 8087,
; 80287 .
.287
...
25.
251
, , st(0) ( ). ,
, . st(0) 10. 3 ( ) ( 25.3).
25.3.
...
(1) FILD Number1
(2) FILD Number2
...
Number1 dw 10
Number2 dw 3
...
! (1) st(0)
10. (2) st(0) st(1),
st(0) 3. !
, st st(1),
FADD.
FADD
st(0)
st(1)
st(2)
...
st(7)
st(0)
10
st(1)
252
III. , ,
25.2 ()
st(2)
...
st(7)
st(0)
st(1)
10
st(2)
...
st(7)
st(0)
13
st(1)
st(2)
...
st(7)
? , fild:
fist Result
25.
253
:
WAIT
ESC
AFD,
. 25.1.
. 25.1.
, , TurboDebugger. , . . , . ,
TurboDebugger , : , , , .
TurboDebugger,
...
: , , st(0) 13! , finit, ? - ? ,
( ) Result
st(0)?
: , . , . .
,
.
254
III. , ,
, ,
: . , xchg ( .
exchange ). :
fild ( . integer load) ( );
fadd ( . addition) ;
fist ( . integer store) ( );
fistp ( . integer store and pop) st(0).
fist Result fistp Result
, st(0) . ,
. .
, .
. , , FPU- (
, ). , 23,8
24, 23 ( )
. , , , , ( ).
? , RC, . ...
25.3.
. 25.4 , Result. . , ,
TurboDebugger, ,
. -.
25.4.
.8087
; 8086 8087
CSEG SEGMENT
ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
ORG 100h
25.
Begin:
finit
fild Number1
fild Number2
255
;
;st(0)=
;st(1)=st(0); st(0)=
fadd
fist Result
; Result
ret
Number1 dw 10
Number2 dw 3
Result dw ?
CSEG ENDS
END Begin
25.4.
1234. , .
, , 3,
2 . . , and:
...
mov AX,1234
and AX,0004
...
; AND AX,0Fh
- . , 1234 .
:
...
mov ax,4D2h
and ax,4
...
;
;
;
;
4
3
2
1
256
III. , ,
4321. 1234 . ,
.
"" ? , ,
1000, 100, 10, ... !
1000, 10.
. 2030 , . , , , (. . , 1234)
, .
10 ?
.
. ,
, .
, .
.
? , ,
.
TurboDebugger
.
, , ! . Windows SoftIce, ,
. ,
,
. , ,
.
, -
!Coproc!.asm,
.
, .
.
25.5.
? . , .
25.5.1.
714Eh 714Fh ( 4Eh 4Fh) 21h ( 25.5, . 25.2).
25.
257
25.5.
...
mov ax,714Eh
;di ,
; ( DTA).
xor di,di
; si .
xor si,si
; . -
mov cx,0FFh
mov dx,offset All_files
; (*.*)
int 21h
; es:di !
mov Handle,ax
...
. 25.2.
714Eh , ,
714Eh. (files.asm).
display.asm. , .
, - . : !
26
IBM- , .
26.1.
IBM-
.
. 26.1 IBM-
.
26.1. IBM PC
4,778
Mono,
CGA
-1840,
1841,
1851...
2060
616
CGA-VGA
-1849
48
40120
1640
EGA-VGA
-1863
SX/DX
412
80500
25120
EGA-VGA
Pentium I
MMX
16
300
1000
60266
VGA-sVGA
Pentium II
MMX
32
300500
sVGA
Pentium III
MMX SSE
64
10
6001000
sVGA
Pentium 4
MMX SSE
128
40
1000
sVGA
Intel Core
Duo, Core
2 Duo,
Core Quad
MMX
SSE I, II, III
512
80
1000
sVGA
(M)
8086/8088
256640
1020
80286
80386
SX/DX
80486
26.
259
. ,
: IBM 486 SX-25, 10 , 32 , MDA .
26.2.
1981 IBM PC (IBM
Personal Computer IBM). , , PCjr (Personal Computer junior), XT (Extended Technology), AT . .
80286 (PC/AT) "".
(,
, : push ), (protected mode). , , . . , 80386.
, .
, , .
80386 . . ,
,
, 4 . , Pentium , "",
(MMX,
SSE).
"" (80486) 386. ,
"", . , 32- (PCI), 32 , .
, 386- .
Pentium ( Pentium I, II, III) 64- .
, MMX SSE.
MMX
. , ,
, , ,
MP3- DVD- . .
SSE Pentium III. , .
( )
MMX SSE, Pentium MMX Pentium III
Pentium.
, Pentium II
MMX.
III. , ,
260
26.3.
?
, ,
, , , ...
... , . . ""
<Ctrl>+<F3>! , Norton Commander! , , . ,
, ! . ,
, ,
. , ,
(. 26.1).
. 26.1.
:
;
.
.
26.
261
26.3.1.
.
1. . , , DOS,
,
200 .
12 : 8 + "" + 3 . 13 . 13?
, . . ,
, , + . : , , . , 64
5000 !
?
"" .
13 ... .
? , "" - . , !
2. , . 255 . ,
64 : 65 536/255 = 256. (64 ) 256 .
400 ...
, , (
), .
3. 300 ,
.
2 , +
+ 3 .
, , . ,
<> <>, <PageUP>, <PageDown>.
, .
.
. WORD.
III. , ,
262
26.3.2.
, /:
Assm.txt;
;
!.asm.
, (. 26.2
. 26.2). . ,
1234h, 0000h ( , 500!).
26.2.
1234:0000h
Assm.txt
1234:0000h
(1 )
1234:0001h
(2 )
1234:0003h
(2 )
1234:0005h
1234:000Dh
1234:000Dh
(1 )
1234:000Eh
(2 )
1234:0010h
(2 )
1234:0012h
1234:001Fh
!.asm
1234:001Fh
!.asm (1 )
1234:0020h
(2 )
1234:0022h
(2 )
1234:0024h
. , ,
, .
" "
< > , ,
0000h.
26.
263
, "", "" ,
.
. 26.2.
27
27.1.
27.1.1. 21h
DOS,
.
: ?
, ,
:
-, ;
-, ;
, , , ,
.
. ,
-.
, . .
. , , , , ,
.
, , 21h. () DOS,
. 27.1.
27.1. 21h DOS
1234:0000h
DOS
( )
27.
265
, MS-DOS
(, 20h, 21h .). DOS
. , . ,
( , . . DOS) DOS, . . .
BIOS, . .
.
. 27.1. , 21h- MS-DOS 1234:0000h.
. ,
int 21h,
21h- MS-DOS, . . 1234:0000h. , , , ,
. .
, progA.com,
21h. ,
. 27.2.
27.2. 21h
1234:0000h
DOS
( )
2345:0000h
progA.com
1234:0000h ( DOS)
266
III. , ,
: , ?
, , ,
, . . .
progA.com .
() ( DOS, . . ), 35h 21h .
ProgA.com
21h.
DOS. . : ? , iret, . ? progA.com
, int 21h?
, progA.com, 21h, DOS.
,
() :
jmp dword ptr cs:[Int_21h_vect]
pushf
call dword ptr cs:[int_21h_vect]
iret DOS
, 21h int 21h.
: jmp . , jmp
(, , progA.com ). iret
21h DOS ,
, "" , progA.com ""
21h!
iret progA.com.
: call . iret ! call pushf ...
, 21h ( DOS)
progA.com .
progA.com? , 21h
, . iret
. , iret
,
int 21h.
progA.com int 21h?
. , / , /
, , 21h!
.
27.
267
1234:0000h
DOS
( )
2345:0000h
progA.com
1234:0000h ( DOS)
3456:0000h
progB.com
2345:0000h (progA.com)
27.1.2.
?
Resid27.com .
. 27.4.
27.4.
1234:0000h
DOS
( )
2345:0000h
Resid27.com
1234:0000h ( DOS)
.
, Resid27.com?
DOS?
?
.
III. , ,
268
, "" ? , , .
21h. (mov ax,9988h/int 21h),
- ( 9999h).
, 9999h ax, , , :
,
21h ( DOS).
.
, , , , .
:
1. cli.
2. (. . DOS).
3. 49h.
4. sti.
! !
27.1.3. ,
. Resid27.com , 21h ( progA.com). , . 27.5.
27.5.
1234:0000h
DOS
( )
2345:0000h
Resid27.com
1234:0000h ( DOS)
3456:0000h
progA.com
2345:0000h (Resid27.com)
: , Resid27.com ?
, int 21h ,
3456:0000h, . . progA.com. , , 2345:0000h. ,
Resid27.com? "". , , .
: Resid27.com,
, 21h?
, .
, progA.com, Resid27.com.
27.
269
, . ""
.
,
, , 21h .
, Volcov Commander , . ,
Volcov Commander. , . :
push ax ( )
push bx ( )
push cx ( )
:
pop cx ( )
pop bx ( )
pop ax ( )
Volcov Commander ,
. ,
Volcov Commander
. , ,
. Volcov Commander
, ,
.
27.2.
?
test27.com, 50 "A". ,
.
1. Resid27.com (. 27.1).
2. test27.com.
3. Resid27.com /u (. . resid27.com /u).
4. test27.com.
5. Resid27.com.
6. Resid27_.com.
7. Resid27.com /u (. . resid27.com /u) (. 27.2).
270
III. , ,
. 27.1.
. 27.2.
, , -. !
28
, , . . ,
.
<PageUp>, <PageDown>, <Home>, <End>, <Insert> ( ), <Ctrl>+<F3>.
28.1.
.
.
( 28.1).
28.1.
...
(01) mov fs,Seg_offset
;fs
; 2
...
fs (01), 286. .
es.
,
( 28.2 . 28.1).
28.2.
...
; . 4000 .
(01) mov ah,48h
III. , ,
272
(02) mov bx,250
; :
; . 64
(05) mov ah,48h
(06) mov bx,4096
;4096 * 16 = 65536
...
. 28.1.
, , ,
: main.asm other.asm. , , . 28.1.
. 28.1 , : Seg_offset (04)
Seg_files (08). ,
. 0FFFFh
.
28.1.
main.asm
other.asm
Seg_offset
0000h
0009h
0FFFFh
Seg_files
main.asm+ASCIZ
other.asm+ASCIZ
28.
273
28.2.
(2 ), Seg_offset
0000h. 0000h. ,
Seg_offset (. 28.2).
2 (. . ). 0009h.
(other.asm). .
2. . 0FFFFh? , . ! (. 28.3).
. 28.2.
. 28.3.
III. , ,
274
! , ,
. ? : 5 2 = 10. 2 , 2 . ,
Seg_files. .
+ ASCII 0,
(, ) .
/ .
, , . , . , ,
, . : , .
28.3.
, :
Current_file
Start_file
Out_fstat
Current_file , . .
, . .
Start_file ,
. 21 .
, ,
, "" . /
, /.
Start_file ,
.
, ""
, . ,
10h, . , . "".
Out_fstat ,
, . ? , .
, . 28.2.
28.2.
M
28.
275
, , main.asm
"" other.asm, :
main.asmm
, , "m". ,
( ) .
Out_fstat ,
, .
, ?
, , , .
, , . , ,
"" .
, <Insert> , , . . (. 28.4).
. 28.4.
.
(Out_files, files.asm), ,
Start_file ( 21 ). , , ,
, . . , . ( 1). , .
, <Insert>. 2, . ( -
III. , ,
276
) 2. 1 () Out_files. Out_files .
1, ( ), 2 (- ), ,
, . .
, ,
Out_files, .
"" , Out_files,
Out_fstat 0, Out_files ,
, . . ,
: , . .
, Out_files,
Out_fstat 1, .
28.4. <PageUp>
<PageDown>
< >
< > , .
call Up_pressed
(04)
jnc Next_khome
(05)
ret
28.
(09)
call Down_pressed
(10)
jnc Next_kend
(11)
ret
277
, <Home> <End> ,
< > < > ,
.
, ,
. < > < >
, .
29
4Bh 21h.
. , , . .
, : 4bh1.asm, 4bh-2.asm test.asm. !
.
29.1.
, , :
.
"" , COM-.
.
EPB.
, .
.
, .
ss sp .
, 21h.
21h ()
, () .
, ()
. :
1. ss sp.
2. ( ., ).
3. .
, , .
1.
2.
3.
4.
5.
6.
7.
8.
9.
29.
279
29.1.1.
, . 29.1
. 29.1 .
29.1.
...
(1)
(2)
shr bx,4
(3)
inc bx
(4)
mov ah,4Ah
(5)
int 21h
...
, Finish .
. 29.1.
?
, . , , - .
bx () .
III. , ,
280
4
?
, 4Ah ( )
bx 16 . bx ,
1 , 16, . . . bx
, ,
. , bx 16, 16 .
: bx 4 ,
bx 16.
bx (3)?
16 , .
bx ( 16 ),
.
29.1.2. PSP
29.2 . 29.2 .
29.2. PSP (0FFh)
...
(1)
mov sp,0FFh
...
. 29.2. PSP
, COM- , , . . 0FFFEh.
29.
281
Finish! , . .
, PSP. PSP , 256 , .
29.1.3. EPB
EPB (EXEC Parameter Block) . , , . 29.1.
29.1. EPB
()
00h
DOS
02h
06h
FCB
0Ah
FCB
0Eh
EPB
EPB , 29.3.
29.3. EPB
...
(1)
(2)
mov C_F,cs
...
EPB ( 29.4).
29.4. EPB
...
; === Exec Parameter Block (EPB) 4Bh ===
EPB:
Env dw 0
; ( DOS)
; + ...
C_F dw 0
;... +
dd 0
;FCB 1
dd 0
;FCB 2
Len dw $-EPB
...
; EPB
III. , ,
282
. 29.3. EPB
. 29.3 , . 29.1.
(
DOS)
, ( DOS). . , . .
.
( ),
( autoexec.bat).
:
C:\>set
CLIENTNAME=Console
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=MOSHOSTER
ComSpec=C:\WINDOWS\system32\cmd.exe
FARHOME=C:\Program Files\Far Manager
HOMEDRIVE=C:
LOGONSERVER=\\MOSHOSTER
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
ProgramFiles=C:\Program Files
PROMPT=$P$G
SESSIONNAME=Console
windir=C:\WINDOWS
, SET
.
29.
283
, " DOS..." 0,
, , . .
.
( )
,
, EPB 0
( ). , ,
.
DOS?
... , , , , (PATH), (
, DOS 2Ch , ; ).
DOS (, PATH).
. , , . . 23. .
.
, 1 (), 2 ( + ). ,
DOS .
. ,
.
, ( ):
Comm_line db 5,' abc',0Dh
, EPB ( ), (. . 29.1.4):
...
; C_F
mov C_F,cs
...
;
; ( )
C_F dw 0
; (
III. , ,
284
; )
C_O dw offset Comm_line
...
,
Comm_line:
( 0Dh);
;
0Dh.
FCB
FCB, , , . ,
, FCB .
29.1.4.
29.5 . 29.4.
29.5.
...
(1)
pusha
(2)
push ds
(3)
push es
(4)
mov ss_Seg,ss
(5)
mov sp_Seg,sp
...
. 29.4.
29.
285
29.6.
...
push cs
push cs
pop ds
pop es
...
, ( (2), (3)
29.5).
ss:sp. ,
. ,
: ss_Seg, sp_Seg. ...
29.1.5.
( 29.7, . 29.5).
29.7.
...
(1)
mov ah,4Bh
(2)
(3)
mov al,0
(4)
int 21h
...
, 4Bh (1). dx
(2), .
0 4Bh 21h (3).
, .
1, ,
, 3, . 1 3
286
III. , ,
, .
.
(4) .
, .
. 29.5. test.com
29.
287
29.9.
...
pop es
pop ds
popa
...
. 29.6.
! , , " ",
.
, , -.
.
!
30
30.1. (XMS) .
XMS-. :
XMS- (XMSmem.asm);
c autoexec.bat XMS-,
(XMSblock.asm);
, XMS- (XMScopy.asm).
3 , . , (XMSmem,
XMSblock, XMScopy).
,
:
XMS- himem.sys
, A20,
, ;
(XMS) DOS
. . movs .
;
XMS- ,
. , AFD, CodeView, Turbo Debugger
. . . , -
, , ,
.
, Windows.
, MS-DOS.
30.
289
30.2. XMSmem.asm.
XMS-
30.2.1.
XMS-
, , XMS-
( ).
, , , ,
. DOS/Windows himem.sys.
"" DOS , (640 ). , -
, ( ).
, , himem.sys .
4300h 2Fh (. 30.1).
30.1. 4300h 2Fh:
himem.sys
ax = 4300h
al = 80h
. 30.1. himem.sys
, 30.1 (
-).
III. , ,
290
30.1. himem.sys
...
; himem.sys ...
mov ax,4300h
int 2Fh
cmp al,80h
je Himem_loaded
; al = 80h, himem.sys .
; , himem ...
...
,
. Prepare_XMS, , .
XMS- ( DOS int 21h), "
call" .
() XMS-
4310h 2Fh (. 30.2).
WinAPI.
30.2. 4310h 2Fh:
XMS-
ax = 4310h
es = , bx =
.
,
XMS- (,
):
call dword ptr XMS_Addr
30.2 , XMS- .
30.2. XMS-
...
mov ax,4310h
int 2Fh
mov word ptr XMS_Addr,bx
mov word ptr XMS_Addr+2,es
; XMS-
30.
mov ah,88h
291
; XMS-
...
. 30.2. XMS-
, ( !)
32- edx.
,
Windows NT/2000/XP. "" MS-DOS 5.00
. , XMS- ,
CMOS, . ,
, , . DOS XMS-,
SWAP- Windows ,
, , .
DOS/Windows.
,
Out_dec.
30.3. XMSblock.asm.
. .
,
III. , ,
292
; 1024 XMS-
;?
jnz XMS_OK
...
XMS_OK:
mov XMS_id,dx
; id
...
(
. .), ax , .
. 30.3.
, dx
. , . : 3Dh 21h .
30.
293
30.3.1.
, XMS- DOS
. (640 ).
, . , 64 .
XMSblock.asm C:\autoexec.bat . ,
. , . , :
XMS- .
30.3.2.
XMS-
XMS- ( )
( 30.4). .
ds:si XMS-.
30.4.
...
;
XMS_str dd 0
;
XMS_src dw 0
; -
XMS_offsrc dd 0
;
XMS_rec dw 0
; -
XMS_offrec dd 0
...
.
XMS_str ( )
XMS .
294
III. , ,
() .
, ( )
. , XMS-, XMS (. 30.3 XMS_id).
XMS_offsrc ( ) - ( ) ( ).
XMS_rec () .
, ( ) . , XMS-, XMS (. 30.3 XMS_id).
XMS_offrec ( ) - ( ) ( ).
XMS-. XMSblock.asm .
XMS_src
30.4. XMScopy.asm.
:
,
XMS-, !
512 , ,
, 512 640 ;
C:\file.txt C:\filenew.txt. , file.txt C: ( , C:\file.txt). C:\filenew.txt
. , ,
.
.
.
:
1. C:\file.txt :
64 ;
;
, ,
;
30.
295
, . ,
.
2. , C:\filenew.txt:
64 ;
C:\filenew.txt;
;
, ...
, , DOS.
. ,
, -.
,
RFpro.ru.
31
31.1. Super Shell
.
. XMS- . 30. .
, , . .
.
, 21h (, ) (
) ( + = ).
/ .
:
1. , .
2. , ,
, ,
. . 6.
3. , (, , . .), , .
4. ( , . .), .
5. (. 1).
6. , ,
, ,
.
31.
297
:
XMS-;
;
;
COM, EXE BAT ;
;
.
, :
;
(DIR, COPY . .);
- (: prog.asm ml.exe prog.asm
/AT; readme.txt notepad.exe readme.txt . .);
.
, , Windows,
, MS-DOS, .
(, , ), "" , , .
, DOS . , Norton Commander
5.0.
31.1.1.
, . .
(, Hacker's View), .
( ) ,
, , <F3>/<F4>, .
. .
. , , ZIP, RAR . .,
.
, INI- ( ) .
III. , ,
298
,
, . , RAR. :
, ,
- , .
, .
31.1.2.
.
, , 64 128 (
), ,
() (. 31.1).
31.1. .
(64 )
(128 )
( ) ,
5 (""), ( ) , , ( ) 16-
. ""
, "" , "" . . (FFFFh) .
, ,
.
, "" ""
"". (. 31.2).
31.2.
(64 )
(128 )
, :
"", "", "", "" . . ,
, . . BIOS ,
.
.
.
31.
299
- .
.
? , 32 . ( ) .
31.2.
31.2.1.
. , : 21h DOS, 1Ch ,
18,2 , 13h BIOS, 25h
26h DOS. , , , , .
, . .
: ,
?
. ,
movs . ,
0000:0000h 256 ( ) 4 ( + ) = 1024 . , 4Bh 21h .
, , Norton Commander,
. , , , . , - , , , ""
. , , .
:
,
;
, "" ,
.
, . ,
, / -
300
III. , ,
. .
, "",
. .
, - , , , , . , ,
- , .
, .
"" , .
-
. ,
. , , .
, ,
.
31.2.2.
-
, MSDOS 21h, BIOS 13h. 13h
, .
, . , . . . DiskEditor Norton.
, . . - . , . , .
, BIOS 13h DOS 25h
( ) / 26h ( ) , . 13h . , . ,
- ,
, , , ( , ).
. / ,
31.
301
, /
, .
, . :
/ ;
/ ;
/ .
,
. , 99% , .
, MSDOS 13h. BIOS.
,
.
32
32.1. ?
, .
. DiskEdit
Norton Commander (Norton Utilities). , .
32.1.1.
, , , , . ,
(. ). ,
, . ,
. , , ,
.
:
, , .
, , FDISK
( ) , .
( , D CD-ROM ), (, D, E , F CD-ROM . .).
, , . , , . . , , .
13h .
32.
303
, -
, :
. . : Norton Utilities, Nuts&Bolts
.;
.
( , . . );
. , DiskEdit Norton Commander DOS
Navigator.
,
,
.
32.1.2.
(BOOT-), 13h, 25h (
) / 26h ( ) DOS.
, ,
,
. , (,
, ),
, Hacker's View.
(. 32.1).
32.1.
00h
""
03h
0Bh
0Dh
0Eh
(FAT)
10h
(FAT) ,
11h
13h
III. , ,
304
32.1 ()
15h
0F8h, 3,5
CD-ROM 0F0h
16h
FAT
18h
( 13h)
1Ah
( 13h)
1h
( , 0)
24h
( 0)
26h
27h
2Bh
( )
36h
Boot- , , .
, FORMAT.COM , "Non-system disk or disk error" ( ),
( ).
, , Boot-,
.
ScanDisk,
Norton DiskDoctor .
32.1.3. (FAT)
(File Allocation Table,
FAT). , 100- .
, . ,
. 31.1.2.
,
. , , ,
. :
, ;
, , ;
.
, , , , ,
32.
305
, .
, , , , . FFF0h 16- FAT (FAT16)
FFFF:FFF0h 32- (FAT32).
,
.
, FAT, , .
, , FAT
, .
. , , .
32.2.
, , , , . ,
,
FAT. 0E5h.
. 0E5h, , ,
,
.
. , , , . ,
, FAT! . !
, , , . :
,
, , . . ( , SWAP-).
.
100- . , ,
, . .
: , . FAT ,
"", (, DiskEdit). .
306
III. , ,
32.3.
32.3.1.
FAT, FAT32
.
, ( - ),
. , , ( ) ( ).
,
.
, , - ( SmartDrv).
,
, FAT, .,
. ,
, . Reset,
.
DiskEdit. , , . ,
DiskEditor. FAT FAT32.
(
)
1.1. MASM 6.106.13
-.
Microsoft Macro Assembler 6.106.13,
MS-DOS,
Windows.1 ,
.
http://www.Kalashnikoff.ru
MASM.EXE ( 6 ).
.
MASM.EXE Windows ,
.
, MASM (,
. 2 ).
BIN .
ASM- , .
1.2.
- (MASM, TASM, WASM, NASM .)
OBJ. (ASM) (COM/EXE).
, . include
( ).
1
Microsoft (http://www.microsoft.com/downloads/en/default.aspx)
Microsoft Macro Assembler 8.0 (MASM) Package (x86). .
310
, ,
(. . , ), .
, ( ) ,
( OBJ), ,
() (. . 1.3).
1.3.
, - c ( OBJ).
(),
-.
.
() COM EXE (OBJ). . (COM) 64
MS-DOS ( Windows),
. ,
MS-DOS, EXE-. I
COM.
COM, EXE MS-DOS -
. , , .
, - ,
, . ,
, ( ).
,
( COM EXE), .
, ,
: . MASM 6.006.13
ml.exe, /AT
. MASM (
) (LINK.EXE),
COM.
1.
311
1.3.1.
Microsoft (MASM)
, PROG.ASM.
MASM 6.116.13,
:
> ML.EXE PROG.ASM /AT
: PROG.OBJ PROG.COM.
PROG.OBJ, , , ,
PROG.COM . . /AT - (MASM),
, , ,
(LINK.EXE)
COM.
!
/AT !
Tlink32.exe , :
Fatal: 16 bit segments not supported in module prog.asm
TASM32.EXE TLINK32.EXE
, Windows!
TASM.EXE TLINK.EXE
( MASM 6.116.13).
LINK :
LINK : warning L4021: no stack segment
EXE .
, EXE. COM, EXE,
COM-, COM-
.
EXE-, .
,
COM. COM-, 1.
(TASM) :
**Error** prog4.asm(15) Near jump or call to different CS
CSEG segment :
ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
: (
, : - .),
(--, ).
, , , COM-, ,
EXE. COM-, 1.
3.1. ASCII
. 3.1 ASCII- 00h 7Fh,
( DEC), ( HEX) ( BIN) .
- - ,
. - - (OR
10000000b).
- . . 3.4.
/ .
:
DOS
09h 02h 21h MS-DOS;
.
00h 7Fh ( 0 127).
3.1. ASCII- 00h 7Fh, ,
DEC
HEX
BIN
00
00000000
Null
DOS, : "" (ASCII 20h)
01
00000001
02
00000010
03
00000011
04
00000100
(<Ctrl>+<D>)
314
3.1 ()
DEC
HEX
BIN
05
00000101
06
00000110
07
00000111
DOS:
:
08
00001000
0Eh
<Backspace> (
)
DOS:
:
09
00001001
0Fh
<Tab>
DOS:
(
8 )
:
10
0A
00001010
DOS:
:
11
0B
00001011
12
0C
00001100
13
0D
00001101
DOS:
:
14
0E
00001110
15
0F
00001111
16
10
00010000
17
11
00010001
18
12
00010010
19
13
00010011
20
14
00010100
21
15
00010101
22
16
00010110
3.
315
3.1 ()
DEC
HEX
BIN
23
17
00010111
24
18
00011000
25
19
00011001
26
1A
00011010
27
1B
00011011
01h
<ESC>
DOS, :
( )
28
1C
00011100
29
1D
00011101
30
1E
00011110
31
1F
00011111
32
20
00100000
4Bh
<>
33
21
00100001
02h
"
34
22
00100010
28h
35
23
00100011
04h
36
24
00100100
05h
37
25
00100101
06h
&
38
26
00100110
08h
'
39
27
00100111
28h
40
28
00101000
0Ah
41
29
00101001
0Bh
42
2A
00101010
09h
43
2B
00101011
0Dh
44
2C
00101100
33h
45
2D
00101101
0Ch
46
2E
00101110
34h
47
2F
00101111
35h
48
30
00110000
0Bh
49
31
00110001
02h
50
32
00110010
03h
51
33
00110011
04h
52
34
00110100
05h
316
3.1 ()
DEC
HEX
BIN
53
35
00110101
06h
54
36
00110110
07h
55
37
00110111
08h
56
38
00111000
09h
57
39
00111001
0Ah
58
3A
00111010
27h
59
3B
00111011
27h
<
60
3C
00111100
33h
61
3D
00111101
0Dh
>
62
3E
00111110
34h
63
3F
00111111
35h
64
40
01000000
03h
65
41
01000001
1Eh
66
42
01000010
30h
67
43
01000011
2Eh
68
44
01000100
20h
69
45
01000101
12h
70
46
01000110
21h
71
47
01000111
22h
72
48
01001000
23h
73
49
01001001
17h
74
4A
01001010
24h
75
4B
01001011
25h
76
4C
01001100
26h
77
4D
01001101
32h
78
4E
01001110
31h
79
4F
01001111
18h
80
50
01010000
19h
81
51
01010001
10h
82
52
01010010
13h
83
53
01010011
1Fh
84
54
01010100
14h
3.
317
3.1 ()
DEC
HEX
BIN
85
55
01010101
16h
86
56
01010110
2Fh
87
57
01010111
11h
88
58
01011000
2Dh
89
59
01011001
15h
90
5A
01011010
2Ch
91
5B
01011011
1Ah
92
5C
01011100
2Bh
93
5D
01011101
1Bh
94
5E
01011110
07h
95
5F
01011111
0Ch
96
60
01100000
29h
97
61
01100001
1Eh
98
62
01100010
30h
99
63
01100011
3Eh
100
64
01100100
20h
101
65
01100101
12h
102
66
01100110
21h
103
67
01100111
22h
104
68
01101000
23h
105
69
01101001
17h
106
6A
01101010
24h
107
6B
01101011
25h
108
6C
01101100
26h
109
6D
01101101
32h
110
6E
01101110
31h
111
6F
01101111
18h
112
70
01110000
19h
113
71
01110001
10h
114
72
01110010
13h
115
73
01110011
1Fh
116
74
01110100
14h
318
3.1 ()
DEC
HEX
BIN
117
75
01110101
16h
118
76
01110110
2Fh
119
77
01110111
11h
120
78
01111000
2Dh
121
79
01111001
15h
122
7A
01111010
2Ch
123
7B
01111011
1Ah
124
7C
01111100
2Bh
125
7D
01111101
1Bh
126
7E
01111110
29h
127
7F
01111111
DOS, :
DEC
HEX
BIN
DEC
HEX
BIN
128
80
10000000
192
C0
11000000
129
81
10000001
193
C1
11000001
130
82
10000010
194
C2
11000010
131
83
10000011
195
C3
11000011
132
84
10000100
196
C4
11000100
133
85
10000101
197
C5
11000101
134
86
10000110
198
C6
11000110
135
87
10000111
199
C7
11000111
136
88
10001000
200
C8
11001000
137
89
10001001
201
C9
11001001
138
8A
10001010
202
CA
11001010
139
8B
10001011
203
CB
11001011
3.
319
3.2 ()
DEC
HEX
BIN
DEC
HEX
BIN
140
8C
10001100
204
CC
11001100
141
8D
10001101
205
CD
11001101
142
8E
10001110
206
CE
11001110
143
8F
10001111
207
CF
11001111
144
90
10010000
208
D0
11010000
145
91
10010001
209
D1
11010001
146
92
10010010
210
D2
11010010
147
93
10010011
211
D3
11010011
148
94
10010100
212
D4
11010100
149
95
10010101
213
D5
11010101
150
96
10010110
214
D6
11010110
151
97
10010111
215
D7
11010111
152
98
10011000
216
D8
11011000
153
99
10011001
217
D9
11011001
154
9A
10011010
218
DA
11011010
155
9B
10011011
219
DB
11011011
156
9C
10011100
220
DC
11011100
157
9D
10011101
221
DD
11011101
158
9E
10011110
222
DE
11011110
159
9F
10011111
223
DF
11011111
160
A0
10100000
224
E0
11100000
161
A1
10100001
225
E1
11100001
162
A2
10100010
226
E2
11100010
163
A3
10100011
227
E3
11100011
164
A4
10100100
228
E4
11100100
165
A5
10100101
229
E5
11100101
166
A6
10100110
230
E6
11100110
167
A7
10100111
231
E7
11100111
168
A8
10101000
232
E8
11101000
169
A9
10101001
233
E9
11101001
170
AA
10101010
234
EA
11101010
320
3.2 ()
DEC
HEX
BIN
DEC
HEX
BIN
171
AB
10101011
235
EB
11101011
172
AC
10101100
236
EC
11101100
173
AD
10101101
237
ED
11101101
174
AE
10101110
238
EE
11101110
175
AF
10101111
239
EF
11101111
176
B0
10110000
240
F0
11110000
177
B1
10110001
241
F1
11110001
178
B2
10110010
242
F2
11110010
179
B3
10110011
243
F3
11110011
180
B4
10110100
244
F4
11110100
181
B5
10110101
245
F5
11110101
182
B6
10110110
246
F6
11110110
183
B7
10110111
247
F7
11110111
184
B8
10111000
248
F8
11111000
185
B9
10111001
249
F9
11111001
186
BA
10111010
250
FA
11111010
187
BB
10111011
251
FB
11111011
188
BC
10111100
252
FC
11111100
189
BD
10111101
253
FD
11111101
190
BE
10111110
254
FE
11111110
191
BF
10111111
255
FF
11111111
3.2. ASCII
ASCII . 3.3. ASCII ah 00h 16h,
al 0.
, * () ,
.
3.
321
3.3. ASCII
<F1>
3Bh
<Alt>+<F1>
68h
<Ctrl>+<F1>
5Eh
<Shift>+<F1>
54h
<F2>
3Ch
<Alt>+<F2>
69h
<Ctrl>+<F2>
5Fh
<Shift>+<F2>
55h
<F3>
3Dh
<Alt>+<F3>
6Ah
<Ctrl>+<F3>
60h
<Shift>+<F3>
56h
<F4>
3Eh
<Alt>+<F4>
6Bh
<Ctrl>+<F4>
61h
<Shift>+<F4>
57h
<F5>
3Fh
<Alt>+<F5>
6Ch
<Ctrl>+<F5>
62h
<Shift>+<F5>
58h
<F6>
40h
<Alt>+<F6>
6Dh
<Ctrl>+<F6>
63h
<Shift>+<F6>
59h
<F7>
41h
<Alt>+<F7>
6Eh
<Ctrl>+<F7>
64h
<Shift>+<F7>
5Ah
<F8>
42h
<Alt>+<F8>
6Fh
<Ctrl>+<F8>
65h
<Shift>+<F8>
5Bh
<F9>
43h
<Alt>+<F9>
70h
<Ctrl>+<F9>
66h
<Shift>+<F9>
5Ch
<F10>
44h
<Alt>+<F10>
71h
<Ctrl>+<F10>
67h
<Shift>+<F10>
5Dh
<F11>
85h
<Alt>+<F11>
8Bh
<Ctrl>+<F11>
89h
<Shift>+<F11>
87h
<F12>
86h
<Alt>+<F12>
8Ch
<Ctrl>+<F12>
8Ah
<Shift>+<F12>
88h
< >
4Bh
<Alt>+< >
9Bh
<Ctrl>+< >
73h
<Ins>
52h
< >
4Dh
<Alt>+< >
9Dh
<Ctrl>+< >
74h
<Alt>+<Ins>
A2h
< >
48h
<Alt>+< >
98h
<Ctrl>+< >
<Del>
53h
< >
50h
<Alt>+< >
A0h
<Ctrl>+< >
<Alt>+<Del>
A3h
<PageUp>
49h
<Alt>+<PgUp> 99h
<Ctrl>+<PgUp>
84h
<Alt>+<BS>
0Eh
<PageDown>
51h
<Alt>+<PgDn> A1h
<Ctrl>+<PgDn>
76h
<Alt>+<Tab>
A5h
<Home>
47h
<Alt>+<Home> 97h
<Ctrl>+<Home>
77h
<Ctrl>+<Tab>
94h
<End>
4Fh
<Alt>+<End>
<Ctrl>+<End>
75h
<Shift>+<Tab>
0Fh
9Fh
<Enter>
<Alt>+<A>
1Eh
<Alt>+<H>
23h
<Alt>+<O>
18h
<Alt>+<V>
2Fh
<Alt>+<B>
30h
<Alt>+<I>
17h
<Alt>+<P>
19h
<Alt>+<W>
11h
<Alt>+<C>
2Eh
<Alt>+<J>
24h
<Alt>+<Q>
10h
<Alt>+<X>
2Dh
<Alt>+<D>
20h
<Alt>+<K>
25h
<Alt>+<R>
13h
<Alt>+<Y>
15h
322
3.3 ()
<Enter>
<Alt>+<E>
12h
<Alt>+<L>
26h
<Alt>+<S>
1Fh
<Alt>+<Z>
2Ch
<Alt>+<F>
21h
<Alt>+<M>
32h
<Alt>+<T>
14h
<Alt>+<Enter>
1Ch
<Alt>+<G>
22h
<Alt>+<N>
31h
<Alt>+<U>
16h
*<Alt>+<Enter>*
A6h
<Alt>+<\>
2Bh
<Alt>+<[>
1Ah
* <Alt>+</> *
A4h
* <Ctrl>+</> *
95h
<Alt>+<,>
33h
<Alt>+<]>
1Bh
* <Alt>+<*>*
37h
* <Ctrl>+<*>*
96h
<Alt>+<.>
34h
<Alt>+<'>
28h
* <Alt>+<-> *
4Ah
* <Ctrl>+<+> *
90h
<Alt>+<;>
27h
<Alt>+<`>
29h
* <Alt>+<+> *
4Eh
* <Ctrl>+<-> *
8Eh
<Alt>+</>
35h
<Alt>+<=> 8Ch
* <Ctrl>+<.> *
93h
<SysRq>
72h
3.3. -
. 3.4 - . -
60h in.
- - (OR 10000000b). - .
15.
3.4. -
<Esc>
01h
16h
<Right Shift>
36h
<F6>
40h
1!
02h
17h
\|
2Bh
<F7>
41h
2@
03h
18h
2Ch
<F8>
42h
3#
04h
19h
2Dh
<F9>
43h
4$
05h
[{
1Ah
2Eh
<F10>
44h
5%
06h
]}
1Bh
2Fh
<F11>
57h
6^
07h
<Enter>
1Ch
30h
<F12>
58h
7&
08h
<Ctrl>
1Dh
31h
<Num Lock>
45h
8*
09h
1Eh
32h
<Scroll Lock>
46h
9(
0Ah
1Fh
,<
33h
<Home>
47h
0)
0Bh
20h
.>
34h
48h
3.
323
3.4 ()
-_
0Ch
21h
/?
35h
<PageUp>
49h
=+
0Dh
22h
***
37h
*-*
4Ah
BS
0Eh
23h
<Alt>
38h
*+*
4Eh
Tab
0Fh
24h
<Space>
39h
<End>
4Fh
10h
25h
<Caps Lock>
3Ah
<PageDown>
51h
11h
26h
<F1>
3Bh
<Insert>
52h
12h
;:
27h
<F2>
3Ch
<Delete>
53h
13h
'"
28h
<F3>
3Dh
<Left Win>
5Bh
14h
`~
29h
<F4>
3Eh
<Right Win>
5Ch
15h
<Left Shift>
2Ah
<F5>
3Fh
<Menu>
5Dh
-
-,
(. 4.1).
4.1. -
help
i80386, i80486
32- Intel
A
ASCII- 66, 71, 163
69, 76
ASCII- 32, 313, 318, 320
B, C, D
BOOT- 302, 303, 304
COM- 15
DTA 129, 130, 135, 136, 158, 159, 225,
226, 229, 231, 232
E
EPB 278, 281283
EXE- 15
F
FAT 304306
FCB 284
H
himem.sys 288290
M
MASM 47
Masm.exe 4
309
P, T, X
PSP 225, 226, 229, 231, 232
TASM 4, 47, 312
XMS- 109, 288295
2325, 39
2325
149152
170172
142, 183, 184
25, 112, 113, 132, 139,
140, 144, 193, 194
113
CGA+ 112
VGA+ 112
113, 114, 132, 135,
139, 140, 162, 194
132
97, 98, 128, 129, 131, 132,
134, 136, 176182, 205211,
299, 300
4, 223
326
278287
302304
:
BAT- 297
COM- 297
EXE- 297
278287
115
:
297
260
283
13
310
, 139, 140
137, 138
, 142
cmp 66
dec 21, 22, 45
div 143, 184
equ 190192
fadd 251, 252
fild 250252
fist 252, 253
inc 20, 22
int 31
iret 155157
JA 233
JAE 233
JB 233
JBE 233
jc 78, 79
je 68
jmp 44, 45, 69
JNA 233
JNB 233
jnc 78, 79
jz 67, 68
lods 118, 122, 124, 125
loop 42, 43
mov 13, 17
movs 132134
mul 146, 184
nop 61, 64, 65
offset 39
or 159, 160
org 27
pop 56, 58
popa 140
popf 104
push 56, 58
pusha 140
pushf 104
rep 118, 122, 124, 125
repe 195
ret 9496, 152, 153, 157, 185, 186
retf 153155, 157
scas 194, 195
shl 145
shr 145
stc 233, 234
279
306
288295
:
25
25
26
:
44, 69, 232
44, 69
48, 49, 58, 99
32, 60, 99104, 107, 108,
115, 155, 264267
MS-DOS 13, 14, 224
148, 155158, 162,
163166
.
:
17
125, 126
13, 17, 238, 239
18, 27
250
284
67
- 18
327
:
300
170172
302, 303
304306
4
:
297, 298
305
273277
87, 89, 260, 291, 292
( . . 328)
328
():
256, 257
81, 82
207210
296, 297
76, 77, 7981, 8487, 89
296, 297
296, 297
260
261263, 272
297299
296, 297, 305
87, 89
271, 272
291, 292
67, 104, 106
78, 79
104, 223
,
43, 46
42
43, 46
241, 242