AT89C2051 a jeho PC
Moderátor: Moderátoři
-
Návštěvník
AT89C2051 a jeho PC
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?
-
Tik
ATxx51
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.
-
Tik
Pro eljaro
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
-
Tik
Pro eijaro
Instrukce LCALL dela to stejne ale ma 3byty.
Strojovy kod: /0001010/high cadr/low cadr/
a tak tomu bude navzdy!!!
-
Návštěvník
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.
-
Návštěvník