* und / Operatoren bei AVRs Im Unterforum Microcontroller - Beschreibung: 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.
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
|
|
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
|