FenrisC0de Skrevet 19. november 2008 Del Skrevet 19. november 2008 Hei! Jeg ønsker å finne ut hvordan flyt-tall (float) blir behandlet i Pentiumsystemer. Jeg har følgende C-program: void main(){ float t1, t2, sum; t1=5.25; t2=6.75; sum=t1+t2; } Jeg prøver å se hva assemblykoden sier om flyttalsbehandlingen, men skjønner ikke helt hva som skjer. Har skjønt hvordan tilsvarende kode med heltall fungerer, men med float blir det straks litt værre. Jeg får følgende relevante Assembly kode. void main(){ 00B41370 push ebp 00B41371 mov ebp,esp 00B41373 sub esp,0E4h 00B41379 push ebx 00B4137A push esi 00B4137B push edi 00B4137C lea edi,[ebp+FFFFFF1Ch] 00B41382 mov ecx,39h 00B41387 mov eax,0CCCCCCCCh 00B4138C rep stos dword ptr es:[edi] [b]float t1, t2, sum; t1=5.25; 00B4138E fld dword ptr ds:[00B45740h] 00B41394 fstp dword ptr [ebp-8] t2=6.75; 00B41397 fld dword ptr ds:[00B4573Ch] 00B4139D fstp dword ptr [ebp-14h] sum=t1+t2; 00B413A0 fld dword ptr [ebp-8] 00B413A3 fadd dword ptr [ebp-14h] 00B413A6 fstp dword ptr [ebp-20h] [/b] } Den uthevede skriften er det jeg ikke skjønner helt! Er det noen her som kunne kaste litt lys over situasjonen? Tusen takk! Lenke til kommentar
aC Skrevet 20. november 2008 Del Skrevet 20. november 2008 tja, hadde om dette engang i tiden. Glemt det meste evt se her: http://www.uio.no/studier/emner/matnat/ifi...k/uke-17-4x.pdf ps. asmkoden er AT&T syntax ikke intel Lenke til kommentar
teflonpanne Skrevet 20. november 2008 Del Skrevet 20. november 2008 Kan forresten anbefale den boken de bruker i kurset over, inf2270 datamaskinarkitektur, på det varmeste. http://csapp.cs.cmu.edu/ Computer systems a programmers perspective Jeg kunne egentlig ikke så mye om hvordan hardwaren fungerte på lavnivå eller assembler-koding og sånt, men den boken var utrolig intuitiv og forklarer det meste på en lettvindt måte. Det er verken en ren hardware-bok eller assembler-bok eller c-bok, men den blander alt så du får innsikt i hvordan du kan skrive assembler og c-kode for å best utnytte den underliggende hardwaren, spesielt prosessoren og rammen/cachen. Det er vel faktisk mer C-kode i boken enn assembler, men du kommer til å forstå x86-assembler på et veldig basic grunnlag når du er ferdig og du kommer til å være en mye bedre C-programmerer når du vet hvordan kompilatoren og prosessoren oversetter C-koden til maskinkode. Spesielt kapittel 5 som handler om optimalisering av C-kode er morsomt. Hvis du er interessert i å lære mer om dette er denne boken definitivt en bra investering. Og du ser de fleste som har reviewet den syns det samme. Lenke til kommentar
Emancipate Skrevet 30. november 2008 Del Skrevet 30. november 2008 Her står alt du trenger å vite: http://www.ray.masmcode.com/tutorial/index.html void main() { float t1, t2, sum; t1=5.25; t2=6.75; sum=t1+t2; } t1 = 5.25 ; last inn 5.25 på fpu-stakk, forutsetter at kompilatoren har lagret 5.25 som flyttall et annet sted i minnet på forhånd. ; fpu-instruksjonene tar ikke konstanter, kun variabler, så konstanter må emuleres som variabler av kompilatoren fld dword [memaddress_of_constant_5.25] ; ta 5.25 av fpu-stakk og lagre i t1 fstp dword [memaddress_of_t1] Samme som over, men med heltall: push dword [verdi] pop dword [t1] sum=t1+t2; (mer tydelig men mindre effektiv versjon enn din) fld dword [v_t1]; last inn t1 på fpu-stakk fld dword [v_t2]; last inn t2 på fpu-stakk faddp; summer de to øverste på fpu-stakk, pop fpu-stakk og lagre summen på toppen av fpu-stakk fstp dword [v_sum]; pop fpu-stakk og lagre i sum Lenke til kommentar
LostOblivion Skrevet 25. mars 2009 Del Skrevet 25. mars 2009 Historisk sett var det egne prosessorer for operasjoner på flyttall. Intel kom ut med f eks x87 som skulle jobbe i samarbeid med diverse x86. I dag er flyttallprosessoren innebygget i x86, men operasjoner blir fortsatt utført på to separate prosessorer. Derfor vil bl a flyttallprosessoren ikke ha direkte tilgang til flagg i x86 ved bruk av jumping f eks; du må overføre flaggene før du kan sjekke dem i x86. Har om dette nå på uio så er ikke helt 100 %. Rett meg om jeg tar feil! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå