Gå til innhold

Assembly: Hjelp til et par inline assembly programmerings oppgaver


Anbefalte innlegg

Hei!

Jeg har et par oppgaver som jeg sliter utrolig mye med. ergo må jeg bare poster det her i håp om å finne noen engler...

 

Oppgave 1:

Fibonacci-tallene er definert ved A(n+2) = A(n+1) + A(n) hvor a(1) = a(2) = 1. vi finner altså neste tall ved legge sammen de to foregående. De første ni fibonacci tallene er derfor 1,1,2,3,5,8,13,21,34.... merk at denne tallfølgen vosker rask, for eks. er a(55) = 139583862445. Dette betyr at tallene ikke kan representeres innenfor ett 32.vit register fra et visst nummer av og oppover.

Finn først ut hvor mange av Fibonacci-tallene som lar seg representere i et 32-bits register (altså som en int i C, og skriv deretter et C-program med inline assembler kode, hvor denne assembler-koden utfører selve beregninen av tallene. ) Programmet skal bergene nøyaktig så mange tall det lar seg gjøre. Men husk at et binærtall blir representert på 2-er komplement form, så en 1-er i mest signifikante bit, gir et negativt tall, og dermed overflow) Dette antallet skal leses inn av programmet til en variabel, du kan bruke scanf til dette Bruk printf til å skrive tallene ut til stdout.

 

 

Oppgave 2;

vi skal i denne oppgaven se litt på bruk a flyttalls-instruksjoner. Vi vet at 2.gradslikning ax2 + bx + c = 0, hvor a ikke er lik 0, har løsningen

X(1,2) = ( -b +-roten(b^2 - 4ac) ) / 2a

 

Likningen har altså reelle løsningen hvis b^2 - 4ac større eller lik 0, ikke relle tall ellers.

Du skal i denne oppgaven bruke inline assembler med flyttalls- instruksjoner i et C-Prgram for å finne de reelle løsningene av en 2-gradslikning. Du representerer C-variablene som float. Programmet skal lese inn koeffisientene a, b og c (bruk scanf til dette.) hvis b^2 - 4ac < 0 skal programmet skrive ut "no real solutions" ellers skal de reelle løsningene være output (Bruk printf til dette ). Alle beregningeer på flyttall skal gjøres med inline assembler i programmet.

 

Om du er interessert i å hjelpe meg med dette send en liten pm(slik at jeg kan gi deg noe tilbake igjen for tiden)

 

Takker og bukker hvis du tar initiativ.

Endret av noobn
Lenke til kommentar
Videoannonse
Annonse

Hei!

 

Emnetittelen i denne tråden er lite beskrivende for trådens innhold og det er derfor ingen god emnetittel. Jo bedre og mer beskrivende emnetittelen er, jo lettere er det for andre å skjønne trådens innhold og det vil være lettere å treffe den riktige forumbrukeren med det rette svaret. Ber deg derfor om å endre emnetittel. Vennligst forsøk å ha dette i tankene neste gang du starter en tråd, og orienter deg om hva vår nettikette sier om dårlig bruk av emnetitler.

 

Husk at en god emnetittel skal beskrive eller oppsummere hvilket problem du har - ikke at du har et problem. En god emnetittel skal heller ikke kun bestå av et produktnavn.

 

Bruk p_edit.gif-knappen i første post for å endre emnetittelen.

 

(Dette innlegget vil bli fjernet ved endring av emnetittel. Ikke kommenter dette innlegget, men p_report.gif gjerne dette innlegget når tittelen er endret, så vil det bli fjernet..)

Lenke til kommentar

Det største heltallet som kan representeres med 32 bit er 2^32-1, altså 4,294,967,295. Hvis du bruker int (og ikke unsigned int), vil det største tallet som kan representeres i 32 bit være halvparten av dette, altså 2^31 = 2,147,483,647. Du må altså finne nye fibonacci-tall så lenge tallet er under denne verdien. Alt over denne verdien (i assembly) vil tolkes som negative tall av en C-funksjon som benytter seg av verdien. Du kan gjøre sjekken med f eks

	cmpl	$2147483647, %eax
jge	ret

hvis fib-tallet ligger i eax. Skriver med AT&T-syntaks her.

 

Assemblyprogrammering med flyttall har jeg ikke vært borti.

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...