Hey,

Ik heb een probleem met stackopbouw in assembler. Hoe kan ik dit doen voor een recursieve functie. Ik moet namelijk een assemblerprogramma schrijven getDeterminant die de determinant van een matrix berekent.
Iemand suggesties ? Alvast bedankt

Zoef

Op 30 november 2003 20:50:19 schreef zoef:
Hey,

Ik heb een probleem met stackopbouw in assembler. Hoe kan ik dit doen voor een recursieve functie. Ik moet namelijk een assemblerprogramma schrijven getDeterminant die de determinant van een matrix berekent.
Iemand suggesties ? Alvast bedankt

Zoef

beetje ingewikkeld taal gebruik
zou je de vraag ook een beetje begrijpelijker kunnen stellen mischien kan ik je dan helpen
wat is bv. een recursieve functie en wat is een determinant?

ik heb het vermoeden dat het hier om een lookup functie gaat maar... weet het niet zeker

Op 30 november 2003 20:50:19 schreef zoef:
Ik heb een probleem met stackopbouw in assembler.

Ik begrijp je verhaal wel maar kan eigenlijk nog niet duidelijk erin vinden waar nou precies je probleem zit.

Daarnaast hebben we nog wat meer info nodig, zoals:
*welk merk controller gebruik je?
*welk type controller gebruik je?
*hoe is die functie opgebouwd, of wat gaat die precies doen?
*weet je al hoe de stack werkt in zijn algemeen?

Op 30 november 2003 22:25:29 schreef k.p.meinesz:
[...]
beetje ingewikkeld taal gebruik
zou je de vraag ook een beetje begrijpelijker kunnen stellen mischien kan ik je dan helpen
wat is bv. een recursieve functie en wat is een determinant?

Recursieve functies zijn functies die in elkaar zijn verweven, eigenlijk net zoals een loop in een loop in een loop enz. Zo gaat die functie met een waarde in dezelfde functie die weer wat uitrekent en weer dieper erin gaat en uiteindelijk na een "return value" weer via alle langsgelopen functies weer terugkomt. Snap je het nog? ;)
Recursieve noemt men ook wel geneste functies.

Determinant is wat lastig om snel uit te leggen. Maar het is een begrip in bepaalde wiskundige vraagstukken en heeft hier te maken met de matrix waarmee hij wil gaan werken.
Zie hier en dan virtuele college -> Determinanten voor een verdere toelichting.

[Bericht gewijzigd door Bastiaan op ]

In het algemeen (ik weet niet over welke processor het hier gaat) zul je eerst moeten bepalen hoe diep je kan gaan als je gebruik maakt van de processor stack; er zijn zat processors (controllers) waar de omvang van de stack behoorlijk beperkt is (8052-achtigen). Loop je het risico daar vast te lopen, dan zul je een aparte "stack" moeten bouwen in vrij RAM. Dat biedt vaak so wie so al voordelen omdat je dan min of meer gehouden bent om de omvang van de stack constant te blijven monitoren en dus het risico van overflows aanmerkelijk kleiner wordt. Programmatisch stelt het allemaal niet zo bar veel voor.

De assembler waar ik in werk is eigenlijk een simulator gemaakt door Sun Java , nl de ARC-Assembler(deze lijkt op de SPARC , maar minder uitgebreid) .

Je krijgt 32 registers ter beschikking waarvan register nul(%r0) altijd nul blijft. %r14 = stackpointer(deze wijst naar de top van systeemstack)
%r15 = houdt adress bij als je een subroutine met "call" oproept , zodat je daarna terug zou kunnen keren. Ik moet nu een manier vinden om een stack te creeren , zodat ik de determinant van de matrix recursief kan uitrekenen .
De matrix wordt in de assembler code opgegeven door een kolom van getallen , dus een 3x3 matrix komt overeen met een kolom van 9 getallen (de rijen worden gewoon onder elkaar geplaatst). Je zegt ook op voorhand wat de dimensie van je matrix juist is.
Wat er dan moet gebeuren is dat de routine getDeterminant wordt opgeroepen. Deze zal zichzelf recursief oproepen , want hij rekent de determinant uit door de minoren van de matrix te berekenen.
Vraag : hoe kan ik op mijn stack een duidelijk onderscheid maken tussen deze verschillende aanroepen van getDeterminant ?

zoef

Zoef