Home
Add Document
Sign In
Register
Bevezetés az assembly nyelvbe
Home
Bevezetés az assembly nyelvbe
1 Mechatronika és mikroszámítógépek 2016/2017 I. félév Bevezetés az assembly nyelvbe2 Makro ut...
Author:
Zoltán Fehér
8 downloads
53 Views
3MB Size
Report
DOWNLOAD PDF
Recommend Documents
Bevezetés az assembly nyelvbe
Bevezetés az ógörög nyelvbe
Mikrovezérlők szoftverfejlesztése, az assembly alapjai
Bevezetés a görög nyelvbe
Bevezetés a Java programozási nyelvbe
Bevezetés a C++ programozási nyelvbe
Bevezetés a Java programozási nyelvbe
Az Amiga programozása C és Assembly nyelven
Assembly Matematika Assembly-ben. Iványi Péter
Assembly. Pemrograman Bahasa Assembly. Referensi dan Tutorial. Assembly
Assembly centres
Assembly instructions
Kölcsönszavak fonológiai integrációja a holland nyelvbe
Assembly instructions
BEVEZETÉS A NÉMET ÜZLETI IDEGEN NYELVBE LÖSUNGEN
Assembly Instructions
Assembly instructions
assembly Language
Cxx (assembly)
ASSEMBLY PROGRAMOZÁS
Assembly instructions
DASAR KOMPUTER. Assembly Language
Assembly. Iványi Péter
Mengenal bahasa assembly
Mechatronika és mikroszámítógépek 2016/2017 I. félév
Bevezetés az assembly nyelvbe
Makro utasítások felépítése - emlékeztető • Általános forma: operation code operands • (Általános forma: instruction
destination, source)
• 3 című utasítás: • 1. operandus, 2. operandus, eredmény címe
• 2 című utasítás : • 1. operandus, 2. operandus, eredmény az első operandus helyén
• 1 című utasítás: • 1. operandus, eredmény az operandusban 2016.09.21.
Bevezetés az assembly nyelvbe
2
Memóriacímzési módok Addressing Modes
Címzési mód
Instruction /Utasítás
Register
Regiszter
MOV A, B
Direct
Direkt – pl. SFR regiszterek
MOV 30H,A
Indirect
Indirekt – pl. felső 128 B RAM, pointer
ADD A,@R0
Immediate Constant
Konstans/Literál
ADD A,#0x80
Relative
Relatív
SJMP AHEAD
Absolute
Abszolút
AJMP BACK
Long
Távoli
LJMP FAR_AHEAD
Indexed
Indexelt
MOVC A,@A+DPTR
2016.09.21.
Bevezetés az assembly nyelvbe
3
Memóriacímzési módok Regiszter címzés Pl. MOV P5, A F5 85 Legyen
= 2CH, ez lesz áttöltve a P5 portra. Direkt címzés Pl. MOV A, 20H E5 20 Legyen <20H> = B7H, ez lesz áttöltve az akkumulátorba. Indirekt címzés - pointer Pl. MOV @R0,A F6 Legyen
= 82H;
= A9H; Eredmény : 82H című rekesz tartalma A9H lesz. Fontos : indirekt címzéshez csak az R0, R1 és DPTR használható. 2016.09.21.
Bevezetés az assembly nyelvbe
4
Memóriacímzési módok Külső memória (64 k) elérése: Pl. MOVX A,@DPTR E0 Legyen
= 1200H; <1200H> = C5H; Eredmény : A = C5H lesz. Indexelt címzés Pl. MOVC A,@A+DPTR 02 80 02 A kód szegmensnek (ROM) az
+ DPTR című memória értéke lesz áttöltve az akkumulátorba. Az akkumulátor index regiszterként használatos Ciklus szervezéséhez (vagy táblázat kezeléséhez) használjuk 2016.09.21.
Bevezetés az assembly nyelvbe
5
Memóriacímzési módok Konstans/Literál címzés Pl. ADD A,#25 24 19 Legyen
= 20H; Az eredmény A = 39H lesz. Legyen
= F0H; Az eredmény A = 09H és CY=1 lesz. Relatív címzés Pl. SJMP #25 80 17 és nem 19 ! Előre ugrik 23-at a jelen utasítás (2 byte) végétől! Pl. SJMP #-20 80 EA -16H és nem -14H ! Visszafelé ugrik 22-őt a jelen utasítás (2 byte) végétől!
Az ugrás -128 .. 127 címtartományban lehet (8 bit komplemens) Ugró és feltételes ugró utasítások használják (CJNE, DJNZ, JZ stb.) 2016.09.21.
Bevezetés az assembly nyelvbe
6
Memóriacímzési módok Abszolút címzés Pl. AJMP #200H 02 00 Előre ugrik a 200H címre
Az ugrás 0..2047 (0..=7FFH) címtartományban lehet (11 bit) Az AJMP és ACALL utasítások használják Távoli címzés Pl. LJMP #8002H 02 80 02 Előre ugrik a 8002H címre A cím 16 bit, ugrás 0..=FFFFH címtartományban lehet (16 bit) Az LJMP és LCALL utasítások használják 2016.09.21.
Bevezetés az assembly nyelvbe
7
Utasítás csoportok - emlékezetető
• • • • •
Arithmetic Operations Logical Operations Data Transfer Operations Boolean Variable Op. Program Branching Op.
• Általános forma: 2016.09.21.
- Aritmetikai - Logikai - Adatmozgatás - Bit szintű logika - Elágazások
instruction Bevezetés az assembly nyelvbe
destination, source 8
Aritmetikai utasítások Mnemonic ADD A, Rn ADD A, direct ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A, direct ADDC A,@Ri ADDC A,#data
SUBB A,Rn SUBB A, direct SUBB A,@Ri SUBB A,#data 2016.09.21.
Description
Mnemonic
Description
A = A + [Rn]
INC A
A=A+1
A = A + [direct memory]
INC Rn
[Rn] = [Rn] + 1
A = A + [memory pointed to by Ri]
INC direct
[direct] = [direct] + 1
A = A + immediate data
INC @Ri
[@Ri] = [@Ri] + 1
A = A + [Rn] + CY
DEC A
A=A-1
A = A + [direct memory] + CY
DEC Rn
[Rn] = [Rn] - 1
A = A + [memory pointed to by Ri] + CY DEC direct
[direct] = [direct] - 1
A = A + immediate data + CY
DEC @Ri
[@Ri] = [@Ri] - 1
A = A - [Rn] - CY
MUL AB
Multiply A & B
A = A - [direct memory] - CY
DIV AB
Divide A by B
A = A - [@Ri] - CY
DA A
Decimal adjust A
A = A - immediate data - CY Bevezetés az assembly nyelvbe
9
Logikai utasítások Mnemonic ANL A, Rn ANL A, direct ANL A,@Ri
Description
Mnemonic
A = A & [Rn]
XRL A, Rn
A = A & [direct memory]
XRL A, direct
A = A & [memory pointed to by Ri] XRL A,@Ri
Description A = A XOR [Rn] A = A XOR [direct memory] A = A XOR [@Ri]
ANL A,#data
A= A & immediate data
XRL A,#data
A = A XOR immediate da ta
ANL direct,A
[direct] = [direct] & A
XRL direct,A
[direct] = [direct] XOR A
ANL direct,#data ORL A, Rn ORL A, direct
ORL A,@Ri
[direct] = [direct] & immediate data XRL direct,#data [direct] = [direct] XOR immediate data A = A OR [Rn]
CLR A
Clear A
A = A OR [direct]
CPL A
Complement A
A = A OR [@Ri]
RL
ORL A,#data
A = A OR immediate data
ORL direct,A
[direct] = [direct] OR A
ORL direct,#data
A
RLC A RR
A
[direct] = [direct] OR immediate data RRC A SWAP A
2016.09.21.
Bevezetés az assembly nyelvbe
Rotate A left Rotate A left (through C) Rotate A right Rotate A right (through C) Swap nibbles 10
Adat mozgató utasítások Mnemonic
Description
MOV @Ri, direct
[@Ri] = [direct]
MOV @Ri, #data
[@Ri] = immediate data
MOV DPTR, #data 16
[DPTR] = immediate data
MOVC A,@A+DPTR MOVC A,@A+PC
MOVX A,@Ri MOVX A,@DPTR MOVX @Ri, A MOVX @DPTR,A
A = Code byte from [@A+DPTR] A = Code byte from [@A+PC]
A = Data byte from external ram [@Ri] A = Data byte from external ram [@DPTR] External[@Ri] = A External[@DPTR] = A
PUSH direct
Push into stack
POP direct
Pop from stack
XCH A,Rn
A = [Rn], [Rn] = A
XCH A, direct
A = [direct], [direct] = A
XCH A, @Ri
A = [@ Rn], [@Rn] = A
XCHD A,@Ri
Exchange low order digits
2016.09.21.
Bevezetés az assembly nyelvbe
11
Bit vezérelt utasítások Mnemonic CLR C CLR bit SETB C SETB bit CPL C CPL bit ANL C,bit ANL C,/bit ORL C,bit ORL C,/bit MOV C,bit MOV bit,C JC rel JNC rel JB bit,rel JNB bit,rel JBC bit,rel 2016.09.21.
Description Clear CY Clear direct bit Set CY Set direct bit Complement CY Complement direct bit AND bit with CY AND NOT bit with CY OR bit with CY OR NOT bit with CY MOV bit to CY MOV CY to bit Jump if CY set Jump if CY not set Jump if specified bit set Jump if specified bit not set if specified bit set then clear it and jump Bevezetés az assembly nyelvbe
12
Elágazások Mnemonic ACALL addr11 LCALL addr16 RET RETI AJMP addr11 LJMP addr16 SJMP rel JMP @A+DPTR JZ rel JNZ rel CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel DJNZ Rn,rel DJNZ direct,rel NOP
2016.09.21.
Description Absolute subroutine call Long subroutine call Return from subroutine Return from interrupt Absolute jump Long jump Short jump Jump indirect Jump if A=0 Jump if A NOT=0 Compare and Jump if Not Equal
Decrement and Jump if Not Zero No Operation
Bevezetés az assembly nyelvbe
13
8051 ASM alapstruktúrák 1. Egyszerű elágazás (If-Then-Else) If a=2 then p5:=255 else p5:=31;
If r1>=r2 then r2:=r2+1 else r2:=r2-1;
2016.09.21.
cjne a,#2,else ; ha a<>2 ugrás az else-re mov P5,#0xFF ; then ág sjmp forward else: mov P5,#31 ; else ág forward:
clr c mov a,r1 subb a,r2 jc else ; Carry=0, ha r1>=r2 inc r2 ; then ág sjmp forward else: dec r2 ; else ág forward: Bevezetés az assembly nyelvbe
14
8051 ASM alapstruktúrák 2. Értékvizsgálat (Case) Case r1 of 1 : P5:=$1F;
2 : P5:=$2F;
4 : P5:=$3F;
8 : P5:=$4F
else P5:=$5F; end; 2016.09.21.
case_1: cjne r1,#1,case_2 orl P5,#0x1F sjmp forward case_2: cjne r1,#2,case_4 orl P5,#0x2F sjmp forward case_4: cjne r1,#4,case_8 orl P5,#0x3F sjmp forward case_8: cjne r1,#8,case_else orl P5,#0x4F sjmp forward case_else: orl P5,#0x5F forward: Bevezetés az assembly nyelvbe
15
8051 ASM alapstruktúrák 3. Feltételes Ciklusok while r2<>[0xA8] do [0xA8]:=[0xA8]+1;
whileloop: mov a,r2 cjne a,0xA8,loopkernel sjmp forward loopkernel: inc 0xA8 sjmp whileloop forward:
r0:=$80 repeat r0:=r0/2;
mov r0,#0x80 repeat_loop: mov a,r0 mov b,#2 div ab mov r0,a cjne r0,#0x10,repeat_loop
until r0=$10
2016.09.21.
Bevezetés az assembly nyelvbe
16
GPIO Konfigurálása Port
Addr
GPIO mode
Addr
Info
P0 (bit add)
0x80
P0MDOUT.[7:0]
0xA4
bitenként 0:Open-Drain 1:PushPull
P1 (bit add)
0x90
P1MDOUT.[7:0]
0xA5
bitenként 0:Open-Drain 1:PushPull
P1MDIN.[7:0]
0xBD
bitenként 0:Analog in
1:GPIO
P2 (bit add)
0xA0
P2MDOUT.[7:0]
0xA6
bitenként 0:Open-Drain 1:PushPull
P3 (bit add)
0xB0
P3MDOUT.[7:0]
0xA7
bitenként 0:Open-Drain 1:PushPull
P3IF
0xAD
Port 3 interrupt flag register
P4 (byte )
0x84
P74OUT
0xB5
P74OUT.1 -> P4[7:4]; P74OUT.0->P4[3:0]
P5 (byte )
0x85
P74OUT
0xB5
P74OUT.3 -> P5[7:4]; P74OUT.2->P5[3:0]
P6 (byte )
0x86
P74OUT
0xB5
P74OUT.5 -> P6[7:4]; P74OUT.4->P6[3:0]
P7 (byte )
0x96
P74OUT
0xB5
P74OUT.7 -> P7[7:4]; P74OUT.6->P7[3:0]
XBR2.6
XBARE Crossbar Enable Bit. 0: Crossbar disabled. All pins on Ports 0, 1, 2, 3, are forced to Input mode. 1: Crossbar enabled.
2016.09.21.
Bevezetés az assembly nyelvbe
17
Portok vezérlésének beállítása • P74OUT (Port 7 – 4 output mode) regiszter • Px (Ports x data) regiszter • Alapéretelmezett értéke: 0x00 (reset után ide áll vissza)
2016.09.21.
• x: 7 – 4 (P4, P5, P6, P7)
Bevezetés az assembly nyelvbe
18
Watchdog timer
• Watchdog Timer Control Register (WDTCN) 0xFF • Engedélyezés, újraindítás: • mov WDTCN,#0xA5
• Letiltás: • mov WDTCN,#0xDE • mov WDTCN,#0xAD
• Letiltás letiltása: • mov WDTCN,#0xFF
• Tankönyv 89. oldaltól….. 2016.09.21.
Bevezetés az assembly nyelvbe
19
Első ASM program • Első ASM program: • LED villogtatás (mindegyik/csak 1) 1 sec időközzel
• A mai óra lépései: • Ismerkedés a fejlesztői környezettel • Általános programváz kialakítása – valamennyi programot ez alapján írjuk majd meg • RAM SFR memóriaterületek definiálása • Kódszegmens megadása • Inicializáló szubrutin megírása • Programtörzs (végtelen ciklus!!!!!!!) megírása • Nagyon egyszerű időzítés megírása (ZH-n nem elfogadható) • A megírt program működtetése 2016.09.21.
Bevezetés az assembly nyelvbe
20
Új project – Silabs IDE 1.
Eszköz összeállítása, majd csatlakoztatása USB kábelen keresztül a számítógépre Fejlesztői környezet elindítása Option/Connection Options – USB adapter – ellenőrzése
2. 3. •
4.
Project/Tool Chain Integration - SDCC – ellenőrzése • •
5.
Assembler: Program Files(x86)/SDCC/bin/asx8051.exe Compiler és Linker: Program Files(x86)/SDCC/bin/sdcc.exe
Project/New Project: •
6.
C80510F2x és Blank Project (név és hely megadásával)
File/New File: •
7. 8.
Ugyanitt Debug Interface-almenüben C2 helyett JTAG kiválasztása.
ASM Source File és Add to Project (név és hely megadásával)
Program megírása, Rebuild All, Connect, DL, Zöld gomb Mentés, végén kimentés wordpad (.txt) formátumba, így elegendő egy projekt az egész ASM félévre 2016.09.21.
Bevezetés az assembly nyelvbe
21
1 másodperces villogtatás
• eszköz elindítása • órajel, portok, gombok, kapcsolók stb... kezdeti értékeinek definiálása • 1 másodpercig várunk – ez alatt „nem csinálunk semmit sem” - számolás • ha lejárt az 1 másodperc, a LED eken állapotot váltunk • addig fut a program, amíg le nem állítjuk (∞ ciklus) 2016.09.21.
Bevezetés az assembly nyelvbe
22
1 másodperces időzítő működése • „egymásba ágyazott ‚for’ ciklusok” • djnz: csökkentsd eggyel a regiszter tartalmát, és ugorj, ha az eredmény nem zérus! Egy djnz parancs 3 órajel alatt fut le.
• A keso0 be van ágyazva a keso1 alá, ami a keso2 alá. • A keso0 ciklus (benne a djnz parancs) ezért lefut összesen 256*256*10=655 360 alkalommal (=R0*R1*R2), ez összesen 1 966 080 órajel (=R0*R1*R2*3) • Ha az órajel 2 MHz, akkor 1 másodperc alatt 2 000 000 órajel fut le, a különbség 33 920 órajel, azaz kb. 0,017 másodperc 2016.09.21.
Bevezetés az assembly nyelvbe
23
1 másodperces időzítő szubrutin működése
djnz R1,keso1
djnz R2,keso2 djnz R0,keso0
3 órajel ciklus 2016.09.21.
Bevezetés az assembly nyelvbe
24
A következő órára • Otthoni – EGYÉNI - feladat: • Módosítsuk a mai órán megírt programot úgy, hogy a LED-ek az alábbi sorrendben világítsanak– egy végtelen ciklusban!: P5.4, P5.6, P5.5, P5.7 • A programot a lehető legegyszerűbben írjuk meg, egy időzítéssel! • Egy másodpercig világít, majd jön a következő, amely szintén egy másodpercig világít, stb. • Most még használjuk az órán megírt időzítést!
• Ha időnk engedi, írjuk meg a programot (az órait is) többféleképpen is! (Többféle, egymástól alig különböző megoldás is lehetséges.) • Lehet játszani különböző ciklikus LED kiírásokkal, álmodjátok meg • Beküldés: .txt formátumban: gyakot megelőző este 8 óra! • Tankönyv 3. fejezete (kb. 30 oldal).
• Következő alkalom: • Gombkezelés • Szekvenciák 2016.09.21.
Bevezetés az assembly nyelvbe
25
Bevezetés az assembly nyelvbe Vége a második gyakorlatnak.
26
×
Report "Bevezetés az assembly nyelvbe"
Your name
Email
Reason
-Select Reason-
Pornographic
Defamatory
Illegal/Unlawful
Spam
Other Terms Of Service Violation
File a copyright complaint
Description
×
Sign In
Email
Password
Remember me
Forgot password?
Sign In
Our partners will collect data and use cookies for ad personalization and measurement.
Learn how we and our ad partner Google, collect and use data
.
Agree & close