 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3362 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sre Dec 18, 2013 12:53 pm Naslov sporočila: Assembler AVR neznanje |
|
|
Skušam pomočiti svoj kljun tudi malo v assembler. Pri 8051 mi je to nekako uspelo, tukaj pa ne razumem in me bega sledeče:
Naredil sem disassembler nekega programa. Izvleček izgleda tako:
Koda: |
clr r25 ; 004E 2799
sts 0x0060, r24 ; 004F 9380 0060
sts 0x0060, r25 ; 0051 9390 0060
ldi ZL, 0xFE ; 0053 EFEE
ldi ZH, 0x0F ; 0054 E0FF
ldi XL, 0x00 ; 0055 E0A0 |
Prvo ugibanje: prva kolona izza podpičja predstavlja naslov, kje v flash pomniniku se nahaja instrukcija, druga in morebiti tretja kolona pa hex vsebino, kako izgleda instrukcija. Drži?
Če drži, potem dilema: Instrukcije imajo povprečno dva bajta, sodeč po izpisu tretje kolone. Kako potem se naslov povečuje samo za 1?
Če je instrukcija dolga z parametrom 4 bajte, se naslov poveča za 2.
Ali potem drži, da so instrukcije v flash pomnilniku v dvobajtnih besedah in je potemtakem naslov v prvi koloni naslov dvobajtne besede v dvojnih bajtih in pomeni potemtakem 4 dejansko naslov 8-ga bajta v flashu?
Naprej:
Koda: |
ldi r24, 0x10 ; 0043 E180
|
Load immediate instrukcija zgoraj ima dva parametra, kam je treba polniti, v R 24, seveda in kaj naj se napolne 0X10 seveda. Toda niti enega niti drugega ne vidim v E180, kar je interna oblika ukaza. Prosim pojasnilo, gotovo kdo, ki ve,
Naprej:
Koda: |
avr0058: st X+, r24 ; 0058 938D
sbiw ZL, 0x01 ; 0059 9731
brne avr0058 ; 005A F7E9 |
Ukaz brne naj skoči na naslov avr0058 in to je dejansko 0058, toda v argumentu ukaza ne vidim tega naslova. Pomoč!
Gotovo gre samo za nerazumevanje, ko me bo kdo podučil, mi bo jasno.
Hvala. |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.39
|
Objavljeno: Sre Dec 18, 2013 1:01 pm Naslov sporočila: |
|
|
Flash ni 8-bit, ampak širši (takole na pamet ne vem točno, koliko bitov ima).
Zato se lahko tudi "ldi r24, 0x10" spakira na eno adreso, ker je dovolj bitov za opcode in parameter. _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
S53DZ Član



Pridružen-a: Čet 28 Apr 2011 9:27 Prispevkov: 951 Aktiv.: 5.52 Kraj: Ljubljana
|
Objavljeno: Sre Dec 18, 2013 1:07 pm Naslov sporočila: |
|
|
immediate način naslavljanja ima po navadi dve obliki:
- če je operand majhen, je sestavni del instrukcije (ni nujno poravnan na bit 0)
- če je operand velik, je podan v naslednjih bajtih
- (če je operand še večji, je naslovljen in spravljen v ram na koncu kode)
ukaz BR(NE) je BRANCH in ne JUMP, zato se v instrukciji skrije le izračunani relativni (+/-) skok do destinacije (ni nujno poravnan na bit 0). |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 501 dni
Powered by phpBB © 2001, 2005 phpBB Group
|