Bitmatrix transponieren

OP #5056676
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.
#5056712
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren