2002-12-04, 13:17
  #1
Medlem
1) hur får man tillgång till ett 64kb minne? (lyckades inte direkt declarera 64k's variabler)
2) vet nån någon bra sida om bmp formatet? (rle & rgb)
3) vad heter den höga delen av eax-registret?
4) finns det något bra (effektivt) sätt att ta fram kvadratroten ur ett tal
har redan kollat Paul Heish (tror han hette så) sida och fsqrt funkar
tydligen inte?

//law
Citera
2002-12-04, 17:41
  #2
Medlem
Ett svar iaf...

Vad jag vet finns det inget namn på den höga delen av EAX.

:roll:
Citera
2002-12-04, 19:42
  #3
Medlem
Note : Detta inlägg kan innehålla helt inkorrekt fakta


hummm... e:et i eax är förkorting av engelska ordet 'extended' ( ej säker, men iaf ska det vara något i den stilen ). registret eax är på få se 32 bitar eller byte eller något ( ifs så är det jävligt stor skilnad på 16 bitar och 16 byte ( = 128 bitar ) =P ).

Det du tänker på är ax registret som är på 16 bitar eller byte, och så tänker du på ah som motsvarar bita/byten 18-15 ( al är bitar/byten 0-7 )...


fsqrt har jag inte hört talas om...


Note : Detta inlägg kan innehålla helt inkorrekt fakta
Citera
2002-12-04, 20:04
  #4
Medlem
Liquid_Xs avatar
nja...

ska se om jag kan reda ut det hela

eax = 32bitas register i cpu:n
ax = 16bitars regiser
ah = 8 bitars register (a high)
al = 8 bitars register (a low)

al+ah är samma som ax, ax utgör den 'lägre' delen av eax (dvs 0-15)

tror det blev rätt iaf, gällande minnes alokering, komma aldrig så långt i mitt asm lekande..
Citera
2002-12-04, 23:14
  #5
Medlem
EAX

Kan bekräfta att din förklaring var rätt Liquid_X

:roll:
Citera
2002-12-05, 12:42
  #6
Medlem
jag hittade föresten svaret på av mina egna frågor, om nån är intresserad så kan ni ju använda denna metod för att räkna ut kvadratroten på tal från 1-32 bitar (dock får du inte några decimaler men va fan)...

det funkar så här:

(först låt oss säga att vi vill ha roten ur 36!)

ecx,ebx,edx startar med värdet 1.
ecx ökas hela tiden med 1.
ebx ökas med värdet 2
edx ökas med ebx

(ökningen sker tills edx blir lika eller större än det talet man vill ha ut)
(i detta fall 36)

så ökningen kommer se ut nått så här:

ecx: 1,2,3,4,5,6
ebx: 1,3,5,7,9,11
edx: 1,4,9,16,25,36

som ni ser är edx nu exakt 36! därför kommer kvadratroten att vara lika med ecx alltså 6 (6^2 =36!)

vi testar ett till säg ...53!

ecx: 1,2,3,4,5,6,7,8
ebx: 1,3,5,7,9,11,13,15
edx: 1,4,9,16,25,36,49,64 (64 är större än 53!, loopen avslutas)

nu använder man istället ecx-1 alltså 7! (7^2 = 49) genom att ta förra edx värdet alltså 49 och slå det minus 53 (vårat tal) får man felet alltså 4.

så 53 = 7^2 + 4

fräckt va!!!!!

det sätt borde vara det smartaste eftersom bara addition och subtraktion används, så optimeringen borde vara perfekt.
Om nån orkar och vill kan ni ju räkna ut hur många klockcyklar det tar

//law
Citera
2002-12-07, 02:08
  #7
Medlem
Citat:
Ursprungligen postat av Liquid_X
nja...

ska se om jag kan reda ut det hela

eax = 32bitas register i cpu:n
ax = 16bitars regiser
ah = 8 bitars register (a high)
al = 8 bitars register (a low)

al+ah är samma som ax, ax utgör den 'lägre' delen av eax (dvs 0-15)

tror det blev rätt iaf, gällande minnes alokering, komma aldrig så långt i mitt asm lekande..

Stämmer fint
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in