• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    LITTLELIAssembler
    TREKIE
    TREKIE --- ---
    uz vim, jak na to... pocita se treba ebx x edx, vysledek je v edx:eax, ecx se muze klidne pouzit na pocitani cyklu (32 iteraci). eax se vynuluje, edx:eax se rotuje doleva a podle carry se pricita do edx:eax ebx.
    LITTLELI
    LITTLELI --- ---
    no tech iteraci muze byt tolik, kolik je vyznamnych jednickovych bitu tedy max. 32. spis mene .)
    LITTLELI
    LITTLELI --- ---
    jo oni prave jsou ruzny finty, jak vysetrit registry, ale je taky fakt, ze clovek to v hlave moc nenosi. se kajicne priznam, ze sem na asm nesahl roky zase.
    TREKIE
    TREKIE --- ---
    flags se samozrejme pouzivat muze (hlavne kvuli cs), tusim, ze je tam nejaky zcela custom bit. ale to, co tady zatim je, je porad klasicka implementace. na jedny prednasce na mff (principy pocitacu, kdo zna, ten vi) bylo i nasobeni, kdy se to, co se pricita a to, kdy se to ma pricist, rotovalo ve 2 registrech, snad bych se na to mel podivat. jen si pak nejsem jistej, jestli na to neni potreba nejaka maska...
    LITTLELI
    LITTLELI --- ---
    FUXOFT: ono je 1, mam tam ten inc. ale diky za upozorneni.
    LITTLELI
    LITTLELI --- ---
    LITTLELI: s/pushf/pusfd/ a s/popf/popfd

    TREKIE: hm no zasobnik je zasobnik, fakt je, ze pri ukladani na zasobnik se deje par veci. ja se na to podivam zase vecer, trebas jeste na neco prijdu. fakt, je ze to tak jako tak bude vychazet ze stejneho algoritmu, kterym nasobi i clovek (trebas na papire), akorat ze to bude postavene na dvojkove bazi.

    jinak pokud se to bere az tak vazne, tak FLAGS je taky registr, predpokladam ze ten se do toho celkoveho poctu registru nepocita :)
    FUXOFT
    FUXOFT --- ---
    TREKIE: No jde jenom o to, schovat si na chvili nekam hodnotu carry flagu. Nebo to jde i bez toho a pokud ten carry bude 1, tak skocis nekam na konec a tam udelas rucne to posledni pricteni.


    LITTLELI: Pozor, v eax musi byt na zacatku 1, ne 0! To je ten vtip.
    TREKIE
    TREKIE --- ---
    diky za napad, ale mam takovy pocit, ze ten zasobnik funguje jako dalsi registr. prece to musi jit uplne bez nej, ne?
    LITTLELI
    LITTLELI --- ---
    FUXOFT: no maji, dokonce je tam instrukce pro rotaci dvojici 32bitovych registru.. ktera klidne muze nahradit ty dva prvni bitshifty... shld eax,ebx,1. myslis tedy takhle?

    	xor   eax,eax
    	xor   ebx,ebx
    	inc   eax
    loop:   shld  eax,ebx,1
            pushf
    	shl   ecx,1
            jnc   nc
            add   ebx,edx
            add   eax,byte 0
    nc:     popf
            jnc   loop
    

    bez zaruky
    FUXOFT
    FUXOFT --- ---
    TREKIE: Naposled jsem v assembleru delal na ZX Spectru,
    tak to napisu v takovem hodne pseudokodu. Doufam, ze ty dnesni procesory
    tyhle instrukce maji :) loop probehne 32krat.

    ; vynasobi ecx * edx, vysledek da do eax (vyssich 32 bitu) a ebx (nizsich 32)
    
            eax = 1
            ebx = 0
    loop:   bitshift ebx doleva s pretecenim do carry
            bitshift eax doleva, pricemz do praveho bitu "vtece" aktualni carry a levy bit pretece do carry
            push flagy
            bitshift ecx doleva s pretecenim do carry
            pokud neni carry, skoc na nc:
            pricti edx k ebx (coz patricne nastavi carry)
            pricti carry k eax
    nc:     pop flagy
            pokud neni carry, skoc na loop:
            END
    
    TREKIE
    TREKIE --- ---
    jo, zapomnel jsem pridat, ze to nesmi byt stupidni n*pricitani, tzn ze to musi mit linearni slozitost vzhledem k poctu bitu...
    LITTLELI
    LITTLELI --- ---
    tedy... 4 registry + flags
    LITTLELI
    LITTLELI --- ---
    ; vstupy, formule: ecx * edx
    	xor eax,eax	; cleanup
    	xor ebx,ebx	; cleanup
    	clc                    ; cleanup
    loop1:	add eax,edx
    	adc ebx,0
    	dec ecx	
    	jnz loop1
    ; vysledek ebx:eax
    


    ? ja jsem nic nepsal ani nepamatuju, to clovek uplne zasne jak najednou nevi!
    tohle je imho hodne dummy, ale zadani to snad splnuje.
    TREKIE
    TREKIE --- ---
    jak napsat nasobeni 2 32bitovych registru na ia32, vysledek ma byt 64 bitovy ve 2 registrech, nesmim pouzit instrukce mul* ani nic z sse a maji mi na to stacit nejvyse 4 32 bitove registry. umim to udelat s 5, ale pro 4 zatim moje mentalni obrazovka zustava prazdna
    LITTLELI
    LITTLELI --- ---
    Programming high-performance applications on the Cell BE processor, Part 1: An introduction to Linux on the PlayStation 3
    Overview, installation, and first programming steps
    http://www-128.ibm.com/developerworks/power/library/pa-linuxps3-1/
    WENCA
    WENCA --- ---
    Ze dekujem. :)
    KYOSUKE
    KYOSUKE --- ---
    LITTLELI
    LITTLELI --- ---
    no a jde se vyvijet :] http://www.cc65.org
    Kliknutím sem můžete změnit nastavení reklam