Forum: Mikrocontroller und Digitale Elektronik Bitmatrix transponieren


von Johannes H. (johannes1st)


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)


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)


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
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
Noch kein Account? Hier anmelden.