В. И. Юров - assembler. Учебник для ВУЗов (2003).pdf
TRANSCRIPT
-
/
. .
ASSEMBLER2-
,
goe,300.piter.com
300 300- -
-
--
2003
-
32.973-018.17 681.3.06(075)70
:
. ., ,
. ., - ,
-
70 Assembler. . 2- . / . . .: , 2003. 637 .: .ISBN 5-94723-581-1
Intel. , , -
. . -
. Intel- ( Pentium IV ). , Assembler.
, -
.
32.973-018.17 681.3.06(075)
, , ,
. , ,
, .
ISBN 5-94723-581 -1 , 2003
-
13 16 16
1. 17
2. - IA-32 Intel 26
3. IA-32 58
4. 74
5. 85
6. 121
7. 146
8. 165
9. 193
10. 209
11. 236
12. 249
13. 268
14. 293
15. 324
-
6
16. Windows- 365
17. 447
510
. IA-32 511
625
626
-
13 16 16
1. 17 18 Intel : 21 24
2. - IA-32 Intel 26
27 IA-32 29
Intel 30 IA-32 40
56
3. IA-32 58 IA-32 59
61 63 mod / 64 , 70 71
72 73
4. 74 75 76 77 78
78 78 79
-
8
80 83
84
5. 85 86
90- 97
103 110 119
. 121 121 123 128
129 134 135 MASM 141 Microsoft Visual Studio 142 143
144
7. 146 147 149 156 158 160 164
8. 165 166
167 168
170 170 172 173 175 176 177 179 179 180
181 181 183
- 183
-
9
BCD- 184 BCD- 190
192
9. 193 194 195 199
199 201 203
205 205 206 207 207
207
10. 209 214
215 219
224 225 227 / 228 229
229 234 235
11. 236
if-else 237 switch 237 240
while 240 continue break 240 do-while 241 for 241
MASM 242 .IF 242 .REPEAT 243 .WHILE 244 .BREAK .CONTINUE 244 245
248
12. 249 253
MOVS 253 , 254
-
10
255 CMPS 255 , 258
, 259 SCAS : 259 , , 260
261 LODS 261 AL/AX/EAX , , 262
262 STOS 263 , ,
AL/AX/EAX 264 - 265
- 265 - 265
266
13. 268 269
269 271 275 278
280 281 281 282
284 286
286 287 288 290
292
14. 293 EQU = 295 297 305
WHILE REPT 305 IRP 307 IRPC 307
'. 308 308 315 318
319 321 322
-
11
15. 324 325 327
331 332 334 EXTRN PUBLIC 337 340
344 345 346 ENTER LEAVE 356 359
364
16. Windows- 365
Windows- 367 Windows- C/C++ 368 Windows- 379
387 389 398
TASM Windows- 401 Win32 404
Windows- 406 Windows- 406 413 Windows- 420
Windows- 435 437 - 438 - 440
446
17. 447
448 SWR 453 CWR 454 TWR 455
456 457 457 458 463
466 468 471 472
-
12
474 482 494
500 501 501 501 502 502 502
505 507 508
510
. IA-32 511 513 553 MX 569 (SSE SSE2) 587 . 625
626
-
, , Assembler . -
, -
. ,
:
^
Intel-;
, -
,
; ,
Intel- , , - .
, -
:
Intel- ;^ ;* ,
,
;
;
.
,
. -
.
-
,
-
14
-
.
Pentium Pro/MMX/II/III/IV.
, 17. - .
, -
,
. -
. -
.
, 7, - .
, , -
. 11 -, .
-
, , -
, ,
C/C++ Pascal. -
, -
.
Windows-, . . -
( Pentium IV). , -,
.
, http://www.piter.com/download,
MASM TASM. , . -
-
Intel-- .
.
-
. -,
Intel ( Pentium IV). -, -. , -
. -, -
-
15
.
Assembler: . -
. Assembler: - ,
. -
, -
. -
. ,
. -
-
.
. , , -
, , -
. , ,
. , -
,
, . ,
, ,
, -
, , -
. , , ,
-, , ,
. , ,
. , .
-
. ,
. -
. , ,
, -
.
, -
. Intel- . Intel- Intel, AMD, VIA,Transmeta, Intel -
Intel. ? -, Intel--
. -, TASM MASM. - . , -
TASM , , , -
-
16
MASM. TASM 5.0. MASM . - MASM 6.14 MASM32 7.0. , - notepad.exe.
-
. -
, ,
, , ,
. -
. [email protected] - , , -
.
.
, , -
[email protected] ( , ). ! , ,
http://www.piter.com/download. http://
www.piter.com.
-
1
Intel
--
(). , -
-
.
, . 1.1. , ,
, .
, ,
. ,
,
, ,
. -
,
. -
, , , -
.
-
18 1.
. 1.1.
-
.
, .
. 1.2 Intel. : -, , .
.
. Pentium - PCI (Peripheral Component Interface), - , , ISA (IndustryStandard Architecture).
. -
, -
, , .
.
.
, -
.
, , ( - ). , - , . -
, , .
-, -
. , , .
,' ,
.
. -
, -
-
19
1
- W (Pentium Pro/11/lll)
4> / /
|
' ,,
(L1) (L1)
j L2 (64 )
(L2)
i | ,,
1
J L
0
1 I _ 1 1 !
/ ^ i : ^
/
. 1.2.
. -
.
-
. -
, ,
, -
.
. , : - , , -
. . , ,
, () (). ( !) -, ,
,
.
-
20 1.
, ,
. ,
, -
. ,
, 50- . - , -
. .
, , -
. , , -
. -
,
( ). , . -
-
. ,
, . -
-
, ,
, , -
, .
-
.
, -
( , - ), -. : .
, -
.
.
.
: - -
; . Intel. -, -
(hardware), . , Intel . -
Intel AMD, VIA, Transmeta. (Intel- -) Intel -,
-
Intel 21
,
Intel- .
Intel Intel . Intel 1968 . 14004 Intel 1969 . 4- 2300 . - -
. 14004 -.
, , .
1972 . 8- 18008 - 16 . - Intel . 1974 . 18080, , 8-, 64 -. , -
. Intel- - 18080.
Intel 18086 1978 . 16- , 16- . 20- - 1 - 256 . Intel 18088. 16- 18086 8-- , . -
, -
, .
18088 8- . 8- 18088 - . , -
, 18086/88, - 18087, . -
IEEE-754. -, , 18086/88, Intel . -
Pentium , 18086/88(, -).
, (software), , .
-
22 1.
-
, -
,
. 1 . 18086/88 . , -
. , ,
MS-DOS EMS (Expanded MemorySpecification), 64 32 . , 1982 . Intel i80286. ,
, -
.
24 , 16 , . -
. Intel -
. Intel -
. Microsoft ( Windows) IBM (OS/2). - , i286 MS-DOS, 18086/88. -
.
, -
i80386, Intel 1985 . 32- , - IA-32 (32-bit Intel Architecture). : 32-- ( 4 ); 32 ; ( 8086); - ,
4 . 18086 18088, - i80386 (180386-DX) 16- 180386-SX. 180387. i80386 Intel : - (bus interface unit), (code prefetch unit), - (instruction decode unit), (executionunit), (segment unit), (paging unit). , 180486, .
-
Intel 23
i80486 1989 . , -
- 8 (1- L1) - (2- L2). i80486 . , RISC- . ,
(Complete-Instuction-Set Computing, CISC) - (ReducedInstruction Set Computer, RISC). CISC- - , . RISC- .
, -
, .
CISC- . i80486 5 . J80486 Intel . -, J80486 .
180486 -.
, , PENTIUM. - Pentium Pentium-60 1993 . ( , v) . 8- . - (branch prediction). Pentium 128 256 , 64 . - , -
(Advanced Programmable InterruptController, APIC), - (dual processing), -. Pentium 133 (1997 .) - ( MultiMedia extensions). - , SIMD-, -
. -
, .
, , -
- . , -
Pentium i486 .
, ,
Pentium Pentium, P6 Pentium IV NetBurst.
-
24 1.
Pentium Pentium Pentium MMX. 6 1995 Pentium Pro. ,
. , -
Pentium Pro, -. ,
. -
, .
Pentium Pro -. 8 ( ) - 256 , - 64- , . - Pentium Pro 36 , 64 .
Pentium II, 1997 ., Pentium Pro -. , - - -
16 , - 256,512 1 . - .
. , 1998 ., Celeron Pentium II Xeon , , - Pentium . Celeron - . Pentium II Xeon .
6 Pentium III, 2000 . - -,
SSE- (SSE Streaming SIMD Extensions) . .
32- Pentium IV. -
, NetBurst. - Pentium IV - NetBurst. Pentium IV - Intel 144 . , -
. SSE2 (Streaming SIMDExtensions 2).
tl - .
, ,
- .
-
25
.
.
, -
, . . -
, .
.
-
.
.
, -
.
. -
- -
. ? , - . , ,
.
Intel - . Intel -, , ,
7 000 000 - .
-
2-
IA-32 Intel
Intel IA-32 Intel 6 (Pentium Pro/I I/I II) NetBurst (Pentium IV) IA-32 IA-32 IA-32 IA-32
1 . . ,
. . ,
, -
. .
, -
, .
-
27
( ) : , - ()? , - -
. , ,
.
, -
.
: .... . ,
.
,
- , -
. , -
.
,
, -
- . -
.
,
, . -
, :
; ; ; ; ;
" ; ; ; (). , -
.
. -
, , ,
-.
-
.
-
. , , , -
-
28 2. - IA-32 Intel
.
--
. -
. , -
.
-
. -
,
10 . , .
-
. (. 2.1): - , - () , , . -
. . Intel, , .
-
. , -
, -
.
. 2.1.
.
. -
() ,1, 2,... . . ,
.
. ,
,
-
1-32 29
. (. 1) - , -
-,
.
. -
.
-
. .
* .
, . -
-
. . -
, ,
, ,
.
.
ii . , - .
Intel Intel- . ,
,
Intel. , - , -
. -
[7]. Intel,
, i8086 Pentium IV, , IA-32(32-bit Intel Architecture). -. Intel -. IA-32 - . , IA-32 i80386, - .
1, , Intel - IA-32. , 18086/88 IA-32 , i80286 . .
IA-32 IA-32 . , -
.
-
30 2. - IA-32 Intel
Intel . -
(. ). - IA-32, , Intel , , .
, -
IA-32 - : -; ; - ; ; - ; ; . -
, -
.
Intel Intel - Pentium Pro. - .
() 32- -, () - .
, , -
(. 2.2). - IA-32 Intel: P6 NetBurst.
. 2.2.
6 6 Intel, Pentium Pro,Pentium II (Xeon), Celeron, Pentium III (Xeon). , Intel, (three-way) -
-
1-32 31
.
, ( ) .
. -
. --
. -
Intel , -
. IP/EIP (Instruction Pointer ). Intel -
, . Intel CISC-, . -
-
. -
, ,
. Intel - i80386 . - . .
.
,
.
, -
. -
Intel 180486. J80486 , - .
1. - .2. .3. , -
.
4. .5. ( -
). ?
. -
.
.
.
Pentium - . 480486
-
32 2. - IA-32 Intel
( ), Pentium . -
. . Pentium - .
u- () v- (). - . -
(FXCH). , 480486 .
( - ), - . , -
.
, u-. -
.
6. . 180486 Pentium . ,
12 , . , . -
, .
-
30 . - -
(out of order), , , -
. -
:
. -
. -
-
. ,
6-8 1 . : 6-8 . -
. Pentium / (. 1) - . 80 %.
II . -
.
.
.
7 , . 39999-
-
1-32 33
-
, -
-
.
,
. -
, ,
,
, .
-
.
, - .
, . 2.3 - . 1.2 (. 1). , 6 . , L2, -
^, L1 ( ), - .
/ , , -
, , -
.
'' .
/ , - , ( - ,
, ). , : -
( - ) - ( ). .
.
iis . . -
-
1. - -
8 , . -
( -
-, (- - ) (- ).
2 . 256
-
34 2. - IA-32 Intel
(Pentium Pro/11/lll)
:
{
MMX-
MMX-
,
()
Mt
1
(L1)
-
12 (64 )
=>!
. 2.3. 6 (Pentium Pro/11/lll)
), (256 , 512 1 ) 64- . - - ( ) - -
. -
- . , -
-
64- . -
.
. 64- - , -
-
1-32 35
.
, -
. . -
.
.
64-- , -
. -
.
- -
MESI [7], [13]. -
-
. -
,
. -
. -
.
- (L1) , - -
(L2). L2 ,
-
.
/ 32- ( L1) , - . ( - ) . , ,
: , -/ - .
, .
, -
256 . , , ,
, .
, ,
.
, -
.
, -
.
,
. ,
-
36 2. - IA-32 Intel
-
.
. -
( ). - -
(out of order) (threeway) . .
, -
, .
( ), - ( ) - ( ). -
. , -
.
.
, -
, -
4 + 1 + 1. , ,
, -
4 + 1 + 1. - , .
, .
, -
, , , -
, , -
, .
-
. 40 , -
.
,
. -
( ) - .
-
,
, -
. ,
-
. -
, 40 - ,
-
1-32 37
: - , -
. -
/ - .
/ - .
-
, -
. ,
, , -
. -
, ( ), -, .
-
, -
.
-
, -
-
. ,
(, ), - FIFO (First In, First Out , - ), .
,
: -,
. ,
.
-
. -
-
.
, . -
.
. -
, ,
. , -
, .
,
,
. -
, , ,
-
.
-
38 2. - IA-32 Intel
. -
, -
. ,
, . -
, , -
, -
.
.
-
Pentium. -
.
,
, . -
-
,
. -
,
, , -
. -
.
-
.
, -
-
, 180486 - Pentium.
NetBurst NetBurst, Pentium IV, 6, -. (net , burst ), NetBurst . , - Pentium IV, - -
.
.
. -
. -
. -
.
. Pentium IV 20 -. , -
-
IA-32 39
, , ,
.
. 4 (Pentium III 512 ). . 95 %. . . -
. -
, .
12 3 . - .
Pentium IV . 2.4.
( ->.)
/
^
2 (L2)
1 (L1)
. 2.4. Pentium IV
NetBurst -perThreading. Pentium IV , - IA-32.
-
40 2. - IA-32 Intel
IA-32 , , - MSR. - API .
, , ,
Intel. , 6 NetBurst, [13]. , . -
-
, ,
. -
.
, -
.
IA-32
.
,
. IA-32 Intel (. 2.5):' 232 - 1 (4 ), Pentium III/IV
236 - 1 (64 );- ;
;
;
(); MMX-, - ( Pentium MMX);
' MMX- ( Pentium III);
9 , - ( ). . , , -
IA-32, -, .
(i486, Pentium) - (232 - 1, 32 ) . ,
-
1-32 41
cax axah 1 al
cdx dxdh 1 dl8CX
ch I clcbx bx0bX
bh 1 bl31 15 7 0
ebp | bpesi | si
esp SP31 15 0
>(
IIII
I I
f | i486/!Pentium Pro/
< ss:esp
0
i;
3entiumI/III/IV
i 15 0:PP?J .
' I st(0), | ,
st(1) .( | |
' i s2> / enagst tr st(3) . -I st(4) .' eip| II st(5) .- 31 15I st(6) .'
79 .' 0, .
1
I mmxO I| mmxl |I mmx2 IL mmx3 II mmx4 II mmx5 II mmx6 II mmx7 I
'63 0
0
IP0
I xmmO I| xmml |I xmm2 I| xmm3 || xmm4 |
xmm5 I| xmm6 |
xmm7 I127 0
MMX-(Pentium MMX/II/III/IV)
MMX- (Pentium III/IV)
. 2.5. IA-32 Intel
-
Intel. , , i386 i486. - 18086/88, , .
8- 16- , , FLAGS, IP 1 .
-
.
-
42 2. - IA-32 Intel
IA-32 , -
. -
.
IA-32 .II , (real mode) ,
18086. i486 Pentium , Intel , .
II (protected mode) , IA-32, i80286. -, J8086 ( ), . -
.
8086 - , (18086), . (virtual 8086 mode) , . 18086 - ,
.
(System Management Mode, SMM) , Pentium. -
, -
.
SMI - (AdvancedProgrammable Interrupt Controller, APIC), - . -
.
.
.
,
.
, .
, -
, -
. , IA-32 - ,
-
.
-
1-32 43
.
, .
is , :D EAX/AX/AH/AL, EBX/BX/BH/BL, EDX/DX/DH/DL, /
CX/CH/CL, /, ESI/SI, EDI/DI, ESP/SP , ( -) ;
D CS, DS, SS, ES, FS, GS ;
ST(0), ST(1), ST(2), ST(3), ST(4), ST(5), ST(6), ST(7) - , -
( 17); MMX- , MMXl, MMX2, , 4,
5, , 7;D MMX- XMMO, XMM1, 2, ,,
4,5,,7;D ( FLAGS/FLAGS -
EIP/IP) , .
, , -
, , -
, .
, IA-32:D CRO.. .CR4 -
;D GDTR, IDTR, LDTR TR -
-
; DRO.. .DR7 -
;D MTRR -
-
; - MSR -
, ,
.
? - 32- , - . ? , 16- Intel - i8086. i486 Pentium 32- .
-
44 2. - IA-32 Intel
, , , 18086, , -
(extended). -
: , MMX--. .
-
, , -
. -
-
.
:
;i ;il .
,
,
,
. ESP. - - ,
.
(. . 2.5). . , - 16- 8- . 16 . , , 16-- Intel. , -
- ( ): - (Accumulator register) EAX/AX/AH/AL
,
; (Base register) EBX/BX/BH/BL -
;II - (Count register) ECX/CX/CH/CL , -
. --
. ,
LOOP /;
(Data register) EDX/DX/DH/DL, ///AL, ( - , ).
-
1-32 45
-
, ,
, 32, 16 8 : (Source Index register) ESI/SI -
-;il (Destination Index register) EDI/DI
-.
-
, . -
,
:
;; (Stack Pointer register) ESP/SP ;
II (Base Pointer register) EBP/BP - .
.
-
, . -
, .
-
. -
(. ) , , , , -
.
Intel . , : , -. IA-32 ,
. -
-
, . -
IA-32 CS, SS, DS, ES, GS, FS, .
ii . - (Code Segment register) CS. - , ( - ).
ii . (Data Segment register) DS, .
, . -
: -
-
46 2. - IA-32 Intel
.
(Stack Segment register) SS, .
.
, -
, DS. , -
.
, DS, -
-
. -
(Extension Data Segment registers) ES,GS, FS.
(. . 2.5), - , ,
:
ii - EIP/IP;it FLAGS/FLAGS.
-
.
- (Instruction Pointer register) EIP/IP 32(16) CS . ,
, -
,
.
EIP/IP. (flag register) EFLAGS/FLAGS 32(16) . -
. EFLAGS/FLAGS - FLAGS i8086. . 2.6 EFLAGS.
, EFLAGS/FLAGS .
EFLAGS/FLAGS 8 . .
EFLAGS . -
, -
.
-
1-32 47
eflags (0..31) flags (0. 15)
-
:.
-
21 20 19 18 17 16 15 14 13 12 10 09 08 07 06 05 04 03 02 01 00
ID VIP VIF AC VM RF NT IOPL OF DF IF TF SF ZF AF PF CF
: I : I |
8086
( 18086)
. 2.6. eflags
(carry flag) CF:1 -, 7-, 15- 31- ; .
(parity flag) PF:18 ( 8 - ) ;0 8 .
(auxiliary carry flag) AF , BCD-. - :
1 3 3 ;0 ( ) - .
(zero flag) ZF:1 ; .
-
48 2. - IA-32 Intel
* (sign flag) SF ( 7,15 31 8-, 16- 32- ):
1 1;0 0.
(overflow flag) OF :
1 - ( 7,15 31 8-, 16- 32- );0 .
- (Input/Output privilege level) IOPL
- .
(nested task) NT , -
.
( ) EFLAGS/FLAGS (directory flag) DF. FLAGS . DF : (DF = 0) , , (DF =1). DF CLD ( DF) STD( DF). DF - -
.
EFLAGS/FLAGS 8 , -, , , -
8086. ,
. -
.
II (trace flag) TF - :
1 1 - ( , );0 .
(interrupt enable flag) IF () ( INTR):
1 ; .
-
1-32 49
is (resume flag) RF .
8086 (virtual 8086 mode) VM 8086:
1 8086; .
(alignment check) AC - .
AM CRO. , Pentium .
, 2 4, - ,
.
(virtual interrupt flag) VIF, - Pentium, ( - v-) IF. VIF - VI .
ii (virtual interrupt pending flag) VIP, Pentium, 1 - . v- VIF.
* (identification flag) ID , - CPUID. , ,
CPUID.
, (. . 1.2), ( - ). - . 0 1. . -
, -
.
. ( ), - . -
. i486 Pentium 232 - 1 (4 ). Pentium Pro/II/III/IV 0 236 - 1 (64 ).
. , -
.
. ,
. , -
:
-
50 2. - IA-32 Intel
* ; ; ; .
.
-
(), , - .
* -
. -
(4 -). , -
, . -
i486 Pentium - 4 .
,
,
. -
, -
.
, , -
Intel, 18086, . ,
(, - ), . , -
. .
-
, -
. , . ,
-
,
. -
, 0 , - . , , -
, .
-
(. 2.7). - :
II ;
-
1-32 51
; .
)
6-1 (232-1)
i486/PentlumPentium Pro/ll/lll/IV
\
) 236-1 (232-1)
^I| | '
I ^
^-
I . ' '
^fS. *_ ^
*^
.
.f
ztj
)
|
: [
|
1236-1 (232-1)
. 2.7. Intel
-
. .
, . -
. -
. -
-
52 2. - IA-32 Intel
( ). , , .
. -
,
. -
, , -
-
.
.
* 0 1 . - , i8086 20 .
64 . 16- 18086. , , - 16- , 216 - 1, - 64 .
II - ( ) - .
-
. ,
, ( ) - 16- , . , ,
216 - 1. , , 0-64 . , 1 , 64 . , - 16 -. 20- - 4 . .
20- -, . {-), -, 16- . -
. ,
20 . -
, -
(. 2.8).
-
1-32 53
15
\ 15
15
si di
:
15
ds
es
fs
. 2.8.
,
: , -
. , ,
: / - / . , , -
, ,
. , - -
i486 Pentium (32 ) 20-- .
, 12 , 64 , .
:
, 16 ( 4 ), , , , -
; 64 ; .
, -
, , , ,
-
54 2. - IA-32 Intel
, Windows Linux.
-
.
.
. .
-
. -
. ,
Intel , . , -
, -
. -
,
. . -
:
;II ;ii (
); ( ); .
, -
.
.
, 8- (-
(16...19)base 3 , v ' 1
(31... 24)V
G D U limit 2i i i i
/ V
AR
.base 2,
(23... 16)63 55 47 39
(0...15)base 1
(0...15)limit 1
31 15 . 2.9.
-
1-32 55
) , . . 2.9 .
:
limit_l limit_2 20- , ;base_l base_2 32- , - ;AR , ;D ( 3);G . , -
4 . , : , (-) ? . i80286. 24- , , 16 - .
24 16 . i80386 32- , -
. .
, .
, -
4 , . ,
20 , 1 ? G (. . 2.9). G = 0, , G - 1, . 4 . , - Offfffh, 1 - 1 4 = 4 .
, -
, limit. , -
. AR, - . AR dpi R/W,C/ED I, . dpi . , -
-
, 1, 2 3. 0. - (- ) , .
-
56 2. - IA-32 Intel
, ,
.
, .
:
(Global Descriptor Table, GDT), GDTR;
II (Local Descriptor Table, LDT), - LDTR;
(Interrupt Descriptor Table, IDT), IDTR. ,
. , , -
; - .
, . 2.7, , . -
. , ,
(GDT LDT). IA-32, ,
., -
.
.
. ,
, . . -
. , -
- , ,
.
ii : , -
;D ; ; ; .
32 . - .
* .
FLAGS EIP. EFLAGS
-
57
. EIP . ,
, .
:
D , i8086 ;
D , i80286;D 18086 18086,
.
,
.
-
3
IA-32 IA-32
-
, -
. , Pentium IV 300 - .
, , , -
.
-
-
, . -
.
-
.
, -
, -
.
. -
. -
, ,
.
-
IA-32 59
,
, , , -
.
. -
,
() , - -
, .
, -
, , , .
-
, -
.
, -
.
-
, .
IA-32 -
. -
.
IA-32 . IA-32 - 15 . , . . 3.1 .
-
? - :
e b x , eax MOV .
:
88 D8 8 . MOV:
mov e c x , 128 -
128. :89 00000080
9. , -
. , (MOV), (8 9). . -
, ,
-
60 3. IA32
-|| -' >-
|
-
IA-32 61
. -
, .
,
, , .
. -
. . -
.
,
.
* ,
. -
.
:
D 2Eh CS;D 36h SS; DS; 26h ES;D 64h FS;D 65h GS.
( - ). - . : - (REP OF3h), , ^ (REPE/REPZ OF3h, REPNE/REPNZ OF2h), ,
.
LOCKtf (- OFOh) . -
. LOCKfl - , --.
ii ( 67h) : 16 32 . , , .
16 , , 16-- 16- - (. . 3.1). - 2 (. . 2.7 2.8) . 32 , , 32- , 32- -
-
62 3. IA32
32- (. . 3.1). - -
. , -
.
( 66h) -, (32 16 ), - .
-
? , ( ) - . -
( use!6 use32 ). 16- 16 . 32- 32 . -, . , -
16 , - 67h ( !) 32 . -, 32 , - 67h ( !) 16 .
.
. ,
(16 ) (32 ), -, 16 32 . .
18086 - 16 . - D . D = 0, 16 , D = 1, - 32 . - use!6 use32 .
-
32- , - 64 . -
32- ( , ). -
. ( ) -, . 3.1. , - D . , -
-
IA-32 63
D, 18086.
,
.
: 16 - SP, 32 ESP. :
16 16--, 32 - 32-.
3.1.
00001111
66h-
-
+
+
-
-
+
+
67h-
+
-
+
-
+
-
+
1616323232321616
1632163232163216
, -
, OFFh. - ,
.
, , -
. .
mod r/m. , -
. ,
(. . 3.1). -, ,
, . 3.2.
, . -
, , . -
.
-
64 3. IA32
3.2.
d
s
W
reg
1
1
1
3
: 0 reg ( ), /; 1 ( ), r/m, reg. sib
8- 16 32 . () 8-
, : ,
, : 0 8 ; 1 16 16-- 32 32-
, .
w, w
(. )
-
, ,
(. ). mod r/m mod r/m, , - . Intel . ,
. IA-32 , - . , mod r/m - (, ), - (. 2). mod r/m (. . 3.1).!' mod ( ) , -
( ). mod - r/m, . mod r/m - 32 , 24 - . , mod = 00, - / .
, . mod = 01, ,
/ . mod = 10, - , ( , )
-
IA-32 65
/ . mod = 11, . - mod , - .
* reg (3 ) (. 3.3 3.4), - ,
( 11 ). / mod , -
( mod = 11), , (- ).
3.3. reg ( w ) reg000001010Oil100101no111
w = 0ALCLDL
BL
AHCHDH
BH
w = 1AX/EAXCX/ECXDX/EDXBX/EBXSP/ESPBP/EBPSI/ESIDI/EDI
.4. reg ( w ) reg000001010
100101
111
1 6-
DX
SP
SIDI
32-
EDX
ESP
ESI .EDI
reg 16- 32-- , Intel - 32- .
Intel , . -
. , , MOV - , .
3 . 256
-
66 3. IA32
. reg (. . 3.3 3.4), r/m (. ). d, . , : reg , / . mov - ,
:mov abll,ax -. abll
mov ax,abll ; abll ,
d:' MOV abll,ax d = 0;-.. MOV ax,abll d = 1.
-
. Intel -, mod r/m (. 3.5 3.6). , -
, , ,
.
3.5. mod r/m (16- )8!632/ ( )reg
[BX+SI][BX+DI][BP+SI][BP+DI][SI][DI] 16[][+81]+_8[+1]+_8[+81]+_8[+1]+_8[81]+_8
mod00000000000000000101010101
r/m000001010O i l100101
111000001010on100
ALAXEAX0000
CLCXECX1001
DLDXEDX2010
BLBXEBX3on
AHSPESP4100
CHBPEBP5101
DH
SIESI6110
BHDIEDI7111
mod r/m00010203040506074041424344
0809OaObOcOdOeOf48494a4b4c
10111213141516175051525354
1819laIbIcIdleIf58595a5b5c
20212223242526276061626364
28292a2b2c2d2e2f68696a6b6c
30313233343536377071727374
3839
3b3c3d3e3f78797a7b7c
-
IA-32 67
[1]+_8[]+_8[]+_8[+81]+_16[+1]+_16[+81]+_16[+1]+_16[81]+_16[1]+_16[]+_16[]+_16EAX/AX/AL
ECX/CX/CLEDX/DX/DL
EBX/BX/BLESP/SP/AH//
ES1/SI/DHEDI/DI/BH
mod010101101010101010101011
1111
11111111
r/m101110111000001010011100101110111000 .
001010011100101
111
mod /4546478081828384858687
cl2
4
5
7
4d44f88898888d88f89
cb
cd
cf
5556579091929394959697dOdld2d3d4d5d6d7
5d5e5f98999a9b9c9d9e9fd8d9Da
DbDCDdDe
Df
656667aOala2a3a4a5a6a7eOele2e3e4e5e6
e7
6d6e6fa8a9aa
abac
adae
afe8e9ea
ebec
ed
ef
757677bOblb2b3b4b5b677
f2Gf4fSf6f7
7d7e7fb8b9babbbebdbebff8f9fafbfcfdfeff
.6. mod r/m (32- )r32/ ( )reg
[][][EDX][][sib] 32[ESI][EDI][]+_8[]+_8[]+_8
mod0000000000000000010101
r/m
001010on100101
111000001010
0000
1001
EDX2010
3011
ESP4100
5101
ESI6
EDI7111
mod r/m0001020304050607404142
0809
Ob
Od
Of48494
1011121314151617505152
1819111Id1If58595
2021222324252627606162
28292222d22f68696
3031323334353637707172
3839
3d
3f78797
-
68 3. IA32
3.6 ()
[]+_8[sibj+ 8[]+_8[81]+_8[1]+_8[]+_32[]+_32[]+_32[]+_32[SIB][]+_32[81]+_32[1]+_32EAX/AX/ALECX/CX/CLEDX/DX/DLEBX/BX/BLESP/SP/AH//ESI/SI/DHEDI/DI/BH
mod0101010101101010101010101011
11
11
11
11
11
11
r/m011100101
111000001010011100101
111000001010011100101110111
mod r/m4344
4546478081828384
858687
cl2
4
5
7
4
4
4d44f .88898
888d88f89
cb
cd
cf
53545556579091929394959697dOdld2d3d4d5d6d7
5b5c5d5e5f98999a9b9c9d9e9fd8d9Da
DbDCDdDe
Df
6364656667aOala2
a3a4
a5a6a7
eOele2
e3e4
e5e6e7
6b6c6d6e6fa8a9aa
abac
adae
afe8e9ea
ebec
ed
ef
7374
757677
bO
blb2
b4b5b677
fi)fl
u
f4f5f6
7b7c
7d7e
7fb8b9babbbe
bdbebfref9faftfcfdfeff
mod r/m 87h. ( -, ) , 87h, . - 16- -, mod r/m -. mod. mod r/m , , 87h, reg /. , - .
, w
(. ). 32- mod r/m -
- sib(. , ).
-
IA-32 69
. -
.
:
sreg86 , 18086/88 i80286;
sreg386 i80386 . ,
: sreg86 (. 3.7), a sreg386 (. 3.8). 3.7. sreg86
sreg8600011011
ESCSSSDS
3.8. sreg386 sreg386000001
010Oil100
101 GS
ESCSSSDSFS
MOV - . . 3.9.
3.9. MOV creg000001010Oil100101
111
CRO
CR2CR3CR4
-
DRODR1DR2DR3
DR6DR7
-
70 3. IA32
,
, (Scale-Index-Base sib) - . sib - 01 10 mod / = 100. sib (. 3.10).li (ss)
index, sib. ss 1, 2, 4 8. . -
, , -
13. index , -
.
base , - . -
.
3.10. sib (32- )32 (base)
[][][EDX][]
[][ESI][EDI][*2][*2][EDX*2][*2]
[*2][ESI*2][EDI*2][*4]
(ss)0000000000000000010101010101010110
(index)
000001010O i l100101
111000001010O i l100101110111000
EAX000
001EDX010
OilESP100
*
101ESI110
EDI111
sib
0008101820283038404850586068707880
0109111921293139414951596169717981
02OA121A222A32
424A525A626A727A82
03OB13IB232B333B434B535B636B737B83
04
141C242C343C444C545C646C747C84
05OD15ID252D353D454D555D656D757D
85
06OE16IE262E363E464E565E666E767E86
07OF17IF272F373F474F575F676F777F87
-
1-32 71
[*4][EDX*4][*4]
[*4][ES1*4][EDI*4][*8][*8][EDX*8][*8]
[*8][ESI*8][EDI*8]
(SS)10101010101010
11
1111
(index)
001010O i l100101
111000001010on100101
111
sib
889098
8
8
8DOD8
8FOF8
899199191919D1D919F1F9
89292
2
2
D2DA2
F2FA
8939A3
D3DB
F3FB
89494
4
4
D4DC4
F4FC
8D959D5AD5BD5CDD5DD5EDF5FD
89696
6BE6
D6DE6
F6FE
8F979F7AF7BF7CFD7DF7EFF7FF
sib , - .
(base) . 3.10 - (*). _32 , mod - 00, [] . - :
!_32[], mod=00;il _8[][], mod=01;II _32[][], mod=10.
8-, 16- 32- , ( -) .
, -
8-, 16- 32- . , -, mod r/m.
, -
, -
.
( 5) - .
-
7? 3. IA32
,
Pentium IV IA-32 300 . (. 3.2).
Pentium IV
-
. 3.2. Intel (Pentium IV)
, -
,
. :
; IA-32 -
; .
7-10 12 (-), (. 3.3).
^
,
-
-
. 3.3.
-
. -
IA-32 ( Pentium IV) -, .
,
(. 3.2).
-
73
- , -
.
I - , -
. -
.
-
. -
, .
.
-
. IA.-32 -, Intel - , ,
.
II .
iii - .
.
81 , .
II 1-32 -. ,
.
-
4
, -
.
. -
, , ,
,
.
, -
. .
, -
,
. .
, , ( ), - . -
. .
I , V , X , L , , D -, .
-
. ,
, -
, . :
-
75
DLXXVII = 500 + 50 + 10 + 10 + 5 + 1 + 1 = 577. :
CDXXIX = 500 - 100 + 10 + 10 - 1 + 10 = 429. -
. .
( ) . - 0 . . ,^) - , ak ( k = 0, ..., - 1) . -
:
Aw - an_tan_2...
, , ak < . -
:
() =
-i -"'1 + ^'"~2 + ~- + al-pl + a0-p
a, (4.1)
( ), , .
, (- , ).
-
, -
.
{0,1}, () 2. n-
(4.1):(2) - -1' 2"-' + _ 2 ' 2-> +..- + v 2' + V 2. (4-2)
, ,
,
. -
, . ,
10100111. .
(4.2), , :1 + 0 26 + 1 25 + 0 24 + 0 23 + 1 22 + 1 21 + 1 2.
, .
(. 4.1) , , .
() ( ).
-
76 4.
1 1 1 1 1 1 11 1 0 0 1 1 0 1 1
f 1 1 0 0 1 0 1 0 1
1 1 11 1 0 1 0 0 1 0 0 1 10 0 1 1 1 0 1 1 0 1 1
1 1 0 0 1 1 0 0 0 0 1 0 0 1 0 1 1 1 0 0 0. 4.1. -
(. 4.1). 4.1.
1234567
89101112
248163264128256512102420484096
{0,1, 2,..., 9, , , , D,, F} () 16.
-
(4.1):(,6) ,-, ' 16"~' + -2 ' 16"~2 +" + , ' 16' + ' 16-
, f45ed23c:
15 167 + 4 166 + 5 165 + 14 164 + 13 163 + 2 162 + 3 16' + 12 16. , .
(. 4.2). 4.2.
0
1
2
0000
00010010
0
1
2
-
77
34
567
89101112
13141516
01000101
01111000100110101011110011011110111110000
34
56789,
,
,
D,d,
F,f10
, -
. . 4.2 0-16 . -
. -
, , , ,
( ). - :
-
78 4.
> - _, ' -1 +
_2 10-' + ... + GI 10' + 0 10. , (|0) = 4523 :
.
-
,
. . -
,
Intel .
.
, -
: - , .
(4.1). .
.
-
.
1. 2. q .2. 1 q 0,
, , -
1, ( ) 2 .
3. 1 q 0, . , .
.
, 247)0 . 4.3. (111101112) .
.
-
, . 4.2. , [, - e4d516, 1110 0100 1 101 01012.
-
79
. 4.3.
-
-
.
1. 16. q .2. 1 q 0, ,
1.3. q 0, . -
, .
.
, 32 767
. 4.4. (7fff16) .
'
-
80 4.
, -
.
, . 4.2. , -
:
111001011010111101011000110110001111010101011012. :
0111 0010 1101 0111 1010 11000110 11000111 1010 1010 1101. -
:
7 2 d 7 a c 6 c 7 a a d .
72d7ac6c7aad1(i.
, . -
, .
, -
, -
. -
. (4.1) :
\,^-"1+-2-"2 + -
...+ at-pl + 0-" + _, ~
1 +
2-2 + ... +
-~
. (4.3) .
1 -
, :
110100,010010112. (4.3):
110100,010010112= 1 - 23 + 1-2 4 + 0 - 2 3 + 1 22 + 0 21 + 0 2 + 0 2 ~ ' +
+ 1 2-2 + 0 2-3 + 0 2~4 + 1 2-5 + 0 2-G + 1 2"7 + 1 2~8. :
1 . 25 + 1 . 24 + 0 23 + 1 22 + 0 2' + 0 2. . 4.3.
-
81
4.3. 2
1
2
3
4
5
6
.7
0,5
0,25
0,125
0,0625
0,03125
0,015625
0,0078125
. 4.3 2
110100,010010112.
2 , -
:
Idf2,ale4 |6. (4.3):
Idf2,ale416 = 1 163 + 13 162 + 15 21 + 2 16" + 10
+ 14- 16-3 + 4 - 16+ 1 16 2 +
16 (. 4.4). 4.4. 16
1
2
3
4
567
0,0625
0,00390625
0,000244140625
0,0000'! 52587890625
0,00000095367431640625
0,000000059604644775390625
0,0000000037252902984619140625
-
, , .
-
82 4.
3 -
:
.
1. , .
2. - .
3. Bv
.
4. , , , . -
, .
3. . -
108,40610. 108,40610 -
(. 4.5).
. 4.5. 108,406
108,40610 (. 4.6) - .
:
108,40610 = 1101100,011001111. -
! ,
-
83
.406
.972
. 4.6. 108,406
.
.
. , ,
. , -
. . 4.7 - (108,40610) .
108,406 = 110() 1100,
1100, 0110011101100111
1= 6,6781 ()8
. 4.7.
, .
? 0 . , 0.
, -
. , .
,
, .
, - -
. 0, - , .
1, , , . , .
-
84 4.
( 1 0 ) , " . -
, -18510. - 101 1 10012. , . .
,
-128...127. . :
000000001011 10012-> 111 111 11010001 102. :
1111 11 1 1010001 102 + 00000000000000012 = 11111 11 1010001 112. 11111111010001112. -
-185
.
-
,
. .
1. .2. .
,
:
11010001 112-> 00000000101 110002. :
0000000010 1110002 + 00000000000000012 = 00000000101 110012 = |-185|. ,
. -
, , , -
.
.
, -
, -
.
: , .
.
: -
, -
.
-
5
-
( )
-
, . -
-
,
. -
.
. , ,
, : -
, ,
. . ,
-
86 5.
.
IA-32.
, -
.
-. , -
: , . -
. -
Intel ( IA-32). ,
. , -
, .
* () . -
.
;! -
, .
-
. .
11 , -. .
-
. -
-
, ,
,
.
-
, -. , -
, . -
,
, - . -
.
. 5.1,5.2 5.3 - .
? : () (). , - . , ,
. -
. , -
, ,
-
87
. 5.1.
| [_1 f-
>.
-
88 5.
() - -. -
.
, ,
, . ., ,
, , .
, -
, -.
() , - , .
, :9 , -
;ii =>,
; -
, .
- -
, . -
-
-, .
8 () -, .
-
. ():=>|+|=> | =>0|1|2|3|4|5|6|7|8|9
:
9 ,, ( );
+|-|0|1|2|3|4|5||7|8|9 ( ), - ;
* (|) .
-501, -: => => => 1 =>1 => 01 => 01 => 501
(. . 5.1-5.3) , - -
, .
-
89
,
:
ii 5__ - Z, - z, ;decdigit 0 9; _, ?, @, $, &;: ., [, ], (, ), , {, }, +, /, *, %, !, ", ", ?, \, = #, . , , -
.
.
. -
:
(AL, , BL, , CL, , DL, , , , , , , , DX, EDX,, EBP, SP, ESP, DI, EDI, SI, ESI, CS, DS, ES, FS, GS, SS, CRO, CR2, CR3, DRO, DRl, DR2, DR3,DR6, DR7);
(BYTE, SBYTE, WORD, SWORD, DWORD, SDWORD, FWORD, QWORD, TBYTE, REAL4,REALS, REAL10, NEAR16, NEAR32, FAR16, FAR32, AND, NOT, HIGH, LOW, HIGHWORD,LOWWORD, OFFSET, SEG, LROFFSET, TYPE, THIS, PTR, WIDTH, MASK, SIZE, SIZEOF, LENGTH,LENGTHOF, ST, SHORT, TYPE, OPATTR, MOD, NEAR, FAR, OR, XOR, EQ, NE, LT, LE, GT, GE, SHR,
() , . , -
.
-:
=> 5__ | 5__ | 5__ | |
=> 0| 1 | 2 | 3 |4| 5 | 6| 7| 8| 9 => _|
, -
.
, _, ?, $, @. - .
255 (247 MASM), 32, . - ( TASM) /mv. ,
( ). ( TASM) /mu, /ml,/mx (. http://www.piter.com/download).
, -
. :
=> [[ < s t e x t > ]] < s t e x t > = | => | ___ => " | '
-
90 5.
, -
. -
. -
- .
-
:
= | 0 = | =>| | | => 0| 1 12 | 3|4|5 |6| 7|8|9 = > a | b | c | d | e | f | A | B | C | D | E | F
(h) (0) - . ,
. ,
1578 1578h , . -, fe023? , , , -
.
, , -
h. Ofe023h: => b| => 0|1
,
, . :
, ,
(). - , (-). . , . -
ASCII, (;), , (. . 5.1-5.3). -, , .
,
, . -
, . -
, , -
( ). :
;ii ; ;
-
91
* ;
.
,
, -
. -
.
,
:
,
;
-
92 5.
add [ s i j . i m d ; [ s i ] : = [ s i ] + 3 ,; imd -
mov al,5; al :=5, 5 - , -
MOV - ADD.
II : (. 5.4). :mov ax,0000hmov ds.axmov ax,ds:0000h
0000:0000 MOV .
. 5.4.
, -
.
( ) ( ). , ' -
.
. -
:
data segmentmas_w dw 25 dup (0)codesegment
lea s i , _ m a s _ w ; mas_w - mas_w , -
25 . -
.
. $. ,
-
93
, -
. , ,
, -
. -
-
. . ,
, -
, ,
-
, -
.
:
jmp $+3 ; moveld ; eld 1 mov a l , l
, $+3, , , -
,
. JMP . , ,
. -
, . -
, -
(. 3 ) .
.
-
:
D 32- , , , EDX, ESI, EDI, ESP, EBP; 16- , , , DX, SI, DI, SP, ; 8- , AL, BH, BL, CH, CL, DH, DL; CS, DS, SS, ES, FS, GS;D CRO, CR2, CR3, CR4, DRO, DR1, DR2, DR3, DR6, DR7 (. -
MOV )., add ax,bx - . dec si SI 1. :
mov a l , 4mov dl,pass+4add al.dl
4 al pass+4 - dl
-.
-,
-. -
- 64 . - . -
-.
-
94 5.
- ( -), IN OUT. ,
in al,60h; 60h, -,
8,16 32 , . IN OUT . - -
- , , AL. . -
IN OUT DX. - . ,
mov dx,20hmov al,20hout dx.al
20h dx 20h al 20 20
tl , .
13.* ( ) -
( 13).II , . -
. -
, .
,
, . -
, , -
.
. 2.8 (. 2), . , -
4 16- , - : , .
,
-
.
(. 3), 8, 16, 32 . , .
.
-
. -
-
95
, -
8-, 16- 32- , - IP/EIP. - , .
,
jc ml ; ml, cf = 1mov al,2
m l :
,
( mov al,2) - JC.
si ,
. -
-
.
. ,
mov a x , w o r d ptr [0000] ; ;ds:0000
. -
-
(. 3). , - , , ,
. ,
data segmentperl dw 5
data endscode segmentmov ax,datamov ds.ax
mov ax,perl ; perl ( ds:0000) ,
mov a x , w o r d ptr [0000] . -
,
, ,
mod r/m , , sib. :
9 , , ;II ;ii ; ; .
-
96 5.
() , SP/ESP /( ).
-
. , mov ax,[ecx] - ,
. -
, -
. , , -
.
()
.
, -
, () .
-
.
, mov ax,[edx+3h] , EDX + 3h. mov ax,mas[dx] , DX mas ( , - , -
).
-
. -
.
, -
. -
. ? - 3. sib. (. IA-32 3) , . (ss), - . , mov ax,masfesi*2] - mas+(esi)*2. , , -
. -
, ,
1, 2, 4 8 .
-
97
: -. -
, . :
mov , [ e s i ] [ e d x ]
, (ESI) + (EDX).
-
.
: , - . , mov eax,[esi+5][edx] : (ESI) + 5 + (EDX). addax,array[esi][ebx] -, array + (ESI) + ().
, -
-
-.
-
,
. -
. -
-
.
(ASM) - . -
, -
(. 5.1). .
, -
.
5.1.
LENGTH, SIZE, WIDTH, MASK, (, ), [, ],
PTR, OFFSET, SEC, TYPE, THISHIGH, LOW+, - ()*,/,MOD,SHL, SHR
123456
&-
4 . 256
-
98 5.
5.1 ()
+, - ()EQ, NE, LT, LE, GT, GENOTANDOR, XORSHORT, TYPE
89
10
11
12
13
. (http://www.piter.com/download) MASM.9 (. 5.5). -
(+) (-), - (*), (/), (MOD). . 5.1 6, 7, 8.,
tab_sizeequ 50 ; size_el equ 2 ;
; mov cx,tab_size / size_el ; " / "
I _1|_2
. 5.5.
-
(. 5.6). ,mask_b equ 10111011
mov al.mask b shr 3 ;al=00010111
. 5.6.
-
99
-
(. 5.7 . 5.2). ,
. , 1, -, , 0. ,
t a b _ s i z e e q u 30 ;
mov al , tab_size ge 50 ; alcrop al,0 ; tab_size < 50. je ml ; mlmi: ...
, tab_size 50, AL Offh, tab_size 50, AL . AL FLAGS/EFLAGS. JE ml.
. 5.7.
5.2.
Eq
Ne
Lt
Le
GtGe
, _1
, _1
, 1
, 1
, 1
, _1
_2
_2
_2
_2
2
_2
(. 5.8). , , . ,
flags equ 10010011mov al,f lags xor Olh; al = 10010010; al flags
; , -
, 9.
-
100 5.
I _11 -|_2[-1
lanA-/or)--(xon-
. 5.8.
. . 5.9, ..! _2, . ,
mov a x , m a s [ s i ] ; mas + ( s i )
{)-}_2 [-() _1
. 5.9.
:
, . -
, -
mas + (si) , - mas
SI.
* PTR ( ), (. 5.10). : BYTE, WORD, DWORD, QWORD,TBYTE, NEAR, FAR ( , ).,
d_wrd dd 0
mov a l . b y t e ptr d_wrd+l ; . d_wrd -. , -
, (, )? mov aULwrd+1, . PTR .
||(ptr)| |. 5.10.
: -
, SEGMENT (. 5.11).
-
101
]
. 5.11.
, . -
(. 2) , - , .
? , -
CS, . -. CS . -
CS 16 ( ) 20- 16- IP. - , .
, ( , ), , , - , DS. - , -
.
? (. 2). - SP . ( , ) , - ,
SS . ? (. 1) - ,
. -
. , , , - .
(. IA-32 3). , , .
(, , ) -
-
102 5.
, .
, -
. ,
, -
. 3 .
.
, ( , ) , . -
, , .
,
CS:IP. . (:). , ,
. ,
.codejmp metl ; , ind
; ind db 5 ; ,metl:
mov al,cs:ind ; ,;
.
II - , .
(.) 13 -.
II , -
, , , -
(. 5.12).
. 5.12.
-
, -
(. 5.13).
. 5.13.
,
.datapole dw
-
103
.code
mov ax.seg polemov es.axmov dx,offset pole es:dx pole
-
. ,
, -
, . 2 3 -. , -
, :
is ; ; ; .
, ,
/ , .
-
, . 5.14.
-[SEGMENjJr
-
-
.
. 5.14.
, ,
, .
,
. ,
-
104 5.
, -
. , -
. -
SEGMENT. . ( ) -
, -
. ,
i80x86 . - . PARA:D BYTE .
;D WORD , ,
() 0 ( - );
DWORD , , - () 0 ( - );
PARA , 16, - Oh ( );
PAGE , 256, OOh ( 256 );
MEMPAGE , 4 , - OOOh ( 4 ).
( ) -, ,
.
PRIVATE. - :
PRIVATE ;
PUBLIC . .
() , , -, ,
; COMMON
, . -
; AT xxxx (
, 16, -
-
105
0). - .
( , , - ), . ,
,
.
; STACK .
-
SS. STACK () - PU BLIC , SS - . SP .
, , -
. , STACK -, SS (- , DS).
* ( ) , -
.
( , , -
). ( code) . -
.
^ . i80386 16- 32-. - . -
:
USE16 16- . 16- ., 64 -;
USE32 32-. - 32- . 4 .
, SEGMENT ENDS .
, , -
ASSUME, - . 5.15. , -
-
106 5.
. , -
, .
-
, _ , -
SEGMENT - NOTHING. NOTHING, , - . NOTHING ; -
.
. 5.15. ASSUME
MASM TASM. .
, , -
, . MASM TASM .
, , - -
-
. -
MODEL, ASSUME (-
-
107
ASSUME ). MODEL , ,
( DS).
. -
: Hello World! No war andbomb! Let's live friendly and learn assembler language.. 5.1 - , 5.2, -, .
5.1. data segment para public 'data'message db 'Hello World! No war andassembler language. $'data endsstk segment stack
db 256 dup ('?')stk endscode segment para public 'code'main proc
assume cs:code,ds:data,ss:stkmov ax,datamov ds.axmov ah,9mov dx,offset messageint 21hmov ax,4cOQhint 21h
main endpcode endsend main
bomb! Let us live friendly and learn
main
ds
4c00h 21h main
main
5.2. TASM - masm, MASM -
'Hello World! No war and bomb! Let us live friendly and learn
masmmodel small.datamessage dbassembler language.stack 256h.codemain proc
mov ax,@datamov ds,axmov ah,9mov dx,offset messageint 21hmov ax.4c00hint 21h
endpmainend main
main
ds
400 21h main main
MODEL . 5.16. MODEL _. -
. -
,
,
(. 5.3).
-
108 5.
\ MODEL
. 5.16. MODEL
5.3.
( MASM).CODE [].DATA
.CONST
.DATA?
STACK []
.FARDATA []
.FARDATA? []
.
near 1
()
.
near
.
[]
far
far
[] , . , -
,
,
.
MODEL - ,
-
(. ). TASM (. 5.4). MASM (. http://www.piter.com/download). 5.4. , MODEL
codedatafardata
near
far
-
109
fardata?
curseg
stack
far
far
5.2, - , @data. .
MODEL , MODEL , , - , -
. . 5.5 - MODEL
5.5.
TINY
SMALL
MEDIUM
COMPACT
LARGE
FLAT
near
near
far
near
far
near
near
near
near
far
far
near
DGROUP.
,
DGROUP.
,
.
far. ; near
; far ,
32- ( )
MODEL - (. 5.6). 5.6.
use 16 16-( i80386 180486)
-
110 5.
5.6 ()
use32
dos
32-( i80386 J80486) MS-DOS
_
.
-
. 15 .
-
. ,
-
. -
, , -
,
. -
.
, -
. ,
, . -
. TASM ASM : . -
, -
.
.
,
, -
,
. TASM MASM ,
.
. -
(. 5.17). ,
7, 0 .
-
111
: :
63 47 31 15
127 95 63 31
. 5.17.
, -
. 16 ; 0 15. , - , , , 15- , . Intel - .
.
.
(32 ), - .
31. , , , , 31- , . - . .
-
.
(64 ), - .
63. , , , , 63- , . .
.
.
* 128- . Pentium III. . ,
,
. 5.18 ( ). 8,16 32 .
7, 15 31 . ,
-
112 5.
| [3
(||3|
31 15 7 0 31
iii i
ii
ii
ii
15 7 0
iii
4 15 7 0 31 15 7 (BCD) (BCD) ||| - | - |OOOO|BCD|OOOO|BCD| |BCD|BCD| - | - |BCD|BCD|BCD|BCD|
15 7 0 15 7
| | j J | |31 15
| | ^ |47 31 15 7
()
| ( ). 5.18.
. .
:
8- -128 +127; 16- -32 768 +32 767;D 32- -231 +231 - 1. 8,16 32 . :
D 0 255; 0 65 535; 0 232 - 1. :
32- , ; () , ;
48- , :16- () 32- .
,
4 .
-
113
, -
-
.
32 .ii - -
0 9. . -
.
^ - -
0 9 . - . ( 4-7) -.
s .
, .
17.* MMX- Pentium MMX/II/HI/IV.
Pentium MMX. .
9 MMX- Pentium III/IV. - Pentium III. - .
. -
-
. , , -
.
, -
. (-, ) ; , , -
. -
. 5.19.
|
^
L
1 _
*
-pup) 0~|
. 5.19.
-
114 5.
.
* (?) , ,
. , -
.
,
. , -
, , -
, .
,
. ,
, .
18 -, .
TASM MASM - , -
, .
DB 1 . DB - :
D , -128...+127( ) 0...255 ( );
8- , HIGH LOW;D , -
( , ).til DW . DW
:
,
-32 768...32 767 ( ) 0...65 535 ( );D , 16 ,
16- ;D 1- 2- , .
! DD . DD :D ,
-32 768...+32 767 ( i8086), 0...65 535 ( 18086), -2 147 483 64S...+2 147 483 647 ( 1386 ) 0...4 294 967 295 ( 1386 );
D , 16- 16- ;
4 , .
-
115
DF DP 6 . DF DP : ,
-32 768...+32 767 ( 18086), 0...65 535 ( 18086), -2 147 483 64S...+2 147 483 647 ( 1386 ) 0...4 294 967 295 ( 1386 );
, 32 ( i80386) 16 ( Intel);
, 16- 32-;
-247...247 - 1; 0...248 - 1; 6 , .DQ 8 . DQ :
,
-32 768...+32 767 ( 18086), 0...65 535 ( 18086), -2 147 483 64S...+2 147 483 647 ( 1386 ) 0...4 294 967 295 ( 1386 );
, 32 ( i80386) 16 ( Intel);
D -263...263~ 1; 0...264 - 1; 8 , .DT 10 . :
,
-32 768...+32 767 ( i8086), 0...65 535 ( 18086), -2 147 483 64S...+2 147 483 647 ( 1386 ) 0...4 294 967 295 ( 1386 );
, 32 ( i80386) 16 ( );
, 16- 32-;
-279...279 - 1; 0...280 - 1; 10 , ; 0...99 999 999 999 999 999 999.
-
116 5.
, , -
, ,
. -
. -
DB. -. ('') (""). , ( -) .
5.3, . - .
5.3.
masmmodel small.stack 100h.datamessage db " " , ' $ 'perem_l db Offhperem_2 dw 3a7fhperem_3 dd 0f54d567ahmas db 10 dup (" ")pole_l db 5 dup (?)adr dw perem_3adr_fuU dd perem_3fin db " $".codestart :
mov ax,@datamov d s . a xmov ah,09hmov dx.offset messageint 21hmov ax,4c00hint 21h
end start
- , -
6.
, , -
, 5.3. .
1. td.exe, TASM.2. , 5.3, -
prg_5_3.asm. work, , TASM.
3. :tasm.exe /zi prg_5_2.asm , , ,
-
117
4. - :
tl ink.exe /v prg_5_2.obj5. :
td prg_5_2.exe , Module -
.
, , Dump. View > Dump .
, -
. DS, DS - . -
.
.
@data. -
mov a x , @ d a t amov d s , a x
, -
. ,
F7 F8. F8. Dump.
Dump , , - Goto. , - , Dump. -
.
, , ds:0000 (. 5.20). , , .
() Dump.
-
5.3 : . , - 0000 , message. 34 . , perem_l, offh. , - , ,
perem_2. 7fh, 3ah. , , -
. , -
perem_3. .
-
-
118 5.
.datamessage db '
\1
ji.y_
I '?'pecem 1 db Offh
dd Of54d567ahmas db 10 dup (' ')pole 1 db 5 dup (?)adc dw pecem 3adc full dd pecem 3fin db ' .codestact:
mov ax,6data mov ds , ax^ mov ah,09h
ds:0000dsdsdsdsdsdsdsdsdsds
int 2 In mov ax,4cOOh
int 2 Inend stact
~1 -$', -4*$-, '"' '
0008001000180020002800300038004000480050
87ASAE285620008A3
2UA320
4D2000
AD
-3&
AFEDEOAEASF52027ADASAD
*
E3E2
E224202000ASADEB
-----
ElE3ACABFF202027E6E2E5
We
E2 A820 AFAC E3 47F 20 2000 0000 4220 El 2020 AF
E2EU20E77A2000IBASA4EO
e
D:zVM1
' ' -
-Step -teu ~
| . Pant 844. 5.20.
.
DW DD - .
adr adr_full. - ,
, . -
, ,
( DD) , ( dw). - , adr adr_full, - .
, -
, :
(seg) , ;>i (offset) ; (type) , -
.
-
SEG, OFFSET TYPE.
-
119
, -
,
. -
13.
, , -
, .
: , , -.
, -
, -
, -. -
, -
.
^ , -
,
.
i , ,
. -
:
;D ;D ;D ; .
, , , -
. -
.
1 -
.
-
, .
, -
.
1> TASM , - () . - .
-
120 5.
III .
-
IA-32 .ss , ,
,
.
-
6
TASM
MASM
,
, -,
, -, -
, -
.
, , -
, -
. -
.
-
122 6.
1. : --
; , -
, , ; -
;D ; .
2. : ; ; ;D -
.
3. : -
; ;D -
.
4. :D ; , ,
; .
5. : ; ; , -
,
; ,
, .
-
. -
.
, , -
, .
,
-
123
. ,
.
, -
. 2 - . ,
.
() . , - . ( )? , , - ? - . .
, , -
. -
.
, -
( ), . -
.
.
.
ASCII. ASCII . -, : - . ? : , -
. -
. -
.
-
. , ACSII- . -
0,1,..., 9, , , , D, E, F, , , , d, e, f, :12Af, 34ad. ASCII ASCII-, - . , -
. -
,
. , ,
, -
.
010100010101011110101101110101010101000101001010.
-
124 6.
. 2 , 8 . :
01010001 01010111 10101101 11010101 01010001 01001010. ,
, . : -
4 :0101 0001 0101 0111 1010 1101 1101 0101 0101 0001 0100 1010.
(. 6.1). 6.1.
0123456789,
.
,
D,d,
F,f
ASCII-( )()31h ( 0001)32h (001 10010)33h (001 10011)34h (001 10100)35h (001 10101)36h(00110110)37h ( 0111)38h (001 11000)39h(0011 1001)41h (0100 0001), 61h (01 10 0001)42h (0100 0010), 62h (0110 0010)43h (0100 001 1), 63h (01 10 001 1)44h (0100 0100), 64h (0110 0100)45h (0100 0101), 65h (0100 0101)46h (0100 0110), 66h (0110 0110)
000000010010
01000101
011110001001101010111100110111101111
, 51 57 ad d5 51 8. -
, , , .
.
ACSII- (. 6.1), - . , ASCII- ( 0) - 30h. 30h
-
125
0011 0000, - 0000 0000. .
. 0...9 ACSII- - 0011 0000, 30h. - -
:
ii : (-) - ; ,
ACSII-., 0 9 .
, , , d, e, f, . -
. -
(. . 6.1) , - .
ASCII , - 37h. - -
67h.; . -
ASCII- 37h 67h. , -
h. 4, ,
.
6.1 , -
.
6.1. ; Prg_6_l.asm ' ; ; . ;: , ; . ;: dl.
data segment para public "data" ; message db " ,$" data ends stk segment stack db 256 dup ("?") stk ends code segment para public "code" main proc
main assume cs:code,ds:data,ss:stk mov ax,data ;
*
-
126 6.
6.1 ()
mov ds.ax ;ax dsmov ah,9raov dx,offset messageint 21h
ax ,axah, in
xormovintmovsub dlcmp dl
21hdl.al
30h9h
jlesub
Mldl, 7h
Ml:
M2:
movshlintsubcmp aljle M2sub al
cl,4hdl.cl21hal,30h
9h
,7h
add dl.almov ax,4c00hint 21h
main endpcode endsend main
Ih ah 21h al dl: (dl)=(dl)-30h (dl) 9h Ml, dl
-
127
25 ASCII- 5, : = 0000 0001 0011 0101
26 AL DL. , AL . DX - :
dx = 0000 0000 0011 0101 27 5 -
30h, DL 5:dx = 0000 0000 0000 0101
28-29 , DL. 0...9, DL - . DL 9, , , , D, E, F ( ). 29 Ml. 5 , Ml ( 31).
. -
, , .
32-33 DL 4 , .
34 AL ( ASCII- 63h): = 0000 0001 0100 0011
35-37 , - 0...9. ,
. 38. AL 35 : = 0000 0001 0001 0011
AL 13h, , ( !). 0...9, - 38. AL (al) = : = 0000 0001 0000 1100
, 40 DL AL:dx = 0000 0000 0101 0000
+ = 0000 0001 0000 1100
dx = 0000 0000 0101 1100 , DL
, :
(d l ) = 05Ch
-
128 6.
41-42 - .
. -
. -
, ,
.
. 6.1 -. -
(. 6.1). . , , -
. Windows (Notepad). ,
( ). Microsoft Word . -
Asm Editor for Windows (http://www.avtlab.ru). - .asm.
1.
/prg_3_1 . asm
2.
Tasm exe
.^1^**>1
^
^~^^^
*^
51 . .
1 kt
prg_3_1 .erf
4.
. 6.1.
MASM TASM. - , TASM,
-
129
. , -
, -, , -
. -
, TASM, .
-
.
(. 6.1). :
; ; ;is .
, , . -
: .
-
, -
. TASM ()tasm.exe. tasm.exe :TASM [] __ [,__][,__] [,___]
tasm.exe . , tasm.exe . , .
.
, -
. -
.asm. -
, ,
. , -
. , -
.
II , ( ), :
tasm.exe prg_6_l , , , -
, . 6.1 .^ , / -
,
, :
5 . 256
-
130 6.
tasm.exe prg_6_l , ,prg_l i s t , prg_6_l.obj, prg_list.lst, prg_6_l.crf.
, -
nul :t a s m . e x e prg_6_l , , n u l ,
prg_6_l.obj, prg_6_l.crf. [] -
TASM. , (http://www.piter.com/download).
tasm.exe - . TASM \TASM\BIN, - tasm.exe, . - tasm.exe , , .
, , -
.
, .
1. . .\TASM . .\WORK . .\PROGRAM. ..\PROGRAM ( .). ..\WORK - -
TASM , . -
-
. .\PROGRAM, . .\WORK , - .
, ..\WORK -, ..\PROGRAM .
2. ..\WORK tasm.exe, tlink.exe rtm.exe. - ..\WORK - -, tasm.exe tlink.exe .
3. . .\WORK prg_6_l.asm. .
..\WORK prg_6_l.asm
tasm.exe /zi prg_6_l , , . .
TASM, - .
. , -
, Error Warning. 6.1 , - - , .
Error , -
-
131
. -
. ,
, , -
. Warning , - ,
, .
-
.
. -
. ,
. . --
, . -, -
.
, , .
, .
-
. -
.1st, -. 6.2 , . -
, .
6.2. Turbo Assembler Version 4.102/03/98 21:23:43 Page 1Prg_6_l.asm1 ; Prg_6_l.asm2 ; 3 ; .4 ;: ,5 { .6 ;: 7 ; al.8 ;
9 0000data segment para public "data" ; 10 0000 82 A2 A5 A4 A8 E2 A5+ message db "
,$"11 20 4 2 5 20 8 5 +12 El E2 AD 4 0+13 2 5 0 AS E7 AD EB+14 A5 20 E6 AS E4 E0 EB+15 2C 2416 0025 data ends17 0000 stk segment stack18 0000 0100*(3F) db 256 dup ("?") ; 19 0100 stkends20 0000 code segment para public "code" ; 21 0000 main proc ; main22 assume cs:code,ds:data,ss:stk23 0000 B8 0000s mov ax,data ; 24 0003 8 D8 mov ds.ax ;ax ds25 0005 4 09 mov ah,926 0007 0000mov dx,offset messag**Error** Prg_6_l.asm(21) Undefined symbol: MESSAG27 0 0 0 A C D 21 i n t 21h #
-
132 6.
6.2()28293031323334
000 33 0 ,000 4 01 mov ah.lh0010 CD 21 int 21h0012 8A D0 mov dl.al0014 80 EA 30 sub dl0017 80 FA 09001A 7E E4 jle
Ih ah 21h at dl
30h ;: (dl)=(dl)-30hcmp dl,9h ; (dl) 9MM ; Ml, dl
-
133
:
_ _ _ _
:
_ -
.
_ . -
.
, -
. -
, INCLUDE, . -
, ,
.
_
. .
-
. .
.
_ , -
_.
_ .
.
-
.
,
. , -
. ,
, -
( ).
.
, ,
(9, 16, 17, 19...22, 48...50). , :
, -
;* , -
,
; , ,
,
-
134 6.
,
.
-
. , -
( , http://www.piter.com/download).
-
() , , , . -
. , , ,
. , -
, .
-
. -
( -) . ..
.
-
( ):TLINK [] __ [,__][.__] [,__] [,__][,__]
.
li , . (http://www.piter.com/download). - (-) / (). .
__ , -
.obj. - + (), :
t l i n k /v prog + mdf + f d r .
II __ , - . , -
.
ii __ , - .
, , .
it __ , - (.lib). -
-
135
tlib.exe TASM. . -
tlink.exe ,
. Windows-, - __ -
( 16). __ , -
(.def). Windows- ( 16).__ , -
Windows- (.res). - Windows- ( 16). 32--
ttink32.exe. -
. tlink.cfg (tlink32.cfg). tlink.exe tlink.cfg (tlink32.exe tlink32.cfg) tlink.cfg (tlink32.cfg). , - tlink32.cfg Windows- :
/ V/Twe
tasm.exe, - tlink.exe. - tlink.exe, .
nporpaMMytlink.exe -
t l i n k . e x e / v p r g _ 6 _ l . o b j . prg_6_l.exe. , . , -
, -
, .
.
-
, .
, -
. -
,
. -
. , -
. -
, (. . 6.1).
-
136 6.
, -
. -
. , -
. -
.
:
* , ,
(Turbo Pascal, Visual C++. .);
ii , . (MASM, TASM) -
,
,
(, Visual C++). - , -
, ,
. ,
, , ,
.
MS-DOS? - .
,
. ,
, ,
,
.
. -,
-
(MS-DOS), (Windows).
-
, Windows. -,
-
. -
, -
(MS-DOS).
TASM MASM - MS-DOS, . ,
MS-DOS, 16- TASM MASM .
-
137
. TASM 16- Turbo Debugger(TD), Borland International. - . ,
TD , - , cv.exe MASM.
TD . :
II ; .
TD:* , -
,
;* , -
, ;S
.
.
, TD . -
, ,
.
,
. ,
, .
, -
, . -
.
II , .
, 6.1, . -
END:end _
MAIN.* /zi:
tasm /zi __ , , , /zi - ,
, .
9- /v:tlink /v __
-
138 6.
/v .
' -
:
td __, td.exe -
..\WORK. ..\BIN TASM. td.exe ,
, :
td : 5 \ _ . -
TD Module prg_6_l.asm. , td.exe - ? /zi /v tasm tlink . - . -
-
.
Module (. 6.2). - ( ). , . ( - ). . ,
, END. ,
.
;: dl.s ~ -,_ _ _ _ _ _ _ _
data segment para public "data" ; message db " ,$"data endsstk segment stackdb 256 dup ; stk endscode segment para public "code" ; main proc mainassume cs:code,ds:data,ss=stkmou ax,data mou ds.ax ;ax dsmou ah,9mou dx,offset messageint 2ih , ; mou ah,lh ;lh ah
. 6.2. Module TD
-
139
, ,
.
-
. -
.
.
.
:
( F10, - );
II - , ,
( Alt+FlO). .
, -
, -
. , -
.
:
; ;ii ; .
.
,
.
F9. , , , ,
. -
.
( Window > User screen - Alt+F5). , . , - -
, .
, -
. -
F4. , .
.
(breakpoints).
-
140 6.
, F2. - .
F2. F9 (. - ). . , -
.
.
. -
() . - .
F7 (Run > Trace into) F8 (Run > Step over). - ; , - . -
F7 . F8, - , -
. , Module CPU, View > CPU.
CPU .II
, Module, . ; .
ii (Registers) - ( 18086). i486 Pentium, . -
Registers 32-bit Yes. (Flags) -
.
9 (Stack) , . SS SP.
(Dump) , , .
.
.
, CPU, , . CPU . Module, - CPU, CPU. -
-
141
Module CPU , View - CPU.
,
Ctrl+F2.
MASM MASM Microsoft (Windows NT\2000\XP) 6.13 . :
^ masm.exe ;* ml.exe (Masm and Link);s link.exe ; cv.exe (CodeView);* lib.exe, implib.exe, nmake.exe, cref.exe, h2inc.exe, exehdr.exe, cvpack.exe, helpmake.exe,
rm.exe, undel.exe, exp.exe . MASM
, , -
- . , -
macro, -
( ), . , . -
,
Intel (, TASM), , , . MASM
, . masm.exe,
ml.exe, link.exe cv.exe. , - : masm.exe ml.exe. ? MASM 5.1 masm.exe . MASM - 6.0 ml.exe, link.exe.
. , -
cLexe. C/C++ , , . -
ml.exe. MASM 6.13 masm.exe, , link.exe . masm.exe -
MASM 6.13 , .
ml.exe,masm.exe link.exe, (http://www.piter.com/download).
-
142 6.
ml.exe ml [] __1 [ [] __2] . . . [ / l i n k _11]
ml.exe . masm.exe
masm [] _ [, [_] [, [_][, [__]]]]
() - (DLL). Link.exe link [] _ [,[_][,[_][,[_6][ , [ ! _ ] ] ] ] ] [