HI so..... ... fang mal mit dem standarttext an: bin assembleranfänger und brauch desswegen eure hilfe! ;) hab die letzten zwei tage so eure foren durchforstet und trotzdem noch ne ganze menge Fragen . vorallem über ne großzahl an befehlen und deren bedeutung also isses vieleicht am einfachsden wenn ihr mir ein quelltext mit erklärungen bestückt?! schön währe es mit diesem: http://www.mikrocontroller.net/attachment/16261/UDIV32F.ASM vieleicht noch als kurze-hintergrund-info das zeil meines praktikums ist ein programm das von einem gerät eine 24bit zahl bekommt und durche eine geteilt werden muss die zwischen 10bit und 20bit breit sein (fals genaueres gewünscht wird einfach nachfragen) weis noch nich wie der µC aussieht bzw heist ^^ ps: nachträglich frohe ostern
> weis noch nich wie der µC aussieht bzw heist
Dann ist es schlicht Unfug, einen prozessorabhängigen
Assemblerquelltext zu kommentieren... :-/
Denn jede Prozessorfamilie hat ihren eigenen Assembler mit anderen
Funktionen und Mnemonics.
Lothar Miller schrieb: >> weis noch nich wie der µC aussieht bzw heist > Dann ist es schlicht Unfug, einen /prozessorabhängigen/ > Assemblerquelltext zu kommentieren... :-/ > Denn jede Prozessorfamilie hat ihren eigenen Assembler mit anderen > Funktionen und Mnemonics. Kein Unfug hingegen ist es, sich die Prinzipien die sich in einem Code verbergen zu Gemüte zu führen und zu studieren. Dann fällt es nämlich auch leichter vorhandenen Code zu studieren und zu analysieren - wenn man bereits bekannte Prinzipien wiederentdeckt.
dank herr brunner ... aber das hab ich mir schon durchgeschaut wir haben auch schon halbwegs was programmiert in der uni aber es ist ein unterschiet hob ich der welt hallo sagen will oder ich ne "riesiege" zahl dividieren muus -> deswegen versuch ich bestimmte quelltexte zu verstehen in der uni haben wir hauptsächlich mov und add und sub und sowas benutzt
Falk Brunner schrieb: > http://www.mikrocontroller.net/articles/AVR-Tutorial Was will er denn damit?? Richtige Seite: http://www.akademie.de/gestalten/textgestaltung/kurse/neue-deutsche-rechtschreibung/gross-und-kleinschreibung/uebung-2.html
Philipp F. schrieb: > aber es ist ein unterschiet hob ich der welt hallo sagen will oder ich > ne "riesiege" zahl dividieren muus -> deswegen versuch ich bestimmte > quelltexte zu verstehen Die meisten Assemblerprogrammierer haben aus guten Gründen mit Programmen der Hallo-Welt-Klasse angefangen. Warum willst Du das umbedingt anders machen? Sich zu Beginn optimierte Routinen für Berechnungen anzusehen wird Dir außer Frust und Verzweiflung wenig bringen. Philipp F. schrieb: > das zeil meines praktikums ist ein programm das von einem gerät eine > 24bit zahl bekommt und durche eine geteilt werden muss die zwischen > 10bit und 20bit breit sein (fals genaueres gewünscht wird einfach > nachfragen) Routinen für Divisionen gibt es schon. Warum willst Du das Rad neu erfinden? Das wahre Können liegt darin, vorhandene Komponenten zu integrieren und nur dort wo es wirklich nötig ist, eine Eigenentwicklung zu starten. Alles andere ist Zeitverschwendung. Stephan
Stephan M. schrieb: > [...] und nur dort wo es wirklich nötig ist, eine Eigenentwicklung > zu starten. Alles andere ist Zeitverschwendung. ...sollte heißen: dort wo es wirklich sinnvoll ist...
Stephan M. schrieb:
> ...sollte heißen: dort wo es wirklich sinnvoll ist...
Das geht aber nur wenn man den Code verstanden hat. Man muß ihn nicht
neu erfinden, aber nur mit Copy & Paste ist keine Lösung. (Dann holt man
sich auch eine 32Bit Zahl aus dem Ram und teilt sie danach durch 256.)
MarioT schrieb: > Das geht aber nur wenn man den Code verstanden hat. Man muß ihn nicht > neu erfinden, aber nur mit Copy & Paste ist keine Lösung. Bei Divisionsroutinen schon :-) Stephan
@ Philipp F. (fritz87) >dank herr brunner ... aber das hab ich mir schon durchgeschaut >wir haben auch schon halbwegs was programmiert in der uni Wo ist dann das Problem? >ne "riesiege" zahl dividieren muus -> deswegen versuch ich bestimmte >quelltexte zu verstehen Na dann mach das. >in der uni haben wir hauptsächlich mov und add und sub und sowas benutzt Oh, und der Herr Studiosus ist mit dem Selbststudium nicht so vertraut. Na umsomehr sollte er sich mal selber drum kümmern. MFG Falk
>>> Kein Unfug hingegen ist es, sich die Prinzipien die sich in einem >>> Code verbergen zu Gemüte zu führen und zu studieren. Oft ist aber der umgekehrte Weg einfacher: erst mal verstehen, wie etwas gemacht wird (hier die binäre Division) und dann mal nachsehen, wie andere das realisiert haben. Aber ich finde es sehr schwierig, ein Verfahren anhand einer unbekannten Sprache rückwärts herzuleiten... :-/
ok vielen dank erstmal an alle dann mal eine direkte frage: lsl r16 rol r19 soll das heisen, dass das höchstwertigste bit von r16, fals es gesetzt ist,in r19 "reingeschoben" wird?
Philipp F. schrieb: > ok > vielen dank erstmal an alle > > dann mal eine direkte frage: > > lsl r16 > rol r19 > > > soll das heisen, dass das höchstwertigste bit von r16, fals es gesetzt > ist,in r19 "reingeschoben" wird? Ja... (und zwar über das Carry-Flag) ...
Hi >soll das heisen, dass das höchstwertigste bit von r16, fals es gesetzt >ist,in r19 "reingeschoben" wird? Jain. Es wird auch hineingeschoben, wenn es nicht gesetzt ist. MfG Spess
schön danke und der sbr befehl zb.: sbr r19,1 bedeutet das < r19 = r19 oder 1 > ist? also das niederwertigste bit von r19 immer gestzt wird egal was für ein zustand es hatt?
@ Philipp F. (fritz87) >und der sbr befehl zb.: sbr r19,1 bedeutet das < r19 = r19 oder 1 > >ist? also das niederwertigste bit von r19 immer gestzt wird egal was für >ein zustand es hatt? Wenn man des Englischen ein wenig mächtig ist, und das sollte man, wenn man sowas studiert, ist die auführliche Beschreibung der Assemblerbefehle durchaus hilfreich. Dort stehen nämlich alle Befehler haarklein erklärt drin. Aber lesen muss man schon selber. http://www.mikrocontroller.net/articles/AVR-Tutorial:_Equipment#Literatur http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf MFG Falk
Es gibt noch eine enfache Möglichkeit. AVR-Studio installieren Den Code dort reinkopieren Bei jedem Befehl, den man nicht versteht, oder bei dem man Hilfe braucht: Den Cursor drauf stellen, F1 drücken voila: AVR Studio sucht die Beschreibung des Befehls raus und zeigt sie an.
Philipp F. schrieb: > aber es ist ein unterschiet hob ich der welt hallo sagen will oder ich > ne "riesiege" zahl dividieren muus Der Welt nicht "hallo sagen" wollen, aber nach jedem ASM-Befehl fragen.
Hi Wie Divisionen in Assembler funktionieren, findest du in der AppNote AVR200 von Atmel: http://www.atmel.com/dyn/resources/prod_documents/doc0936.pdf MfG Spess
Hmm Ich denke, die Divisions-Routine hat einen Fehler
1 | udi20: tst b2 |
2 | breq udi30 |
3 | ldi t0, 24 |
Ich denke, das müsste so lauten
1 | udi20: tst b1 |
2 | breq udi30 |
3 | ldi t0, 24 |
(also tst auf b1 anstelle von b2) Ich habe jetzt nicht grossartig analysiert, sondern begründe meinen Verdacht damit Original:
1 | udiv32: |
2 | clr t1 |
3 | tst b3 |
4 | breq udi10 |
5 | ldi t0, 8 |
6 | .... |
7 | ret |
8 | |
9 | udi10: tst b2 |
10 | breq udi20 |
11 | ldi t0, 16 |
12 | .... |
13 | ret |
14 | |
15 | udi20: tst b2 |
16 | breq udi30 |
17 | ldi t0, 24 |
18 | .... |
19 | ret |
20 | |
21 | udi30: ldi t0, 32 |
22 | udi31: lsl a0 |
23 | .... |
Der Fall udi20 wäre sinnlos, da er nur angesprungen wird, wenn b2 0 ist. In dem Fall wird aber von udi20 sofort wieder weiter an udi30 gesprungen, d.h. der Sprung nach udi30 findet in jedem Fall statt und damit wäre die ganze Behandlung in udi20 für die Katz, weil sie nie benutzt wird. Der ganze Divisionsalgorithmus ist ein stinknormaler Divisions-Algo, der sich lediglich den Dividenden ansieht, ob Operationen eingespart werden können. Wenn das höchstwertige Byte vom Dividenden nicht 0 ist, dann müssen alle 32 Bit subtrahiert werden. Es ist aber auch klar, dass das Ergebnis nie größer als 255 sein kann, etc. Je mehr 0 Bytes (beginnend vom MSB an gezählt) im Dividenden vorkommen, desto größer kann zwar das Ergebnis werden, dafür können aber auch Subtraktionen gespart werden. Das wird hier ausgenutzt, aber ich denke eben, wie gesagt, dass es da einen Fehler gibt. Könnte sich das mal jemand ansehen und Bescheid geben, damit ich das im Artikel, aus dem der Code stammt, gegebenenfalls korrigieren kann?
> Wie Divisionen in Assembler funktionieren... müsste korrekt heissen: Wie Divisionen in AVR-Assembler funktionieren... Denn ich habe hier einen Assembler eines Signalprozessors, der kann das kompakter:
1 | divs ay1,ax0; |
Oder auch der betage x86:
1 | div ecx |
Auch diese Beispiele sind gut, denn leider gilt nach wie vor:
>>>>>> weis noch nich wie der µC aussieht bzw heist
so ich denke (hoffe) das es so hinhaut vieleicht etwas umständlich aber funktionstüchtig?!?! schon mal danke für's durchgucken im vorraus.
Hast du das durchsimuliert? Ich denke nämlich nicht, dass das hinhaut. Schon alleine deswegen, weil bei dir z (und damit die Anzahl der Wiederholungen der jeweiligen Schleifen) immer 24 ist.
weis jetzt was es ist ..... ein hc12 so und eine lcd-anzeige hängt auch schon drann
also wiegesagt es ist ein m68hc12 so, da hat es ja nur teilweise was gebracht das ich mich mit den avr-controllern beschäftigt hab ;) hab jetzt auch ein datenblatt mit ner menge befehlen ... aber nich mit allen die mein forgänger genutzt hat und ich find mal wieder keine volständige ref. im internet hab auch schon nach einer vom hc11 gesucht da dieser ja ähnliche routinen benutzen vielen dank, fals mir nochmals jemand helfen möchte
Philipp F. schrieb: > so, da hat es ja nur teilweise was gebracht das ich mich mit den > avr-controllern beschäftigt hab ;) Das macht nichts. Das Prinzip einer Division ist auch auf einem HC12 nicht anders (wenn der nicht Hardwaremässig dividieren kann) logisch schieben logisch rotieren subtrahieren mit und ohne Carry Überhaupt Carry Bit und bedingte Branch-Befehle (die bei manchen Prozessoren Jump heißen) haben sie alle. Hat man die erst mal bei einem Prozessor durchschaut, hat man sie bei so gut wie allen Prozessoren durchschaut. Viel wichtiger ist, ob man das Prinzip der Division durchschaut hat. In keiner anderen Programmiersprache wie Assembler, ist es so wichtig loszulassen und nicht ein spezifisches Programm von Prozessor A nach Prozessor B zu portieren, sondern eine Idee, die man von A abgreift und dieselbe Idee mit den Mitteln von B ausdrückt. Hier ist die grundlegende Idee hinte einer Division http://www.mikrocontroller.net/articles/AVR-Tutorial:_Arithmetik8#Division
>weis jetzt was es ist ..... ein hc12 >so >und eine lcd-anzeige hängt auch schon drann >also wiegesagt es ist ein m68hc12 >so, da hat es ja nur teilweise was gebracht das ich mich mit den >avr-controllern beschäftigt hab ;) >hab jetzt auch ein datenblatt mit ner menge befehlen ... aber nich mit >allen die mein forgänger genutzt hat >und ich find mal wieder keine volständige ref. im internet >hab auch schon nach einer vom hc11 gesucht da dieser ja ähnliche >routinen benutzen >vielen dank, fals mir nochmals jemand helfen möchte Nein, moechte ich nicht. Mit einem solchen, keinerlei Regeln (incl. der Forenregeln) folgendem hingek.... Geschreibsel will ich mich nicht beschaeftigen. Da schreiben ja unsere Kunden aus Fernost ordentlicher Deutsch. Glaubst Du im Ernst, dass Du mit sowas einen Abschluss bekommst? Gast
Hi
>und ich find mal wieder keine volständige ref. im internet
Hat bei mir 10sec gedauert.
MfG Spess
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.