forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
poradite mi se zacatecnickym prog?
Jdi na stránku Předchozí  1, 2
 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052
 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 06 duben 2008, 14:31    Předmět: Citovat

Proti tomu, ze se s doplnkovym formatem pocita snadneji samozrejme nic nenamitam a uvedeny priklat to jen potvrzuje Wink
Co je floating point vim velice presne (dle normy IEEE 754) a jakekoli cislo (v jeho rozsahu a presnosti) do neho dokazu za par minut na papire prevest... To, ze tomu rikam realne cislo je jen slovickareni. Ikdyz je pravda, ze je to nepresne, protoze cisla s neukoncenym desetinnym rozvojem nejdou vyjadrit uplne presne. Ted me tak napada, FP vlastne neumi vyjadrit presne ani mnoho celych cisel Confused

Nez dohadovani se o slovickach by me spis zajimalo, jak se dari LL Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
jankop
moderátor
moderátor


Založen: 24.10.2007
Příspěvky: 336
Bydliště: Brno

PříspěvekZaslal: 06 duben 2008, 19:06    Předmět: Citovat

Formát čísla je jednoznačně dán programátorem. Je plně v mojí kompetenci, jaké kódování použiji. Jednotkový doplněk, dvojkový doplněk.... nebo nějaký jiný kód. Pokud má ALU signalizaci přenosu a výpůjčky a umí sčítat a negovat, pak jsem schopen počítat v oboru celých čísel, reálných čísel atp. Pokud ALU podporuje například operace v BCD nebo plovoucí čárce, tak to může být přínos, ale není to nezbytné.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
 

 
Technik
Anonymní





PříspěvekZaslal: 06 duben 2008, 21:46    Předmět: Citovat

Ano. Programátor si může určit jakýkoliv formát, ale v okamžiku, kdy bude chtít čísla sečíst, bude je muset převést na standatrní formát a pak součet převádět zpět do původního formátu. To je kontraproduktivní.

jankop napsal:
Pokud má ALU signalizaci přenosu a výpůjčky a umí sčítat a negovat, pak jsem schopen počítat v oboru celých čísel, reálných čísel atp.


Já taky. Stačí jen ty příznaky a sčítaní. Negace je complement+ increment. Ale když už tu vedemte takovou akademickou debatu, přemýšlejte jak se dají nahradit chybějící příznaky half carry u 32b procesoru tak, aby bylo možné pracovat s 8 místným BCD kódem. Je to možné nebo ne?
Návrat nahoru
 

 
The_LL
Anonymní





PříspěvekZaslal: 08 duben 2008, 19:37    Předmět: Citovat

Joj tak jsem splodil neco velice neprofesionalniho ale vesmes efektivniho Wink pro zajimaovst zde

kód:


      x0 equ 4
      x1 equ 5
      x2 equ 6
      x3 equ 7
      x4 equ 8


start:                      
        call    porovnej0s1   

porovnej0s1:
         push Acc
         MOV    a,#x0
         CLR    c      
         subb    a,#x1    ;porovnani #x0#x1
         jnc      porovnej0s2
         call   porovnej1s2
         pop acc
porovnej0s2:
         push acc
         MOV    a,#x0
         CLR    c      ; vymazani carrybitu
         subb    a,#x2    ;porovnani #x0#x2
         jnc    porovnej0s3
         call    porovnej2s3
         pop acc
porovnej0s3:
          push acc   
         MOV    a,#x0
         CLR    c      
         subb    a,#x3    ;porovnani #x0#x3
         jnc    porovnej0s4
         call    porovnej3s4
          pop acc
porovnej0s4:
         push acc
         MOV    a,#x0
         CLR    c      
         subb    a,#x4    ;porovnani #x0#x1
         jnc   zapisX0jakomax
         call   zapisX4jakomax      
          pop acc

porovnej1s2:
           push acc
         MOV    a,#x1
         CLR    c      
         subb    a,#x2
         jnc      porovnej1s3   ; IF 2 > 1     GO 2s3
         call   porovnej2s3      ;if 1>2 go 1s3
           pop acc
porovnej1s3:
          push acc
         MOV    a,#x1
         CLR    c      
         subb    a,#x3
         jnc      porovnej1s4    ;If 3>1 go 3s4
         call   porovnej3s4      ;If 1>3 go 1s4
          pop acc
porovnej1s4:
           push acc      
         MOV    a,#x1
         CLR    c      
         subb    a,#x4
         jnc      zapisX1jakomax    ;If 4>1 GO ZAPISS4jakomax
         call   zapisX4jakomax     ;If 1>4 zapisX1jakomax
           pop acc
porovnej2s3:
          push acc
         MOV    a,#x2
         CLR    c      
         subb    a,#x3
         jnc      porovnej2s4      ;If 3>2 go 3s4
         call   porovnej3s4      ; if 2>3 go 2s4
          pop acc
porovnej2s4:
           push acc
         MOV    a,#x2
         CLR    c
         subb    a,#x4
         jnc      zapisX2jakomax    ; If 4>2 GO ZAPISS4jakomax
         call   zapisX4jakomax ;If 2>4 zapisX1jakomax
          pop acc
porovnej3s4:
          push acc
         MOV    a,#x3
         CLR    c      
         subb    a,#x4
         jnc      zapisX3jakomax    ; If 4>3 GO ZAPISS4jakomax
         call   zapisX4jakomax ;If 3>4 zapisX3jakomax
          pop acc

zapisx0jakomax:   
            MOV DPL,#x0
            jmp konec
zapisx1jakomax:   
            MOV DPL,#x1
            jmp konec
zapisx2jakomax:
            MOV DPL,#x2
            jmp konec
zapisx3jakomax:
            MOV DPL,#x3
            jmp konec
zapisx4jakomax:
            MOV DPL,#x4
            jmp konec
konec:  jmp konec                         ;
end



ted uz jen poresit ty znamenka Embarassed ty mne na tom vsem opravdu "stvou" Wink
mj moje mzateny komenty jsem se snazil vymazat Razz nektery tam zustaly... ale pro vas stejne jsou bezpredmetny ;p
Návrat nahoru
 

 
Anonymní






PříspěvekZaslal: 08 duben 2008, 19:45    Předmět: Citovat

Jinak vam vsem moc diky za rady a napady urcite mi to pomaha Embarassed Exclamation
Návrat nahoru
 

 
Technik
Anonymní





PříspěvekZaslal: 08 duben 2008, 21:55    Předmět: Citovat

The_LL napsal:

kód:

   jnc   porovnej0s2
   call   porovnej1s2
   pop acc
porovnej0s2:

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.
Návrat nahoru
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 09 duben 2008, 0:16    Předmět: Citovat

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 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
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Technik
Anonymní





PříspěvekZaslal: 09 duben 2008, 22:44    Předmět: Citovat

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

kód:

         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


Návrat nahoru
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2139

PříspěvekZaslal: 09 duben 2008, 23:18    Předmět: Citovat

Rychlejsi to urcite bude, ale nevim, jesli to The_LL pochopi
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
The_LL
Anonymní





PříspěvekZaslal: 10 duben 2008, 16:12    Předmět: Citovat

Ale jo mam nejaky scripta a kdyz si prectu co konkretni prikaz dela tak to rozlouzknu Wink
Návrat nahoru
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052 Časy uváděny v GMT + 2 hodiny
Jdi na stránku Předchozí  1, 2
 
Strana 2 z 2
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2018 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)