Sunteți pe pagina 1din 2

Dezasamblare

Dezasamblare = Procesul prin care din cod maina (coduri nelese de procesor) obinem instruciuni
in limbaj de asamblare (instruciuni ce pot fi nelese de oameni).
Sa se dezasambleze urmtoarele instruciuni in cod maina:
178C
3E3C
1D18
0C05
049B
01A2

Le transformam in binar (cei 2 bii de 0 di fata nu ii punem, deoarece instruciunile in pic au 14 bii):
01
11
01
00
00
00

0111
1110
1101
1100
0100
0001

1000
0011
0001
0000
1001
1010

1100
0101
1000
0101
1011
0010

Ne uitam in pdf-ul microcontrolerului (datasheet), Cap.15. Instruction Set Summary, Table 15-2. Din
tabelul cu instruciuni gsim instruciunile 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 instruciunea a treia (01 1101 0001 1000 ), ne uitam in tabel si identificam ca
biii de nceput (opcode) corespund cu instruciunea BTFSS:

Instruciunea BTFSS are 2 parametri: BTFSS F, B


primul parametru F, este compus din cei 7 biii f(de pe poziiile [6..0]): 0011000 = 0x18
al doilea parametru, B este compus din biii b(de pe poziiile [9..7]):
010 = 2
Rezulta instructiunea: BTFSS 0x18,2. La fel se procedeaz si pentru restul instruciunilor:
01
11
01
00
00
00

0111
1110
1101
1100
0100
0001

1000
0011
0001
0000
1001
1010

1100
0101
1000
0101
1011
0010

BSF 0xc, 0x7


ADDLW 0x3C
BTFSS 0x18, 0x2
RRF 0x5, 0
IORWF 0x1b, 1
CLRF 0x22

In locul adreselor variabilelor trebuie sa completam numele variabilelor (daca le cunoatem) si al


locaiilor speciale de memorie. Acest lucru l putem face doar pentru numerele ce reprezint adrese
de memorie (ne dam seama din tipul instruciunii, este vorba de cmpurile cu fffffff din tabel)
Pentru locaiile speciale de memorie, ne uitam in datasheet, la Cap.2. Memory Organization, Figure
2-6;
Pentru locaiile de memorie folosite de utilizator, ar trebuie sa tim ce denumire le-a dat
programatorul; sa presupunem ca in programul iniial ar fi fost definita o secvena 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 transformrii avem:
BSF PIR1, 0x7
ADDLW 0x3C
BTFSS RCSTA, 0x2
RRF PORTA, W
IORWF CCPR2, F
CLRF gama

In urmtorul pas putem nlocui (pentru locaiile speciale) si denumirile biilor; 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 secvena de program in asamblare(cea
din dreapta) in MPLAB si asamblnd programul); ar trebui sa obinem in cod maina secvena din
stnga:
Cod maina
178C
3E3C
1D18
0C05
049B
01A2

Limbaj de asamblare
bsf PIR1, GIE
addlw 60
btfss RCSTA, FERR
rrf PORTA, w
iorwf CCPR2L
clrf gama

S-ar putea să vă placă și