В. И. Юров - assembler. Учебник для ВУЗов (2003).pdf

638
УЧЕБНИК /ДЛЯ ВУЗОВ В. И. Юров ASSEMBLER 2-е издание Допущено Министерством образования Российской Федерации в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению подготовки дипломированных специалистов «Информатика и вычислительная техника» goe, 300.piter.com Издательская программа 300 лучших учебников для высшей школы в честь 300-летия Санкт-Петербурга осуществляется при поддержке Министерства образования РФ Москва • Санкт-Петербург • Нижний Новгород • Воронеж Ростов-на-Дону • Екатеринбург • Самара Киев • Харьков • Минск 2003

Upload: caesar1892

Post on 28-Oct-2015

697 views

Category:

Documents


17 download

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][ , [ ! _ ] ] ] ] ] [