AT89C2051 a jeho PC
Moderátor: Moderátoři
AT89C2051 a jeho PC
Jak pracuje Program Counter u tohoto (a 8951 podobných) procesorù?
V pdf pøíruèce popisující instrukèní sadu jsem se doèetl, že rùzné instrukce jsou rùznì dlouhé (od jednoho do tøí bajtù). Jak jsou potom seøazené?
U PICu mi to bylo jasné - co 14bit. instrukce to adresovatelný "øádek" programu. Adresovat PC èítaè do poloviny instrukce je zhola nemožné.
Pøipadá mi, jako kdybych mohl na 8951 neúmyslným použitím napø.funkce ACALL "natoèit" PC pøesnì doprostøed instrukce, když bude v ROMce "rozlezlá" pøes tøi bajty..
Jak to funguje? Když procesor narazí na Opcode dané instrukce, nejspíš se dozví o kolik bajtù se má PC posunout (délka dané instrukce je naštìstí konstantní) ale co když použiju funkci ACALL?
V pdf pøíruèce popisující instrukèní sadu jsem se doèetl, že rùzné instrukce jsou rùznì dlouhé (od jednoho do tøí bajtù). Jak jsou potom seøazené?
U PICu mi to bylo jasné - co 14bit. instrukce to adresovatelný "øádek" programu. Adresovat PC èítaè do poloviny instrukce je zhola nemožné.
Pøipadá mi, jako kdybych mohl na 8951 neúmyslným použitím napø.funkce ACALL "natoèit" PC pøesnì doprostøed instrukce, když bude v ROMce "rozlezlá" pøes tøi bajty..
Jak to funguje? Když procesor narazí na Opcode dané instrukce, nejspíš se dozví o kolik bajtù se má PC posunout (délka dané instrukce je naštìstí konstantní) ale co když použiju funkci ACALL?
ATxx51
Zrejme dobre nechapes instrukci ACALL.
Instrukce slouzi pro kratke volani podprogramu (pouze 2kB), takze jejim
parametrem je prima adresa kodu podprogramu ktery musi koncit instrukci RET.
ACALL cadr
Cinnost instrukce:
PC <- (PC)+2
SP <- (SP)+1
(SP) <- (lowPC)
SP = (SP)+1
(SP) <- (highPC)
PC /D0...D10/ <- cadr
RET
Cinnost instrukce:
(highPC) <- ((SP))
SP <- (SP)-1
(lowPC) <- ((SP))
SP = (SP)-1
Takto se chovaji vsechny procesory s 8bit pro kod.
Instrukce slouzi pro kratke volani podprogramu (pouze 2kB), takze jejim
parametrem je prima adresa kodu podprogramu ktery musi koncit instrukci RET.
ACALL cadr
Cinnost instrukce:
PC <- (PC)+2
SP <- (SP)+1
(SP) <- (lowPC)
SP = (SP)+1
(SP) <- (highPC)
PC /D0...D10/ <- cadr
RET
Cinnost instrukce:
(highPC) <- ((SP))
SP <- (SP)-1
(lowPC) <- ((SP))
SP = (SP)-1
Takto se chovaji vsechny procesory s 8bit pro kod.
tak horký to není jak píšeš instrukce má skutečně od 1 do 3 bytů a zpravidla je to způsobeno tím co vlastně ta instrukce dělá ! asi ses trochu nechal zmást jeden byte obsahuje kod instrukce a těch je 00h až po ffh a zbytek záleží na instrukci samotné pokud instrukce pracuje i jinými registry než systémovými musí určit vlastně s jakými a ta jsou ty další 1 až dva byte kodu ! viz tebou míněná instrukce acall kád je pak F1h + adresa 11bitová . Mislím že by sis mněl napsat nějaký jednoduchý prográmek a spusti simulaci a bude ti to jasné !
Pro eljaro
Asi si nebudeme rozumet, o jakem jadre pises???
Instrukce ACALL u vsech xx51 slouzi vyhradne k volani podprogramu a
jeji strojovy kod ma 2 byty /aaa10001/aaaaaaaa/,
doufam ze tady nebudu vyucovat zaklady programovani jadra x51.
PS.
x51 neprestanu milovat![Laughing :lol:](./images/smilies/icon_lol.gif)
Instrukce ACALL u vsech xx51 slouzi vyhradne k volani podprogramu a
jeji strojovy kod ma 2 byty /aaa10001/aaaaaaaa/,
doufam ze tady nebudu vyucovat zaklady programovani jadra x51.
PS.
x51 neprestanu milovat
![Laughing :lol:](./images/smilies/icon_lol.gif)
Pro eijaro
Pro uplnost!!!
Instrukce LCALL dela to stejne ale ma 3byty.
Strojovy kod: /0001010/high cadr/low cadr/
a tak tomu bude navzdy!!!
Instrukce LCALL dela to stejne ale ma 3byty.
Strojovy kod: /0001010/high cadr/low cadr/
a tak tomu bude navzdy!!!
Ano, pri normalnim behu se PC zvysuje o tolik bytu kolik jich ma instrukce na kterou ukazuje (to je dane).
V pripade skoku (tech je u x51 nejvice (18)) pouziva kazdy kompilator navesti (pro ziskani relativni adresy kam ma skocit) a ta je operandem instrukce, tim se zabrani skoku do neznama.
Vubec mi neni jasne k cemu by byla instrukce MOV PC,data
na stesti neexistuje ale s PC lze delat malou obklikou cokoliv (vyssi divci).
Aby to melo nejaky smysl tak je to o vlastnim kompilatoru protoze
zadny existujici takove prasarny nedovoli.
V pripade skoku (tech je u x51 nejvice (18)) pouziva kazdy kompilator navesti (pro ziskani relativni adresy kam ma skocit) a ta je operandem instrukce, tim se zabrani skoku do neznama.
Vubec mi neni jasne k cemu by byla instrukce MOV PC,data
na stesti neexistuje ale s PC lze delat malou obklikou cokoliv (vyssi divci).
Aby to melo nejaky smysl tak je to o vlastnim kompilatoru protoze
zadny existujici takove prasarny nedovoli.
no pončin vlastního programu je chvályhodná věc !
osobně všechny takové obdivuji já už se moc do učení nehrnu a jde mi líp ten hadware ! a pak věkově to už není moje parketa ! Ale itak přeji hodně štěstí při vývoji ! Ale osobně bych rád ši potkal někoho kdo dokáže mluvit s periferiemi pod xp - žádné složitosti prostě načíst a zobrazit nějaký data a pořípadě je i vrátit - ale jak se ukazuje je to dysciplína jen pro otrlé a už se začínám bát že se to fakt budu muset začít učit sám !
pro inspiraci
http://www.vaultbbs.com/pinnacle/ koukni sem ! jejich x51 studio jede ve demu až do 2kb kodu a i pak stojí jen 99$ tak není důvod možná ani to vyvíjet ?! ale itak dej vědět jak to dopadlo ! Já sice už utekl k pic ale to je jiná kapitola ! Tak tedy hodně zdaru ! ![Twisted Evil :twisted:](./images/smilies/icon_twisted.gif)
![Question :?:](./images/smilies/icon_question.gif)
![Exclamation :!:](./images/smilies/icon_exclaim.gif)
![Twisted Evil :twisted:](./images/smilies/icon_twisted.gif)