Hallo Zusammen, ich hab mal ne Frage. Ich habe eine Aufgabe vor mir liegen und kann diese nicht loesen. Ist aber in wenigen Schritten erledigt. mov R2, #5h ;Wartezeit festlegen Zeitschritt: mov R1, #0FFFFh ;Wartezeit festlegen Schleife: CMPD1 R1, #00h ;Wartezeit dekrementieren u ;und mit Null vergleichen JMP CC_NE, Schleife ;Wiederholen, solange nicht Null CMPD1 R2, #00h ;2. Wartezeit dekrementieren ;und mit Null vergleichen JMP CC_NE, Zeitschritt ;Wiederholen, solange nicht Null Frage: Veraendern Sie das obige Programm so, dass statt der 5-fachen Laufzeit sich moeglichst genau die 2,5-fache Zeit ergibt. Unterstreichen Sie hierzu im obigen AssemblerCode die Zeile die Sie aendern moechten und schreiben hier den neuen Code hin. Wenn jemand eine Ahnung hat, wie das geht, waere ich um jeden Tipp dankbar. Also den Programmausschnitt verstehe ich schon. Ich komm nur nicht mit ,5 klar. Vielen Dank schon mal vorab und viele Gruesse
Du schaffst es nicht den Wert zu finden der am besten geeignet ist die Wartezeit zu halbieren?
Hi, noe, schaffe ich nicht. Daher bitte ich einen erfahrenen Programmierer um die Hilfe
Martin schrieb: > schaffe ich nicht Dann solltest Du Dir zuerst einmal den Programmablauf aufzeichnen und verstehen, was da passiert. Dann müsstest Du auch erkennen, an welcher Stelle Du "drehen" musst. Gruß Dietrich
Martin schrieb: > Hi, > noe, schaffe ich nicht. Daher bitte ich einen erfahrenen Programmierer > um die Hilfe Befehle suchen, die die Schleife in der halben Zeit machen. Ich kenne den 167 nicht, aber beim 8051 gibt es auch allerhand solcher Dinge bzw. Tricks. Möglicherweise gibt es andere Befehle, die das selbe tun, und kürzere Ausführungszeit haben. Bspw. haben Registerbefehle beim 8051 die halbe Laufzeit von Datenspeicher als Register.
Martin die diskusion mit den Hausaufagen durch andere Lösen lassen, waren in diesem Forum schon genug, daher lasse ich die Belehrungsversuche. Lösung könnte sein: mov R2, #5h ;Wartezeit festlegen Zeitschritt: mov R1, #0FFFFh ;Wartezeit festlegen Schleife: CMPD1 R1, #7FFF ;Wartezeit dekrementieren u ;und mit 0FFFFh hable vergleichen JMP CC_NE, Schleife ;Wiederholen, solange nicht Null CMPD1 R2, #00h ;2. Wartezeit dekrementieren ;und mit Null vergleichen JMP CC_NE, Zeitschritt ;Wiederholen, solange nicht Null könnte gehen. Mfg CalM
Martin schrieb: > Wenn jemand eine Ahnung hat, wie das geht, waere ich um jeden Tipp > dankbar. Also den Programmausschnitt verstehe ich schon. Ich komm nur > nicht mit ,5 klar. Okay, dann zeig uns mal, wie du eine beliebige ganzzahlige Vielfache Wartezeit erreichst (2, 5, 10, 1000 fach).
Vielen Dank ich probiers aus. Sind uebrigens keine Hausaufgaben sondern uralte Aufgaben die ich zum lernen verwende. Danke nochmal fuer die Bemuehungen.
mov R2, #5h ;Wartezeit festlegen Die ganzzahlige Vielfache lege ich fest, in dem ich die gewuenschte ganzzahlige Wartezeit ins Register 2 lege.
@Martin bist du dir sicher das du die Wartezeit ereitern sollst und nicht einfach nur halbieren? So würde ich die Aufgabe verstehen. Statt 5 Facher zeit genau die 2,5 fache mach für mich Faktor 2 um die deine Wartezeit keluiner werden soll. Nächster punkt ist das die Änderrung mit nur einer Zeile möglich sein soll. Damit hast du dann (mindestens) zwei mögliche Lösungen für die Aufgabe. Mfg CalM
Hi, ja schon, ich versuche die Wartezeit zu halbieren. Dekrementieren kann ich nur ganzzahlige Werte Ich habs noch nicht ausprobiert, aber wahrs. werd ich nur die Programmzeile Zeitschritt: mov R1, #0FFFFh zu dieser umformen Zeitschritt: mov R1, #07FFFh Es muss doch auch noch eine weitere Loesung geben
>die Programmzeile >Zeitschritt: mov R1, #0FFFFh > >zu dieser umformen >Zeitschritt: mov R1, #07FFFh Na also, geht doch;)
NNY schrieb: > Hi, > > ja schon, ich versuche die Wartezeit zu halbieren. > Dekrementieren kann ich nur ganzzahlige Werte > > Ich habs noch nicht ausprobiert, aber wahrs. werd ich nur > > die Programmzeile > Zeitschritt: mov R1, #0FFFFh > > zu dieser umformen > Zeitschritt: mov R1, #07FFFh > > Es muss doch auch noch eine weitere Loesung geben Gibt es auch. Ich geh mal auf eine Analogie. Du hast 5 Bierkisten, in der jeweils 20 Bierflaschen stecken. Das macht in Summe 100 Flaschen (deine Wartezeit). Wie kannst du jetzt einigermassen gut 50 Bierflaschen (also die Hälfte davon) abpacken, wobei du natürlich beliebig viele Kisten nehmen kannst. Du kannst 1 Kiste nehmen und da 50 Flaschen reinstecken. OK, das geht nicht, weil in der Kiste keine 50 Flaschen Platz haben. Du kannst 2 Kisten nehmen und in jede 25 Flaschen. Fast. 25 Flaschen pro Kiste gehen nicht Du kannst 3 Kisten nehmen und in jede 16 Flaschen. Sind in Summe 48 Flaschen. Fast. Das geht noch besser 4 Kisten a 12 Flaschen. Wieder 48. Mal sehen, obs noch besser geht 5 Kisten a 10 Flaschen. Gibt genau die 50 Flaschen 6 Kisten a 8 Flaschen. Macht 48. Die 50 waren besser 7 Kisten a 7 Flaschen. Macht 49. Besser als 48, aber schlechter als 50 8 Kisten a 6 Flaschen. Hatten wir schon. 48 9 Kisten a 5. 45, unter jeder Kritik 10 Kisten a 5 Flaschen. 50. Na, also. Geht doch .... Die Rolle der Kisten spielt in deinem Code die äussere Schleife. Die Flaschen sind die innere Schleife. Und du suchst jetzt nach der Anzahl der Wiederholungen, die du benötigst, damit der Kern x mal ausgeführt wird. Das Prinzip ist genau das gleiche, wie bei Kisten und Flaschen. Du suchst 2 Zahlen a und b, sodass a*b eine bestimmte vorgegebene Anzahl ergibt. Wobei es noch Nebenbedingungen gibt. Beim Bier war es die Anzahl der Flaschen pro Kiste, die nicht höher als 20 sein kann. Bei den Warteschleifen ist es die Anzahl der inneren Schleifen, die nich höher als FFFFh sein kann (also 65535). Was immer dir zum Thema Bierkisten und Flaschen einfällt, um dieses Problem zu lösen, das kannst du im Grunde auch mit deinem Programm machen. Zb. kannst du 6 Kisten mit 8 Flaschen machen und 1 Kiste mit lediglich 2. Macht in Summe auch wieder die geforderten 50.
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.