Stack underflow 32 bit durch 1024

Gast #853801
Lesenswert?

Hallo
Ich möchte einen 32 Bit Wert durch 1024 teilen. Der 32 Bit Wert liegt 
somit in vier Register vor. Das Dividieren durch 1024 kann ja durch 
10-maliges shiften nach rechts geschehen. Da das Shiften jedoch jeweils 
nur für 8Bit ist, habe ich mir ein Programm geschrieben.
Nur leider produziere ich dabei ein Stack-Underflow:
AVR Simulator: Stack Underflow at 0x0024
AVR Simulator: Invalid opcode 0xffff at address 0x006060
AVR Simulator: Invalid opcode 0xffff at address 0x002061

Kann mir einer sagen, wo ich dies mache und wie ich dies unterbinden 
kann. Evt. habt ihr sogar bessere Lösungen, um ein 32 Bit Wert durch 
1024 zu teilen.

Info: Ich programmiere in Assembler (totaler Anfänger), AVR-Studio, 
ATMega32
Angehängte Dateien:
Gast #853822
Lesenswert?

Hallo,
1.)Kompiliert das überhaupt???

        ldi temp1, 0xA0
  mov Res3, temp1      ;->das ist gar nicht deklariert worden !!!
  ldi temp1, 0x7F
  mov Res4, temp1
  ldi temp1, 0x88
  mov Res5, temp1
  ldi temp1, 0x02
  mov Res6, temp1

2.)Du wirfst ja die untersten 8bit weg und schiebst dann 2mal rechts. In 
der korregieren Zeugs machste dann "or", das ist falsch, da musste add 
machen und falls Überlauf, das nächst höhere Register nochmal adc 
machen.

GRUSS
Gast #853847
Lesenswert?

Sorry
da ist wohl was falsch gelaufen bei dem Onlinestellen.
Das kommt, wenn man mit mehreren Einzelteilen arbeitet und dann alles in 
eine Versionen packen will und dann das Ganze wieder kopiert.

Aber stimmt mit der Deklaration.

Weiter unten sollte es eigentlich heißen

  ldi temp1, 0xA0
  mov Res4, temp1
  ldi temp1, 0x7F
  mov Res5, temp1
  ldi temp1, 0x88
  mov Res6, temp1
  ldi temp1, 0x02
  mov Res7, temp1

Ja ich weiss, so toll sieht das nicht aus mit den "korrgieren" Marken.
Hat jemand vielleicht ne bessere Lösung?
Angehängte Dateien:
#853859
Lesenswert?

Irgendwie gehst du die Sache etwas merkwürdig an.

; 8 Bit nach rechts schieben

mov Res4, Res5
mov Res5, Res6
mov Res6, Res7
clr Res7

; weitere 2 Bit nach rechts schieben

lsr Res6
ror Res5
ror Res4

lsr Res6
ror Res5
ror Res4


PS: Ich gehe davon aus, dass der 32-Bit-Wert kein Vorzeichen hat.

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