dezasamblare pam

2
Dezasamblare Dezasamblare = Procesul prin care din cod mașina (coduri înțelese de procesor) obținem instrucțiuni in limbaj de asamblare (instrucțiuni ce pot fi înțelese de oameni). Sa se dezasambleze următoarele instrucțiuni in cod mașina: 178C 3E3C 1D18 0C05 049B 01A2 Le transformam in binar (cei 2 biți de 0 di fata nu ii punem, deoarece instrucțiunile in pic au 14 biți): 01 0111 1000 1100 11 1110 0011 0101 01 1101 0001 1000 00 1100 0000 0101 00 0100 1001 1011 00 0001 1010 0010 Ne uitam in pdf-ul microcontrolerului (datasheet), Cap.15. Instruction Set Summary, Table 15-2. Din tabelul cu instrucțiuni găsim instrucțiunile echivalente si parametrii lor. Exista instructiuni care nu au nici un parametru, unele care au unul singur, si altele care au 2 parametri. De exemplu pentru instrucțiunea a treia (01 1101 0001 1000 ), ne uitam in tabel si identificam ca biții de început (opcode) corespund cu instrucțiunea BTFSS: Instrucțiunea BTFSS are 2 parametri: BTFSS F, B primul parametru „F”, este compus din cei 7 biții „f”(de pe pozițiile [6..0]): 0011000 = 0x18 al doilea parametru, „B” este compus din biții „b”(de pe pozițiile [9..7]): 010 = 2 Rezulta instructiunea: BTFSS 0x18,2. La fel se procedează si pentru restul instrucțiunilor: 01 0111 1000 1100 BSF 0xc, 0x7 11 1110 0011 0101 ADDLW 0x3C 01 1101 0001 1000 BTFSS 0x18, 0x2 00 1100 0000 0101 RRF 0x5, 0 00 0100 1001 1011 IORWF 0x1b, 1 00 0001 1010 0010 CLRF 0x22

Upload: andra-dor

Post on 15-Jan-2016

218 views

Category:

Documents


0 download

DESCRIPTION

tehnici de dezasamblare-laborator PAM

TRANSCRIPT

Page 1: Dezasamblare PAM

Dezasamblare

Dezasamblare = Procesul prin care din cod mașina (coduri înțelese de procesor) obținem instrucțiuni

in limbaj de asamblare (instrucțiuni ce pot fi înțelese de oameni).

Sa se dezasambleze următoarele instrucțiuni in cod mașina:

178C

3E3C

1D18

0C05

049B

01A2

Le transformam in binar (cei 2 biți de 0 di fata nu ii punem, deoarece instrucțiunile in pic au 14 biți):

01 0111 1000 1100

11 1110 0011 0101

01 1101 0001 1000

00 1100 0000 0101

00 0100 1001 1011

00 0001 1010 0010

Ne uitam in pdf-ul microcontrolerului (datasheet), Cap.15. Instruction Set Summary, Table 15-2. Din

tabelul cu instrucțiuni găsim instrucțiunile echivalente si parametrii lor. Exista instructiuni care nu au

nici un parametru, unele care au unul singur, si altele care au 2 parametri.

De exemplu pentru instrucțiunea a treia (01 1101 0001 1000 ), ne uitam in tabel si identificam ca

biții de început (opcode) corespund cu instrucțiunea BTFSS:

Instrucțiunea BTFSS are 2 parametri: BTFSS F, B

primul parametru „F”, este compus din cei 7 biții „f”(de pe pozițiile [6..0]): 0011000 = 0x18

al doilea parametru, „B” este compus din biții „b”(de pe pozițiile [9..7]): 010 = 2

Rezulta instructiunea: BTFSS 0x18,2. La fel se procedează si pentru restul instrucțiunilor:

01 0111 1000 1100 BSF 0xc, 0x7

11 1110 0011 0101 ADDLW 0x3C

01 1101 0001 1000 BTFSS 0x18, 0x2

00 1100 0000 0101 RRF 0x5, 0

00 0100 1001 1011 IORWF 0x1b, 1

00 0001 1010 0010 CLRF 0x22

Page 2: Dezasamblare PAM

In locul adreselor variabilelor trebuie sa completam numele variabilelor (daca le cunoaștem) si al

locațiilor speciale de memorie. Acest lucru îl putem face doar pentru numerele ce reprezintă adrese

de memorie (ne dam seama din tipul instrucțiunii, este vorba de câmpurile cu fffffff din tabel)

Pentru locațiile speciale de memorie, ne uitam in datasheet, la Cap.2. Memory Organization, Figure

2-6;

Pentru locațiile de memorie folosite de utilizator, ar trebuie sa știm ce denumire le-a dat

programatorul; sa presupunem ca in programul inițial ar fi fost definita o secvența de genul:

CBLOCK 0x20

alfa

beta

gama

ENDC

Asta inseamna ca alfa se afla la adresa 0x20, beta la adresa 0x21 si gama la adresa 0x22.

In urma transformării avem:

BSF PIR1, 0x7

ADDLW 0x3C

BTFSS RCSTA, 0x2

RRF PORTA, W

IORWF CCPR2, F

CLRF gama

In următorul pas putem înlocui (pentru locațiile speciale) si denumirile biților; ne uitam in Cap.2.

Memory Organization, Table 2-1

Bsf PIR1, GIE

addlw 60

btfss RCSTA, FERR

rrf PORTA, w

iorwf CCPR2L

clrf gama

Deci in final avem echivalenta (pe care o putem verifica scriind secvența de program in asamblare(cea

din dreapta) in MPLAB si asamblând programul); ar trebui sa obținem in cod mașina secvența din

stânga:

Cod mașina Limbaj de asamblare

178C bsf PIR1, GIE

3E3C addlw 60

1D18 btfss RCSTA, FERR

0C05 rrf PORTA, w

049B iorwf CCPR2L

01A2 clrf gama