Вивчення структури команд процесора, використання їхніх машинних кодів. Можливості, надані системною програмою debug, страница 2

      38 001B  BF 0012                                             mov      di,18       ; j:=9

      39 001E  8B 84 0020 R                           l1:       mov      ax,A[si]    ; (ax):=A[i]

      40 0022  89 85 0034 R                                      mov      B[di],ax    ; B[j]:=A[i]

      41 0026  83 C6 02                                             add      si,2        ; i:=i+1

      42 0029  83 EF 02                                             sub      di,2         ; j:=j-1

      43 002C  E2 F0                                                 loop     l1

      44 002E  B4 09                                                 mov      ah,9h        ;  Вывод

      45 0030  8D 16 0011 R                                     lea      dx,text2     ; сообщения

      46 0034  CD 21                                                 int      21h          ; на экран

      47 0036  B4 4C                                                 mov      ah,4ch       ;  Возврат

      48 0038  CD 21                                                 int      21h          ; в систему

      49 003A                                                   cods     ends

      50                                                            end      beg

Microsoft (R) Macro Assembler Version 5.10                  9/21/3

labrab_2                                                    Symbols-1

Segments and Groups:

                N a m e           Length         Align          Combine Class

CODS . . . . . . . . . . . . . .           003A PARA         NONE        

DATS . . . . . . . . . . . . . .           004A PARA         NONE        

STC  . . . . . . . . . . . . . .  0080  PARA         STACK      

Symbols:           

                N a m e           Type  Value          Attr

A  . . . . . . . . . . . . . . .      L WORD     0020  DATS

B  . . . . . . . . . . . . . . .      L WORD     0034  DATS          Length = 000A

BEG  . . . . . . . . . . . . . .  L NEAR      0000  CODS

KOL  . . . . . . . . . . . . . .  L WORD     0048  DATS

L1 . . . . . . . . . . . . . . .     L NEAR      001E  CODS

TEXT1  . . . . . . . . . . . . .          L BYTE      0000  DATS

TEXT2  . . . . . . . . . . . . .          L BYTE      0011  DATS

TOS  . . . . . . . . . . . . . .  L WORD     0080  STC

@CPU . . . . . . . . . . . . . .          TEXT  0101h                 

@FILENAME  . . . . . . . . . . .  TEXT  lab2          

@VERSION . . . . . . . . . . . .     TEXT  510           

     38 Source  Lines

     38 Total   Lines

     16 Symbols

  46494 + 444526 Bytes symbol space free

      0 Warning Errors

      0 Severe  Errors

================================================================

Файл перехресних ссилок .map:

Start  Stop   Length Name                   Class

 00000H 0007FH 00080H STC                   

 00080H 000C9H 0004AH DATS                  

 000D0H 00109H 0003AH CODS                  

Program entry point at 000D:0000

З цього файлу можна дізнатися про знаходження сегмента коду, сегменту даних та стеку.

Виконаемо основні команди отладчика. Для цього введемо командну строку c:\masm\debug lab2.exe

Команда r

Виводить на екран вміст усіх регістрів процесора. При виконанні команди
r reg виводиться тільки вміст регістра reg.

При виконанні команди r з програмою lab2.exe на екрані побачимо:

AX=0000  BX=0000  CX=010A  DX=0000  SP=0080  BP=0000  SI=0000  DI=0000

DS=0B98  ES=0B98  SS=0BA8  CS=0BB5  IP=0000   NV UP EI PL NZ NA PO NC

0BB5:0000 B8A80B        MOV     AX,0BA8

Тут можна побачити вміст усіх регістрів та стан флагів процесора.

Команда U

Команда U (Unassemble)  відображає одночасно машинні коди і символьне представлення команд процесора.  Треба в  команді вказати початкова  адреса і може бути зсув кінцевої адреси тих байтів у пам'яті,  уміст яких у виді команд  процесора  нас зараз цікавить. Для початкової адреси також можна вказати тільки зсув (уміст регістра CS буде враховано автоматично). Можна в команді U не вказувати адресну частину, якщо після попереднього використування цієї команди доцільно її використовувати знову.  

При виконанні команди U з програмою lab2.exe на екрані побачимо:

-u

0BB5:0000 B8A80B                MOV     AX,0BA8

0BB5:0003 8ED0          MOV     SS,AX

0BB5:0005 BC8000                 MOV     SP,0080

0BB5:0008 B8B00B                 MOV     AX,0BB0

0BB5:000B 8ED8          MOV     DS,AX

0BB5:000D B409          MOV     AH,09

0BB5:000F 8D160000             LEA     DX,[0000]

0BB5:0013 CD21          INT     21

0BB5:0015 8B0E4800             MOV     CX,[0048]

0BB5:0019 33F6            XOR     SI,SI

0BB5:001B BF1200                 MOV     DI,0012

0BB5:001E 8B842000             MOV     AX,[SI+0020]

Тут можна побачити машинні команди та відповідні ним команди на мові Assembler.

Команда T

За допомогою цієї команди можна виконати одну чи кілька інструкцій, починаючи від укажчика CS:IP чи від іншого адресу