Kleines mathematisches Problem

Gast #978220
Lesenswert?

Es handelt sich dabei um einen 80c515 Mk, ich hab dazu ein kleines 
assembler Programm, welches lediglich eine warteschleife darstellt:

http://codepad.org/SouBVBdC

(den Output einfach nicht beachten Zunge raus ).

Hier ist der Programm Ablaufplan(als Link):

http://img440.imageshack.us/my.php?image=papjb4.jpg

Ich bräuchte die Formeln für T1, T2, T3 und T4, ich weiss das es etwas 
mit: T1=4
T2= 5+T1*R1(R1 kann eine Zahl zwischen 0 und 255 sein) war, bin mir aber 
nicht sicher...



Mit den besten wünschen für ein schönes Wochenende
Gast #978236
Lesenswert?

Ich würde die T's als Sprungmarken interpetieren.

Falls du die Schleifendurchlaufzeiten meinst:

T1 = R2_i * 4

T2 = R1_i * T1 + 1

T3 = R0_i * T2 + 1

gesamt
   = T3 + 1

der Index _i bezeichnet den Initialwert des Registers.
Gast #978239
Lesenswert?

moin

warum nimmst nicht djnz????

Warten : Mov Ro, # 4    ;Lade Register R0 mit 4 Bit
Marke 1: Mov R1, # 255          ;Lade Register R1 mit 255 Bit
Marke 2: Mov R2, # 255          ;Lade Register R2 mit 255 Bit
Marke 3: Djnz R2,Marke3
         Djnz R1,Marke2
         Djnz Ro,Marke1
         ;ret oder jump was immer du willst

gruss chris
Gast #978241
Lesenswert?

Hm, da braucht mal wieder jemand Hausaufgabenhilfe? Dein Ansatz ist 
schon richtig...
Das Programm beinhaltet 3 ineinandergeschachtelte Schleifen.
Die innere Schleife benötigt 4 Takte pro Durchlauf: zweimal einen und 
eimal zwei (für den Vergleich A!=0).
Das ganze wird 255 mal augeführt, da R2 mit dieser Zahl initialisiert 
wird. Pro Durchlauf des T2-Loops haben wir also 255*T1 zzgl. einmal 5 
Extra-Takte.
T3-Loop analog: T3=255*T2+5
T4 sehe ich nicht, dürfte aber 4*T3+1 sein.
Moderator (Firma: Titel) Persönliche Seite #978244
Lesenswert?

Dein Programm könnte etwas kompakter so beschrieben werden:
1
Warten: 
2
      Mov R0, # 4    
3
M1:   Mov R1, # 255          
4
M2:   Mov R2, # 255          
5
M3:   djnz R2,M3
6
      djnz R1,M2
7
      djnz R0,M1
dann ergibt sich die Anzahl der Schleifendurchläufe an M3 zu 4*255*255.
Aber diese Berechnung ist noch das allerkleinste Problem, das du hast.


Schlimmer sieht es da aus:

> Marke 1:
Labels dürfen keine Leerzeichen enthalten.

> Warten : Mov Ro, # 4    ;Lade Register R0 mit 4 Bit
Ro  abcdef...klmn o pqr...xyz.

> Marke 1: Mov R1, # 255  ;Lade Register R1 mit 255 Bit
> Marke 2: Mov R2, # 255  ;Lade Register R2 mit 255 Bit
In R0..2 passen immer nur 8 Bit.

> Dec R2          ;Vom Inhalt des Registers R2 wird 1 abgezogen
> Mov A,R2        ;Lade Akkumulator mit Inhalt von Register R2
> JNZ Marke 3     ;Springe zu Marke 3 wenn Akkumulator ungl. 0
Dafür gibt es den Befehl  djnz (decrement and jump if not zero).

> Jnz Marke 2     ;Springe zu Marke 2 wenn Akkumulator ungl. 0
> Dec R1          ;Vom Inhalt des Registers R1 wird 1 abgezogen
> Mov A,R1        ;Lade Akkumulator mit Inhalt von Register R1
> JNZ Marke 2     ;Springe zu Marke 2 wenn Akkumulator ungl. 0
Da wird 2 mal an die Marke 2 gesprungen, das ist so sicher nicht 
beabsichtigt.

>T1, T2, T3 und T4
tauchen im Code nirgends auf.

Spare dir die ganzen Kommentare. Das was da steht, steht vorne im Code 
schon wesentlich kompakter und leserlicher... ;-)

EDIT: Schade, zweiter...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren