Nochmals Assembler 8085

Helios co.

Lt. Commander
Registriert
März 2005
Beiträge
1.863
Hallo,
ich habe schon vor kurzem eine Frage zu diesem Thema gepostet und jetzt muss ich euch nochmals damit belästigen ;)

Und zwar, habe ich eine Tabelle aufgestellt
z.B.
.db 0x5a,0x5b,0x36,0x05

jetzt brauche ich einen Zähler, der mir die Anzahl der Werte ausgibt.
Das Problem ist, dass ich nur relativ wenig "PLatz"habe
Ich speicher die Tabelle nämlich unter 1841h und beginne mit dem ganzen Prog bei 1800h
und muss noch einpaar andere Operationen auf der Tabelle ausführen.
D.h., falls der code länger wird, zerschiesse ich die Tabelle.

Meine Idee war, einfach alle 4 Werte addieren, in einem Register abspeichern und dann Schritt für Schritt die einzelnen Werte wieder subtarhieren und bei jedem Durchlauf, bei dem der Wert nicht wieder auf 0 steht soll der Zähler um eins erhöht werden.
Diese Idee ist jedoch ziemlich umfangreich was code angeht... :rolleyes:

Ich wäre für jede Idee, die mich weiterbringt dankbar!!!!!
MfG
Andi
 
Hi,

Wie kommen die Werte in die Tabelle? Woran erkennt man das Ende der Tabelle? Da musst du dich etwas genauer ausdrücken.

Kann man nicht schon beim Reinschreiben einen Zähler mitlaufen lassen? Soll man an 0x00 erkennen, daß die Tabelle zu Ende ist? Bei deiner Mehtode muss man auch an irgendwas erkennen, dass der letzt Wert der Tabelle erreicht ist, bzw man hinter der Tabelle ist.

Wenn du schon weisst wieviele Werte du addieren musst, dann weisst du doch damit die Anzahl der Werte?
 
Im Grunde muss ich 2 Hex Zahlne miteinander addieren.
Jedoch vor der Addition die Anzahl der Stellen ausgeben (in Adresse 1840) und nach der Addition gegebenenfalls die Anzahl nochmals anpassen.
Im Groben sieht es also so aus:
in 1841,1842,1843,1844 stehen die Werte:4a,36,5b,fe (Das ist also meine 1 Zahl)
in 1861,1862,1863,1864 stehen die Werte:32,f6,5c,ae (Meine 2te Zahl)
in 1840 soll der Zähler stehen...also am Anfang soll er 4 ausgeben
d.h. man muss am Anfang zählen und nach der Addition nochmals, denn das Ergbnis der Addition wird dann beginnend bei 1841 reingeschrieben.
D.h. die Begrenzung die man für die Länge der Zahl hat ist 1841...1960, da man j asonst die 2te Zahl überschreiben würde.

Wie du ja bereits gesagt, das Problem ist, ich weiss nicht nach welchem Kriterium ich sagen soll:hör auf zu zählen.
Wenn die Zahl wie oben nur aus 4 Stellen besteht, dann sind nach den 4 Stellen nur noch nulle bis 1861, nur kann ich die null nicht als Haltekriterium nutzen, da man ja theoretisch viele nullen in der Mitte haben kann und zum Schluss dann doch noch eine Zahl.
Aber wenn die Zahl wirklich nur aus 4 Stellen besteht..dann soll ja auch nur eine 4 im Zähler stehen und nicht die Anzahl von 1841..1861..das wäre ja plump..zumal die Zahl ja dann immer fest ist..

lol..ich hoffe du hast verstanden was ich in dieser Chaoserklärung sagen will...
:D
 
Keine Ahnung was du vorhast, aber nimm' doch einfach ff als Aussteiger. Bei dynamischen Arrays ist aber wohl besser mit Pointer zu arbeiten, also man merkt sich irgendwo Startadresse und Länge beim Einlesen.
 
Was mir gerade aufgefallen ist: Das Ergebnis der Addition kriegst du gar nicht in ein Byte rein. Also müsstest du das Ergebnis in 2 Byte ablegen.

Bei Ein-Byte breitem Ergebnis: Wenn die 0 als Wert mitgezählt werden soll, müsstest du immer wenn du auf eine 0 triffst alle Bytes bis zum Ende der Tabelle auf 0 überprüfen. Wenn nichts anderes mehr kommt als 0, ist die 0 von der du gerade angefangen hast zu prüfen das Ende der Tabelle. Wenn doch noch was anderes kommt, dann zählst du Anzahl Werte hoch und schaust dir das nächste Byte an. usw. Aber wenn zufällig eine 0 als letzter Wert drinsteht, ist das Ergebnis natürlich falsch. Also irgendeine Bedingung muss man eben haben.

Bei Zwei-Byte breitem Ergebnis: Hier kann eins von beiden Bytes 00 sein, ohne dass das Ergebnis 0 ist. Du musst beide Bytes überprüfen ob Byte1 AND Byte2 == 0.

Woher hast du überhaupt diese Aufgabe?
 
Übe Assembler und habe nach Aufgaben im Netz gesucht..diese ist eine davon.
So wie es aussieht ist es eine Uni-Aufgabe...


"Keine Ahnung was du vorhast, aber nimm' doch einfach ff als Aussteiger. Bei dynamischen Arrays ist aber wohl besser mit Pointer zu arbeiten, also man merkt sich irgendwo Startadresse und Länge beim Einlesen".

Wie genau geht man denn beim Pointer vor?
Also Initialisiserung usw.?
Wie gesagt, bin ein newb.
 
Dann würd ich ein Buch oder Tutorials durcharbeiten und nicht gleich Uniaufgaben zu lösen versuchen. Du solltest erst Assembler grundlegend können, bevor du versuchst Tests zu absolvieren.
 
Ein Pointer ist nichts weiter als eine Variable, zB in einem Register abgelegt, dessen Wert eine Adresse darstellt. Wenn R das Register ist, kann man also anstatt einer direkten Adressenangabe @R angeben. Muß man nur aufpassen, daß der Wert auch in einem adressierbaren Bereich liegt.

Einige Mikrocontroller haben auch vglw. große Speicherbereiche, die nur indirekt, also über Pointer, ansprechbar sind. Da legt es sich meist gut größere Datenmengen ab.
 
lol
Was glaubst du wie es an der Uni ist...ich übe diese Aufgaben weil ich nur wenige zum Üben von meiner Uni bekommen habe.
Da kriegst du auch nicht nur ein Script oder sollst dir eins besorgen..stattdessen geben sie dir Aufgaben, die du bis in einer Woche zu lösen hast...und wie du das machst interessiert keinen.
Ich arbeite parallel schon auch mit einem Script..aber learning by doing ist in diesem Fall etwas schneller und effektiver, da man viele Aspekte, die im Script angeschnitten werden theoretischnur schwer nachvollziehen kann...z.B. die Ports (ein-ausgabe) sind in meinem Script nur sehr schlecht erklärt...aber als ich es mal selbst gemacht habe, habe ich es auch ziemlich schnell verstanden...

Nur manchmal braucht man halt Hilfe
;)
 
Zurück
Oben