* und / Operatoren bei AVRs

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 06 10 2024  23:19:27      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
* und / Operatoren bei AVRs

    







BID = 66628

chilla

Schreibmaschine



Beiträge: 1403
Wohnort: von hier zwei mal rechts und dann zwei mal links
 

  


Hi,

ich arbeite mich gerade in AVRs ein (Trampert).

da die Prozessoren der Basic-Line ja keinen hardware-multiplizierer besitzen, muss das ja softwaremässig implementiert werden.

wenn jetzt z.B.


Code :

ldi r16,2*3


programmiert wird
(stimmt das überhaupt? das Buch ist ja im prinzip nur eine gute Übersetztung der Datenblätter, und so konnte ich noch nix praktisch probieren... )

was passiert dann?
was macht die CPU? übersetzt der assembler das mit 2 bzw. 3 Additionen?

und noch eine Frage: (ich weiss schon, aber am anfang ist man halt etwas )

wie verhält sich das eigentlich mit gleitpunkberechnungen? muss der Anwender immder die stelle des Kommas in einem eigenen Register speichern und berechnen?

danke für Antworen,

mfg CHillA

BID = 66633

Jornbyte

Moderator



Beiträge: 7150

 

  

Wenn so einfach wäre, ist aber nicht.
Ein Beispiel für 16 Bit Mulitiplikation:

.include "8515def.inc"
.list
.def temp = r23
.def mc16ul = r16 ;multiplicand lowbyte
.def mc16uh = r17 ;multiplicand highbyte
.def mp16ul = r18 ;multiplier lowbyte
.def mp16uh = r19 ;multiplier highbyte
.def m16u0 = r18 ;Ergebniss byte 0 Low Byte
.def m16u1 = r19 ;Ergebniss byte 1
.def m16u2 = r20 ;Ergebniss byte 2
.def m16u3 = r21 ;Ergebniss byte 3 High Byte
.def mcnt16u = r22 ;Counter
;multiplizieren 300 * 300
rjmp init
init:
ldi temp,high(ramend)
out sph,temp
ldi temp,low(ramend)
out spl,temp
main:
ldi mc16ul,low(300)
ldi mc16uh,high(300)
ldi mp16ul,low(300)
ldi mp16uh,high(300)
rcall calc2
loop:
rjmp loop
;--------------- 16 * 16bit Multiplikation
calc2:
clr m16u3
clr m16u2
ldi mcnt16u,16
lsr mp16uh
ror mp16ul

m16u_1:
brcc noadd8
add m16u2,mc16ul
adc m16u3,mc16uh
noadd8:
ror m16u3
ror m16u2
ror m16u1
ror m16u0
dec mcnt16u
brne m16u_1
ret







_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 66638

chilla

Schreibmaschine



Beiträge: 1403
Wohnort: von hier zwei mal rechts und dann zwei mal links

uff, das is ja ganzschön aufwändig. das muss ich morgen mal genau studieren.

und wür was ist dann der * bzw / operator?

muss dann ein operand 2 sein?

mfg CHillA

BID = 66640

Jornbyte

Moderator



Beiträge: 7150

Muss do noch Tippen
32-Bit durch 16 Bit oder 24-Bit durch 16-Bit Division :
Die Register müssen Definiert sein wie Oben, (z.b. .def AL = r16)
;BL,AH,AL : CH, CL = BL,AH,AL REST in DH, DL
DIV24_16:
LDI BH, 24
CLR DH
MOV DL, DH
Loop24:
LSL AL
ROL AH
ROL BL
ROL DL
ROL DH
CP DL, CL
CPC DH, CH
BRLO Skip24
SUB DL, CL
SBC DH, CH
INC AL
Skip24:
DEC BH
BRNE Loop24
RET

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 66644

chilla

Schreibmaschine



Beiträge: 1403
Wohnort: von hier zwei mal rechts und dann zwei mal links

vielen Dank erstmal.

als AVR-Noob muss ich das mal morgen genau auswerten, dass kann ein bisschen dauern.

bis dann,


mfg CHillA

BID = 66645

Jornbyte

Moderator



Beiträge: 7150

Die einfache Rechnung Ldi r16,2*3 (r16=6) oder Ldi r16,6/5 (r16=1) geht nur für Ganzzahlen im Bereich 0 bis 255.


_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 66646

chilla

Schreibmaschine



Beiträge: 1403
Wohnort: von hier zwei mal rechts und dann zwei mal links

ah so.. *klick - kapiert*

das ergebnis muss also in ein byte passen, und ganzzahlig sein.

deine Beispiele sind trotzdem interessant, man braucht ja häufiger andere Multiplikationen..

danke

mfg CHillA


Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 9 Beiträge verfasst
© x sparkkelsputz        Besucher : 182137005   Heute : 5379    Gestern : 5445    Online : 524        6.10.2024    23:19
4 Besucher in den letzten 60 Sekunden        alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0222849845886