Teilen durch 200 in ASM

Gast #2420133
Lesenswert?
• ▲
▼
Hi

>ich suche Möglichkeiten, in AVR-Assembler  durch 200 zu teilen, und zwar
>möglichst effezient. Also fast ohne Speicherplatzverbrauch.

Kommt darauf an , was du durch 200 teilen willst. 8,16 32,64... Bit?

MfG Spess
Gast #2420165
Lesenswert?
• ▲
▼
Von Atmel gibts feine Appnotes :)
Da ist auch ne 32bit/32bit Division aufgeführt. Einmal auf Code Größe 
und einmal auf Leufzeit optimiert. Die kannst du ja direkt nehmen oder 
weiter optimieren. Bei dir würde ja auch 32bit/8bit reichen :)
Persönliche Seite #2420184
Lesenswert?
• ▲
▼
Hallo,

im Beispiel unten, die 10 in 200 ändern.
Lässt sich auch leicht auf 24 oder 32 Bit erweitern.

1
  ;--------------------------------------------------------------------------------
2
  ;    16Bit Division durch 8Bit Konstante. In diesem Fall 10.
3
  ;    Übergaberegister & Ergebniss in temp2/temp3 (low/high), Rest = temp1
4
  ;--------------------------------------------------------------------------------
5
div:  ldi    temp4,16    ;16* schieben
6
    clr    temp1      ;Rest =0
7
dv1:  lsl    temp2      
8
    rol    temp3
9
    rol    temp1
10
    cpi    temp1,10    ;Solange Bits in temp1 (Rest) schieben bis >= 10
11
    brcs  dv2        ;Wenn der Rest <10 ist, das 0-Bit in temp2 (LSL, oben) stehen lassen
12
    inc    temp2      ;Ansonsten Bit0 setzen und 10 vom Rest abziehen
13
    subi  temp1,10    
14
dv2:  dec    temp4      ;Das ganze 16 mal
15
    brne  dv1  
16
  ;-------------------------------------------------
17
  ;        Ende Div Routine.
18
  ;-------------------------------------------------
19
    ret
Gast #2420346
Lesenswert?
• ▲
▼
Wer Code-sparend rechnen will, sollte bedenken:

- Addieren / Subtrahieren ist "billig".
- Multiplizieren "teuer"
- Dividieren (außer durch Vielfache von 2) "Luxus"

Also, wenn du vorher vielleicht schon multiplizieren
musstest: Multipliziere doch so, dass du durch 256
teilen musst!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.