Tento web používá soubory cookie. Dalším používáním webu s tímto souhlasíte.
jméno
heslo
přihlásit
zaregistrujte se
zapomněli jste heslo?
Assembler
LITTLELI
there are 10 types of people in the world. those who understand binary, and those who don't.
windows bring the power of yesterday computers in nowadays
sexy nastenka
Máte k tomu co říct? Vložte se do diskuze.
LITTLELI --- 10:47:37 1.3.2007
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 --- 10:46:33 1.3.2007
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 --- 10:32:38 1.3.2007
FUXOFT: ono je 1, mam tam ten inc. ale diky za upozorneni.
LITTLELI --- 10:31:34 1.3.2007
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 --- 10:30:23 1.3.2007
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 --- 9:12:50 1.3.2007
diky za napad, ale mam takovy pocit, ze ten zasobnik funguje jako dalsi registr. prece to musi jit uplne bez nej, ne?
LITTLELI --- 8:59:01 1.3.2007
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 --- 1:37:34 1.3.2007
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 --- 23:41:34 28.2.2007
jo, zapomnel jsem pridat, ze to nesmi byt stupidni n*pricitani, tzn ze to musi mit linearni slozitost vzhledem k poctu bitu...
LITTLELI --- 23:33:04 28.2.2007
tedy... 4 registry + flags