Obligatorisk oppgave nr 2 i INF2270 v�ren 2007
Frist
Fristen er satt til: fredag 20. april 2007 kl 12.00.Funksjonen `sprintf�
Standardfunksjonen sprintf i C fungerer som printf men resultatet havner i en tekstvariabel i stedet for � bli skrevet ut. For eksempel vilresultere i at `str� inneholder �Her er 4 siffer.� (samt en 0-byte som avslutning). Les mer i man sprintf om hvorledes sprintf fungerer; ikke glem at sprintf ogs� returnerer en verdi.char str[200]; int x; x = 4; sprintf(str, "Her er %d %s.", x, "siffer");
Oppgaven er � skrive funksjonen sprinter som er en forenklet utgave av sprintf. N�rmere bestemt kan vi anta f�lgende forenklinger:
- De eneste %-spesifikasjonene som kan forekomme, er %c, %d, %s, %x og %%.
- Det er ingen modifikasjon av %-spesifikasjonene (som +, -, 0, breddeangivelse og l (for �long�)). Tegnet % forekommer alts� kun i f�lgende fire konstellasjoner: %c, %d, %s, %x og %%.
- Signaturen er
int sprinter(char *res, char *format, ...);
Oppgaven
Oppgaven er � skrive funksjonen sprinter i x86-assemblerspr�k. Den skal l�ses individuelt, s� vi forventer at alle innleverte l�sninger er forskjellige.Legg vekt p� oversiktlig programmering og gode kommentarer! Gruppel�reren kan nekte � rette besvarelsen hvis det er for vanskelig � forst� hvorledes funksjonen virker.
Det er lov � la sprinter kalle andre funksjoner, men da skal de ogs� skrives i x86-assemblerspr�k og legges ved.
Det finnes et testprogram som gruppel�rerne vil bruke under rettingen; det kan v�re lurt � pr�ve det selv.
Er du i tvil om noe i oppgaven, s� sp�r gruppel�reren eller meg.
Hint
- Skriv aller f�rst noen C-programmer som bruker den originale sprintf slik at du blir sikker p� hvorledes sprintf virker.
- F�r du begynner � skrive assemblerkode, b�r du l�se problemet i et h�yniv�spr�k du kjenner godt slik at du vet n�yaktig hva som skal gj�res.
- De f�rreste klarer � skrive en slik funksjon i ett uten testing. Start heller med en implementasjon av strcpy og utvid den til � h�ndtere %%, s� %c, %s og %x og til sist %d (som er vanskeligst).
- Let etter ideer i ukeoppgavene som har v�rt gitt og fasit til disse.