Forum: Mikrocontroller und Digitale Elektronik Bitmatrix transponieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Johannes H. (johannes1st)


Bewertung
0 lesenswert
nicht lesenswert
Hi, ich bin neu hier und hoffe in irgend eine Weise Hilfe zu finden.
Ich benutze den Sim8008 also geht es um Assembler auf dem I8008 von 
Intel.
Folgende Aufgabe ist gestellt:
-die ersten 8 Byte eines Registers werden als 8x8 Bitmatrix behandelt
-speichern Sie in den darauffolgenden 8 Byte die transponierte Matrix ab

soweit so gut, ich habe den Code fertig und er dürfte auch funktionieren 
aber aus irgend einem Grund geht der Prozessor mitten im Code in den 
Halt-Status.
Genau dann wenn er die erste Zeile der Matrix als erste Vertikale im in 
der T-Matrix abgespeichert hat.

hier der Code:
1
; Matrix Transponieren
2
; E = 8 , B = ZwischenSpeicher für Zeile, C = innere Schleife, D = äußere Schleife
3
4
mvi e,8
5
mvi d,0
6
7
aussenLoop:
8
inr d
9
call verteileAufZeilen
10
mvi a,8
11
sub d
12
jnz aussenLoop
13
jmp ende
14
15
verteileAufZeilen:
16
      mov l,d
17
      mov b,m(hl)
18
      mov c,e
19
start:
20
       call hilfe
21
dcr c
22
jnz start
23
ret
24
25
hilfe:
26
      mov a,b
27
      rar
28
      mov b,a
29
      cnc rotieren0
30
      cc rotieren1
31
ret
32
33
berechneZielposition:
34
                     dcr e
35
                     mov a,e
36
                     inr e
37
                     add c
38
                     mov l,a                 
39
ret
40
41
rotieren1:
42
          call berechneZielposition
43
          mov a,m(hl)
44
          rlc
45
          mov m(hl),a
46
          mvi a,1
47
          ora m(hl)
48
          mov m(hl),a           
49
ret
50
51
rotieren0:
52
          call berechneZielposition
53
          mov a,m(hl)
54
          rlc
55
          mov m(hl),a
56
          mvi a,1
57
          ora m(hl)
58
          mov m(hl),a
59
          mvi a,1
60
          xra m(hl)
61
          mov m(hl),a
62
ret
63
64
ende:
65
end

Vielen Dank, vllt hat jmd. ne Idee.

: Verschoben durch Moderator
von fop (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Soweit ich sehe, lädst Du das H-Register nie. Ein schreibender Zugriff 
auf M also die Speicheradresse, auf die das Registerpaar HL zeigt, geht 
irgendwohin.

von Sinus T. (micha_micha)


Bewertung
0 lesenswert
nicht lesenswert
Da du mit einem Simulator arbeitest, hast du doch alle Möglichkeiter 
nach dem Halt dir den Zustand der CPU anzuschauen. Also die 
Halt-Adresse, den Inhalt der Register usw.
Da in deinem Programm offensichtlich auch kein Halt vorkommt, wird es 
wohl andere Ursachen haben, z.B. Illegal Instruction.

Die von dir verwendete Mnemonik sieht auch überhaupt nicht nach I8008 
aus, sondern eher nach dessen Nachfolger.

Dann wäre es daher auch gut, wenn du das Listing, dass der Assembler 
auswirft, hier postest, dann kann man sich bei Antworten direkt auf 
bestimmte Adressen beziehen.

Edit:
Muss mich selbst berichtigen: es gibt tatsächlich eine "alte" und eine 
"neue" Schreibweise der Mnemonik: http://petsd.net/8008.php

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.