poradite mi se zacatecnickym prog?

Zdar, to se poda 8)
Prozacatek neres zaporny cisla - pro jejich ulozeni v pameti se pouzivaj 2 formaty, tezko ric, kterej by si prekladac vybral… (pokud vubec nejakej) a tudiz to nemuzes radit - to je nepatrne narocnejci, je tam potreba koukat i do PSW…

Kolega vyse asi presne nepochopil pouziti direktivy EQU pro rizeni prekladace, v uvodnim prispevku je to spravne - pokud k x0 pomoci EQU priradis cislo, prekladac vsude x0 nahradi cislem, to je dobre :wink:
pouziti # u mov je taky spravne - znamena to, ze cislo (ktere tam prekladac doplni) je hodnota (nikoli adresa).

  1. problem bude v plneni pameti - mov r0,a - u r0 chybi zavinac… takhle totiz nactec cislo do r0 a pak prictes 1, to asi nechces :wink: Spravne to bude mov @r0,a - tzn. na adresu, ktera je ulozena v r0, zapis cislo z “a” :wink:
    ale v tomto pripade lepsi reseni: mov @r0, #x0 - mov umi pri neprimym adresovani pracovat s konstantou jako druhym operandem :wink:
    jinak obecne by se asi pracovalo s primou adresou :wink:

Dalsi zasadni nedostatek je, ze neinicializujes r0 - je potreba do nej na zacatku zadat adresu, od ktere se budou cisla ukladat… Oblast registrovych bank konci adresou 2Fh, oblast SFR zacina na 80h, takze mas k dispozici misto MEZI temito adresami - takze nejlepsi bude nastavit nazacatku r0 na 30h, jelikoz tu pamet plnis odspod nahoru. Taky je nutne brat v uvahu nasmerovani Stack Pointeru, protoze pouzivas podprogram a instrukce push a pop, ale ve tvem pripade to nebude problem, kdyz budes pouzivat RAM od adresy 30h, stack bude mit dost mista (22bytu, pokud nepouzijes bitovou oblast, stack zacina na 07h a roste nahoru)

Na porovnavani cisel je lepsi instrukce CJNE (compare and jump if not equal). kdyz nejsou cisla shodna, tak skoci, potom podle podle toho, ktery operand je vetsi, se ridi bit Carry v PSW: je-li prvni operand mensi nez druhy, C = 1, jinak 0

to je odemne prozacatek vsechno, chtel jsem jeste smotnout zacatek toho kodu, ale tlaci me cas, tak kdyztak vecir :wink: