|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
71GA Član
Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.16 Kraj: Ljubljana
|
Objavljeno: Čet Feb 17, 2011 10:22 am Naslov sporočila: assembly ukaz .word |
|
|
Živijo. Sem naletel na assembly ukaz .word, ki je v startup kodi mikroprocesorja uporabljen na čuden način.
Koda: |
_undf: .word _reset |
Labela _undf je tukaj uporabljena prvič. Tudi _reset, ki se nahaja za .word je uporabljen prvič. Kaj ta ukaz naredi? Ali mogoče reče, naj kateri koli OBJEKT skoči na labelo _undef v kolikor naleti na spremenljivko _reset tipa word? Možno, da sem usekal popolnoma mimo... |
|
Nazaj na vrh |
|
|
Benjamin Član
Pridružen-a: Tor 10 Jul 2007 11:23 Prispevkov: 116 Aktiv.: 0.57 Kraj: Trebnje, Ljubljana
|
Objavljeno: Čet Feb 17, 2011 11:37 am Naslov sporočila: |
|
|
Živjo!
Na kratko: ko procesor naleti na nedefinirano inštrukcijo (undefined instruction), se ti bo procesor resetiral.
Malo daljše: nekje nad to vrstico bi moral imeti nekaj podobnega:
Koda: |
_start: b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq |
Se pravi, ko procesor naleti na nedefinirano inštrukcijo, bo šel pogledati v zgornjo tabelo vektorjev ter nato skočil na naslov, ki je podan z _undf oz. _reset. _________________ Cessna 152: "Flight Level Three Thousand, Seven Hundred"
Controller: "Roger, contact Houston Space Center" |
|
Nazaj na vrh |
|
|
71GA Član
Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.16 Kraj: Ljubljana
|
Objavljeno: Pet Feb 18, 2011 10:23 am Naslov sporočila: |
|
|
Benjamin je napisal/a: |
Živjo!
Na kratko: ko procesor naleti na nedefinirano inštrukcijo (undefined instruction), se ti bo procesor resetiral.
|
Kje v moji kodi se to zgodi prvič?
Benjamin je napisal/a: |
Živjo!
Malo daljše: nekje nad to vrstico bi moral imeti nekaj podobnega:
Koda: |
_start: b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq |
Se pravi, ko procesor naleti na nedefinirano inštrukcijo, bo šel pogledati v zgornjo tabelo vektorjev ter nato skočil na naslov, ki je podan z _undf oz. _reset. |
V bistvu imaš popolnoma prav! Moja koda izgleda takole:
Koda: |
Vectors:
b _start // reset - _start
ldr pc,_undf // undefined - _undf
ldr pc,_swi // SWI - _swi
ldr pc,_pabt // program abort - _pabt
ldr pc,_dabt // data abort - _dabt
nop // reserved
ldr pc,[pc,#-0xFF0] // IRQ - read the VIC
ldr pc,_fiq // FIQ - _fiq
#if 0
// Use this group for production
_undf: .word _reset // undefined - _reset
_swi: .word _reset // SWI - _reset
_pabt: .word _reset // program abort - _reset
_dabt: .word _reset // data abort - _reset
_irq: .word _reset // IRQ - _reset
_fiq: .word _reset // FIQ - _reset
#else
// Use this group for development
_undf: .word __undf // undefined
_swi: .word __swi // SWI
_pabt: .word __pabt // program abort
_dabt: .word __dabt // data abort
_irq: .word __irq // IRQ
_fiq: .word __fiq // FIQ
__undf: b . // undefined
__swi: b . // SWI
__pabt: b . // program abort
__dabt: b . // data abort
__irq: b . // IRQ
__fiq: b . // FIQ
#endif |
Kot vidiš je zadeva še malo bolj zapletena Se pravi, če sem jaz pravilno razumel, je na začetku nek branch instruction b _start a ne vem, kaj to naredi. Potem z ukazom ldr pc, _undf v program counter zloadamo naslov labele _undf. Ko v naslednjem koraku program skoči na labelo _undf tam najde ukaz .word _reset in skoči naprej na labelo _reset, katere kode nisem prilepil v post. Toda labela _undf je malo nižje podana ponovno (glej #else) in sledi ji ukaz, ki kaže na labelo __undf, kjer se nahaja ukaz b .. Kaj s tem dosežemo? |
|
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: 79 dni
Powered by phpBB © 2001, 2005 phpBB Group
|