poradite mi se zacatecnickym prog?

Tak tenhle kousek kódu povede k nekontrolovatelnému přetečení zásobníku. Instrukce pop Acc nesmí být podmíněna instrukcí JNC, když je před ní nepodmíněná PUSH Acc. Asi label “porovnej0s2” má být před POP Acc.

jj, v delsim programu toto byt nesmi (v takto kratkem by to jeste nebyl problem, protoze se to projde jen 1x). Tady ale push a pop nepotrebujes vubec, protoze to, co mas v Acc po porovnani uz k nicemu nevyuzivas :wink:

Co si urcit napriklad jeden z registru jako vysledek :wink: Prvni cislo bys do nej nacetl primo, a ty dalsi bys jenom porovnaval… Pokud by nektere z nasledujicich cisel bylo vetsi, jenom bys ho do toho registru presunul a bylo by… Potom by ti stacily jen 4 porovnani a mel bys vysledek :slight_smile:

Pokud jde o znamenkova cisla, pro ucely porovnani bez znalosti funkce bitu v PSW ti staci asi toto:
jsou-li obe cisla do 127 vcetne(obe kladna), vetsi cislo je vetsi
jsou-li obe cisla od 128 do 255 vcetne(nejvyssi bit = 1, obe cisla zaporna), vetsi cislo je vetsi
pouze je-li jedno cislo do 127(kladne) vcetne a druhe vetsi(zaporne), tak to mensi je ve skutecnosti vetsi :wink:
K porovnani lze celkem pohodlne vyuzit instrukci CJNE
Jinak pokud by byla cisla umistena v bitove oblasti (adresa 20-30h), tak by bylo mozno testovat nejvyssi bit primo :wink:

Proč tak komplikovaný algoritmus. Co třeba takhle:

         mov A,Operand1          ;signed byte
         clr C
         subb A,Operand2          ;signed byte
         jnb PSW.OV, Negace
         cpl Acc.7
Negace:                                 ;Acc.7 = Acc.7 xor OV
         jnb Acc.7,JeVetsi            ;Operand1>=Operand2 

Rychlejsi to urcite bude, ale nevim, jesli to The_LL pochopi

Ale jo mam nejaky scripta a kdyz si prectu co konkretni prikaz dela tak to rozlouzknu :wink: