Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Arrays in Assembler (WinALI)


Jojojoxx - Mi 02.05.07 01:03
Titel: Arrays in Assembler (WinALI)
Hallo!

Hier ist ein Ausschnitt meines Assembler-Codes. Dieser Codeabschnitt soll vom Benutzer 9 Zahlen abfragen, die dann in ein Array der Größe 9 gespeichert werden. Leider wird immer nur die erste eingegebene Zahl gespeichert und das in alle 9 Array-Stellen. Ich finde einfach nicht den Fehler darin. Kann mir da jemand helfen?? Hier der Code, leider ist die Formatierung nicht erhalten geblieben...:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
        START 0
  lda 2,'0'
m1  cmp 2,'16'
  bh m2
  INI einfg
  lda 3,einfg
  sta 3,Matrix(2)
  Add 2,'2'
  b m1
        EOJ
einfg   DS        F
Matrix  DS        9F


Danke für die Hilfe!
mfg

Jojo


OlafSt - Do 03.05.07 11:27

Wenn ich das richtig begriffen habe, kann man mit der ()-Zugriffsmethode aus Arrays lesen, aber nicht schreiben. Mit einem Zeiger auf das Array wirds sicher besser klappen - und ist wesentlich mehr "Assembler-Like" ;)


Jojojoxx - Do 03.05.07 11:51

Hi!
Das interessante ist aber, dass ich die erste Zahl, die ich reinschreiben will, auch erfolgreich reinkriege, nur eben auf jede Stelle...!?
Wie funktioniert denn die Methode mit einem Zeiger auf das Array?
mfg

Jojo


fuggaz - Sa 17.05.08 19:44

Auch wenn der Thread schon uralt ist.
Der eine oder andere wird wohl nochmals über google darauf treffen und vllt gerne eine Lösung sehen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  start  0
  lda  1,'0'
aloop  ini  matrix(1)
  add  1,'2'
  cmp  1,'31'
  bl  aloop
;ausgabe - kann gelöscht werden
  lda  1,'0'
test  outi  matrix(1)
  add  1,'2'
  cmp  1,'31'
  bl  test
  eoj

matrix  ds        16f

Erklärung dazu:
Man kann den Akkumulator, also das Register 1, nicht für Felder benutzen.
Der Grund ist mir nicht bekannt. Hat mich ziehmlich in Verzweiflung gebracht...
Benutzt man den Akkumulator wird immer an der gleichen Position gespeichert.
Als erstes lade ich in das erste Register die erste Position des Feldes: null
Da der Zähler in WinAli in Zweierschritten vorangeht, muss man auch immer schön mit zwei addieren.
Wenn man nach Delphi bei feld[5] speichern will, dann ist dies bei WinAli an Position 10.
Danach fahre ich nur noch mit der Schleife fort und teste dann nochmals die Eingabe.


mfg fuggaz