Programmet ska läsa in två heltal (till exempel 17 och 19), och omvandla dessa till binär form, i form av bitsträngar (som 00010001 och 00010011). Sen ska det addera bitsträngarna till en summasträng, och slutligen omvandla summasträngen tillbaka till ett heltal och skriva ut det (36).
För att kunna hantera tal med olika antal bitar (till exempel 8-bitarstal, 16-bitarstal och 64-bitarstal) ska programmet börja med att läsa in antalet bitar i bitsträngarna, och strängarna ska sen skapas dynamiskt. (Det kommer dock att finnas en begränsning i hur många bitar vi kan hantera, eftersom vi läser in och skriver ut talen med hjälp av vanliga heltal, alltså datatypen int.)
För att avbilda negativa heltal används tvåkomplementmetoden.
Det krävs ingen hantering av overflow, alltså då antalet bitar inte räcker till.
(Tillägg: Med "ingen hantering av overflow" menade jag egentligen att man bara låter det bli det bitmönster som blir, även om det blev overflow och negativt. Man ska ju simulera en ALU, så jag tycker att det ska funka som i en riktig processor, och har man en ALU med fyrabitarstal som representerar negativa tal med tvåkomplementmetoden, så kan den representera talen -8 (1000) till 7 (0111) Om man lägger ihop 4 och 4, så kan resultatet (8) inte lagras, utan det blir overflow och man får svaret -8.)
Programmet ska byggas i moduler enligt figuren:
Försök separera modulerna ordentligt, så koden i en modul inte blir onödigt hopvävd med koden i en annan!
Så här ser specifikationsfilen Bit.h ut:
/* Bit.h */ char and(char a, char b); /* Returnerar '1' om a '1' och b '1' */ char or(char a, char b); char xor(char a, char b); char not(char a); char nand(char a, char b); char nor(char a, char b); void add(char a, char b, char ci, char *sum, char *cu); /* Adderar två bitar a och b med ci som in-carry och cu som ut-carry enligt figur */
Så här ser specifikationsfilen Bitstr.h ut:
/* Bitstr.h */ void addstr(char *astr, char *bstr, char *sumstr); /* Adderar astr och bstr till sumstr */ void twokomp(char *str); /* Tvåkomplementerar str */
Så här ser specifikationsfilen Omvandla.h ut:
/* Omvandla.h */ void tal_str(int tal, char *str, int nrbits); /* Omvandlar tal till en binär sträng med nrbits bitar */ int str_tal(char *str); /* Omvandlar den binära strängen str till ett heltal */
Här är föreläsningsanteckningarna från Gunnar Jokis presentation av digsim-uppgiften. Klicka på bilden för större format.
Komplettera modulen Bitstr med en funktion för multiplikation av binära strängar, och komplettera huvudprogrammet med multiplikation av heltal.
Godkänd redovisning utgör en del av delkurs 2 i kursen Programmeringsmetodik.
Inlämningsuppgifterna bör göras, och lämnas in, före tentan. Man får tenta utan att ha lämnat in uppgifterna, men: