Assembly alapok Pilászy György [email protected]
Transcript of Assembly alapok Pilászy György [email protected]
![Page 1: Assembly alapok Pilászy György gpilaszy@iit.bme](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/1.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/2.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/3.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/4.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/5.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/6.jpg)
Fordítás…
© Pilászy György BME-IIT 6
![Page 7: Assembly alapok Pilászy György gpilaszy@iit.bme](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/7.jpg)
Listafájl - részlet
7
![Page 8: Assembly alapok Pilászy György gpilaszy@iit.bme](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/8.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/9.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/11.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/12.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/13.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/15.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/16.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/17.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/18.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/19.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/21.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/22.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/26.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/27.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/28.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/29.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/30.jpg)
Ö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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/31.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/32.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/33.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/34.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051406/627dbbd4c86c234f0872ab8b/html5/thumbnails/35.jpg)
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