Assembly alapok Pilászy György [email protected]

35
Hardver alapok (VIIIBA01) Assembly alapok Assembly alapok Pilászy György [email protected] 2018/19. tanév ıszi félév

Transcript of Assembly alapok Pilászy György [email protected]

Page 1: Assembly alapok Pilászy György gpilaszy@iit.bme

Hardver alapok (VIIIBA01)

Assembly alapokAssembly alapok

Pilászy György [email protected]

2018/19. tanév ıszi félév

Page 2: Assembly alapok Pilászy György gpilaszy@iit.bme

Bevezetés

• Assembly�összeszerelés

• Feladat: adott processzorhoz gépi kód elıállítása jól olvasható szövegfájlból

• Változók, ugrási címek automatikus

2

• Változók, ugrási címek automatikus számítása

• Igény esetén több modulból álló program fordítása, esetenként eltérı programozási nyelveken íródott modulokból is

Hardver alapok

Page 3: Assembly alapok Pilászy György gpilaszy@iit.bme

A fejlesztés folyamata

• Program írás általában PC-n �szövegszerkesztı a kód elkészítéséhez

• Szövegfájl fordítása (cross-assembler)�bináris tartalom elıállítása

• [több programmodul esetén összefőzés (linkelés)]

3

• [több programmodul esetén összefőzés (linkelés)]

• Beprogramozás („égetés”) a mikrokontrollerbevagy a szimulátorba

• Hibakeresés, javítás

Hardver alapok

Page 4: Assembly alapok Pilászy György gpilaszy@iit.bme

Fontosabb fogalmak

• Mnemonik�utasítás rövid neve• Gépi kód, OP. kód• Direktíva�fordítónak szóló utasítás• Szimbólum�érték helyettesítés

– Címke�belépési pont, hivatkozási pont– Konstans�állandó érték megadása

4

– Konstans�állandó érték megadása• Regiszter, SFR, RAM, FLAG• Assembler, Linker• Szintaxis�elıírt formátum

pl.:címke: utasitás cim1,cél ; komment

• Makró

Hardver alapok

Page 5: Assembly alapok Pilászy György gpilaszy@iit.bme

ASSEMBLY fordítás…

• Cél: gépi kód elıállítása

• Több lépésben:– Szimbólumok értékeinek kiszámítása

(szimbólum tábla)

– Gépi kód elıállítása

– Listafájlok generálása

• Memória tartalom elhelyezéséhez mutató (Location pointer)

• Fordítást is kell tudnunk befolyásolni�direktívák

© Pilászy György BME-IIT 5Hardver alapok

Page 6: Assembly alapok Pilászy György gpilaszy@iit.bme

Fordítás…

© Pilászy György BME-IIT 6

Page 7: Assembly alapok Pilászy György gpilaszy@iit.bme

Listafájl - részlet

7

Page 8: Assembly alapok Pilászy György gpilaszy@iit.bme

Intelhex formátum

BB: soron belüli adatbájtok száma

AAAA: adatrekord kezdıcíme

TT: rekord típusa (00:adat, 01:fájlvége, 02:szegmens cím, 04: lineáris cím)

HH…HH: adatbájtok

CC: ellenırzı összeg kettes komplemense

© Pilászy György BME-IIT 8

Page 9: Assembly alapok Pilászy György gpilaszy@iit.bme

MPASM-X számábrázolás

• Támogatott számrendszerek: 2, 8, 10, 16

Számrendszer Lehetséges megadások

Bináris B’00011001’ b’00011001’ 0b11001

Decimális D’25’ d’25’ .25

9

Decimális D’25’ d’25’ .25

Hexadecimális H’19’ h’19’ 0x19

Hardver alapok

Alkalmazási példa:MOVLW B’11010010’ ; W = d2h

Page 10: Assembly alapok Pilászy György gpilaszy@iit.bme

MPASM-X direktívák

• Vezérlı direktívák

• Feltételes fordítás

• Adat megadások

• Listázás vezérlés

10

• Listázás vezérlés

• Makró megadás

• Tárgykód hivatkozások(nem foglalkozunk mindegyikkel, részletes leírás: MPASM_userguide_33014L.pdf)

Hardver alapok

Page 11: Assembly alapok Pilászy György gpilaszy@iit.bme

Vezérlı direktívák

• ORG�location pointer beállítása

• EQU�konstans értékadás

• RES�helyfoglalás változónak

• END�forráskód vége jelzés

11

• END�forráskód vége jelzés

• BANKSEL�automatikus bankválasztás

• #define�szimbólum létrehozása

• #undefine�szimbólum törlése

• #include�külsı forrásfájl beillesztése

Hardver alapok

Page 12: Assembly alapok Pilászy György gpilaszy@iit.bme

Feltételes fordítás

• Fordítási idıben bizonyos feltételektıl függıen befolyásolja a kódgenerálást

• #if

• #else

12

• #else

• #endif

• #ifdef

• #ifndef

Hardver alapok

Page 13: Assembly alapok Pilászy György gpilaszy@iit.bme

Adat megadások

• __config – konfigurációs szó megadása

• cblock – konstans blokk definiálása

• endc – konstans blokk lezárása

• db – declare byte, 1 bájt definiálása

13

• db – declare byte, 1 bájt definiálása

• de – declare EEPROM, adat definiálása

• dt – konstans táblázat definiálása (RETLW)

• dw – declare word, szó definiálása

Hardver alapok

Page 14: Assembly alapok Pilászy György gpilaszy@iit.bme

Egyéb kiegészítések

• Processzor típus és az SFR-ek defínicióit tartalmazó .inc fájlok megadása:#include "p16f18875.inc"

• Konstansok elérése másik modulból– GLOBAL– EXTERN

14

• Változó definiálása BANK0-banBank0vars UDATA 0x20 ;változók ramban

BITCNT RES 1 ; 1 bájt foglalás

DTMP1 RES 1 ; 1 bájt foglalás

• A fordítás alatt:– BITCNT címke értéke 0x20– DTMP1 cimke értéke 0x21

Hardver alapok

Page 15: Assembly alapok Pilászy György gpilaszy@iit.bme

Utasítások csoportosítása

– Adatmozgató utasítások

– Aritmetikai mőveletek

– Logikai mőveletek

– Bitmőveletek– Bitmőveletek

– Vezérlés átadás

– Vezérlı mőveletek

© Pilászy György BME-IIT 15

Page 16: Assembly alapok Pilászy György gpilaszy@iit.bme

Adatmozgató utasítások

• MOVF�F másolása W-be, vagy önmagára

• MOVWF�W másolása f-be

• SWAPF�alsó és felsı 4 bit felcserélése

• MOVLB�Konstans a BSR-be

• MOVLP�konstans a PCLATH-ba

Z

-

-

-

-• MOVLP konstans a PCLATH-ba

• MOVLW�konstans a W-be

• MOVIW�indirekt adatmozgatás W-be FSR0 vagy FSR1 szerint

• MOVWI�indirekt adatmozgatás W-bıl FSR0 vagy FSR1 szerint

© Pilászy György BME-IIT 16

-

-

Z

Z

Page 17: Assembly alapok Pilászy György gpilaszy@iit.bme

Aritmetikai mőveletek

• ADDWF�d=W+f

• ADDWFC�d=W+f+C

• ASRF�d=f>>1, elıjel kiterjesztéssel

• DECF�f=f-1

• INCF�f=f+1

C,DC,Z

C,DC,Z

C,Z

Z

Z• INCF f=f+1

• SUBWF�f=f-W

• SUBWFB�f=f-W-C

• ADDLW�W=W+k

• SUBLW�W=k-W

© Pilászy György BME-IIT 17

Z

C,DC,Z

C,DC,Z

C,DC,Z

C,DC,Z

Page 18: Assembly alapok Pilászy György gpilaszy@iit.bme

Logikai mőveletek

• ANDWF�f=W&F

• LSLF� Cf0

• LSRF� 0�f�C

• COMF�f=~f

• IORWF�f=f|W

Z

C,Z

C,Z

Z

Z• IORWF f=f|W

• RLF�CfC (körbeforgatás C-n keresztül)

• RRF�C�f�C (körbeforgatás C-n keresztül)

• XORWF�f=F^W

• ANDLW�W=W&k

• IORLW�W=W|k

• XORLW�W=W^k

© Pilászy György BME-IIT 18

Z

C

C

Z

Z

Z

Z

Page 19: Assembly alapok Pilászy György gpilaszy@iit.bme

Bitmőveletek

• BCF�f.i=0

• BSF�f.i=1

• BTFSC�skip, ha f.i==0

• BTFSS�skip, ha f.i==1

-

-

-

-

f: fileregiszter 7 bites címe

i: 0..7, bit kiválasztás, 0. bit LSB

© Pilászy György BME-IIT 19

Page 20: Assembly alapok Pilászy György gpilaszy@iit.bme

Vezérlés átadás• DECFSZ�d=f-1, skip, ha nulla

• INCFSZ�d=f+1, skip, ha nulla

• BTFSC�skip, ha f.i==0

• BTFSS�skip, ha f.i==1

• BRA�9bites elıjeles relatív ugrás

• BRW�8bites PC relatív ugrás, PC=PC+W

-

-

-

-

-

-• BRW�8bites PC relatív ugrás, PC=PC+W

• CALL�szubrutin hívás, PC�stack

• CALLW�szubrutin hívás, PC=PCLATH:W

• GOTO�ugrás

• RETFIE�visszatérés+IT eng., stack�PC

• RETLW�visszatérés, W=k, stack�PC

• RETURN�visszatérés, stack�PC

© Pilászy György BME-IIT 20

-

-

-

-

-

-

-

Page 21: Assembly alapok Pilászy György gpilaszy@iit.bme

Vezérlı utasítások

• CLRWDT�WDT idızítı törlése

• NOP�egy út. ciklus késleltetés

• RESET�újraindítás

• SLEEP�kis fogyasztású módba lépés

TO,PD

-

-

TO,PD

TO: time out jelzıbit

PD: power down jelzıbit

© Pilászy György BME-IIT 21

Page 22: Assembly alapok Pilászy György gpilaszy@iit.bme

Vezérlési szerkezetek• Aritmetikai és logikai mőveletek mellékhatásként

jelzı biteket (flag) is állítanak�

• Státusz regiszter (STATUS)

22

• STATUS regiszter, FLAG bitek �• Feltételes elágazások (BTFSC, BTFSS)• Ugrótáblák (BRW)• Iteráció (DECFSZ, INCFSZ)• Utasítás táblában ellenırizni kell, hogy melyik

utasítás milyen flagbiteket állít!

Hardver alapok

Page 23: Assembly alapok Pilászy György gpilaszy@iit.bme

Elágazás megvalósítása 1

if(VAR_A==VAR_B)goto ide;

else goto oda;� assemblyben:MOVF VAR_A,W

SUBWF VAR_B,W ; W=VAR_B-VAR_A

BTFSC STATUS,Z ; Z=1, ha egyenlı

GOTO ide; Z=1 ág

GOTO oda; Z=0 ág

Page 24: Assembly alapok Pilászy György gpilaszy@iit.bme

Elágazás megvalósítása 2

if(VAR_A>VAR_B)goto ide;

else goto oda;� assemblyben:MOVF VAR_A,W

SUBWF VAR_B,W ; W=VAR_B-VAR_A

BTFSC STATUS,C ; C=1, ha A>B

GOTO ide; C=1 ág

GOTO oda; C=0 ág

Page 25: Assembly alapok Pilászy György gpilaszy@iit.bme

Elágazás megvalósítása 3

switch(VAR_A) {case 0: Goto Rut0;case 1: Goto Rut1;} ;� assemblyben:MOVF VAR_A,W

BRW ; PC=PC+1+WBRW ; PC=PC+1+W

GOTO Rut0; W=0 ág

GOTO Rut1; W=1 ág

Ügyelni kell a túlcímzés elkerülésére! Pl: maszkolással:MOVF VAR_A,W

ANDLW B’00000001’ ; Csak egy bitet hagyunk

BRW ; PC=PC+1+W

Page 26: Assembly alapok Pilászy György gpilaszy@iit.bme

Ciklus megvalósítása

for(zz=2;zz>0;zz---)dolgozik(); � assemblyben:

MOVLW D’02’

MOVWF zz; ZZ=2

címke:

CALL dolgozik

DECFSZ zz,F ; zz--, skip ha zz==0

GOTO címke

…folytatás…

Page 27: Assembly alapok Pilászy György gpilaszy@iit.bme

Szubrutin készítése

• Több helyrıl is meghívható eljárások készítése

• Meghívás: CALL utasítással• Aktuális PC�STACK• Korlátozott egymásba ágyazás <16• Korlátozott egymásba ágyazás <16• Meghívott szubrutin a futás végeztével

visszatér�RETURN vagy RETLW• Paraméter átadás W-ben, vagy

memóriában

Page 28: Assembly alapok Pilászy György gpilaszy@iit.bme

Szoftveres késleltetés

• Minden utasításnak fix végrehajtási ideje van (pl.: 8MHz instruction clock esetén Tcy=125ns

• Szervezzünk visszaszámoló ciklustDelay15us:

MOVLW D‘38' ; 3Delay= (5+N*3)*125ns

MOVLW D‘38' ; 3

D15CK:

DECFSZ WREG,W ; 1 /2

GOTO D15CK ; 2

RETURN ; 2

15us/125ns=120 ciklus

N=(120-5)/3=38.3

Page 29: Assembly alapok Pilászy György gpilaszy@iit.bme

Szoftveres késleltetés

• Hosszabb idızítéshez több egymásba ágyazott ciklusDelay1ms:

MOVLW D‘66'

MOVWF DTMP1

D1MSCK:

CALL Delay15us

DECFSZ DTMP1,F

GOTO D1MSCK

RETURN

Page 30: Assembly alapok Pilászy György gpilaszy@iit.bme

Összehasonlítás konstanssal

; ALARM szubrutin hívása, ha ERTEK>8

CHECK_ALARM:

MOVF ERTEK,W ; W = ERTEK

SUBLW D’08’ ; W = 8-ERTEK

BTFSC STATUS,C ; C = 1, ha negatív

CALL ALARM ; Hívás, ha C=1

RETURN

Page 31: Assembly alapok Pilászy György gpilaszy@iit.bme

Memória másolásaMEMCOPY:

; FSR0: forrás mutató

; FSR1: cél mutató

; W: darabszám

MOVWF BITCNT

MCPCK: MCPCK:

MOVIW FSR0++ ; M[FSR0H:FSR0L]�W

MOVWI FSR1++ ; W�M[FSR1H:FSR1L]

DECFSZ BITCNT,F

GOTO MCPCK

RETURN

Page 32: Assembly alapok Pilászy György gpilaszy@iit.bme

PORT kezelés

BCF TRISA,5 ; RA5 kimenet

BSF LATA,5 ; RA5=1

NOP

BCF LATA,5 ; RA5=0BCF LATA,5 ; RA5=0

Page 33: Assembly alapok Pilászy György gpilaszy@iit.bme

Várakozás gombnyomásra

PORTC.4=0�lenyomták�visszatér

VAR_0:

BTFSC PORTC,4BTFSC PORTC,4

BRA VAR_0

RETURN

Page 34: Assembly alapok Pilászy György gpilaszy@iit.bme

Táblázat tárolása programmemóriában

; indexelı szubrutin, INDEX_TABLA [W]

értéket adja vissza

INDEX_TABLA:

BRW

RETLW D’12’; INDEX_TABLA [0] érték = 12

RETLW H’22’; INDEX_TABLA [1] érték = 34

……… ; további értékek…

Táblázat létrehozható a DT direktívával is

INDEX_TABLA:

BRW

DT D’12,H’22’

Page 35: Assembly alapok Pilászy György gpilaszy@iit.bme

A témához kapcsolódó anyagok

• Microchip weboldalahttp://www.microchip.com

• MPLABX fejlesztıi környezet és dokumentáció letöltése

35© Pilászy György BME-IIT 35

https://www.microchip.com/mplab/mplab-x-ide

• Online help a mikrokontrollerhez és a fejlesztıi környezethezhttp://microchipdeveloper.com/mcu1102:start

• Tárgy honlapjánhttps://www.iit.bme.hu

Hardver alapok