Register direkt auslesen

Gast #2280557
Lesenswert?

Hallo ich habe hier schon im Forum gesucht doch bin leider nicht fündig 
geworden.

Ich möchte eine variierende anzahl von Registern auslesen. (z.B von 
0x2000 - 0x4000)

gibt es eine Möglichkeit die Register direkt anzusprechen ohne vorher 
Variablen zu deklarieren die auf die Register zeigen ?
Gast #2280655
Lesenswert?

Das ist einer der seltenen Fälle, in denen es sich selbst in C lohnt, 
den Inline-Assembler zu verwenden:

LDX, Anzahl_der_Register; (bei Dir 0x2000-0x4000)
REGMOVD, Startwert, letzte_Zieladresse ; (bei Dir 0x4000, Letzte 
Zieladresse)

REGMOVD kopiert den gesamten Block beginnend bei der obersten Adresse; 
kopiert von Start auf Zieladresse, erniedrigt dann die Adressen um 1, 
ernidrigt x um 1, und wiederholt das solange x>0.

Leichter zu verstehen ist eigentlich REGMOVI (i für increment), hier 
fängt bei der niedrigsten Adresse zum Kopieren an. Abbruch ist auch hier 
bei 0. Nur musst Du dafür das LDX mit dem Zweierkompliment der 
Registeranzahl-1 belegen, der Überlauf des Registers erzwingt dann den 
Abbruch, da Carry-Flag nicht berücksichtigt wird. Das ist etwas Tricky 
und liest sich dann im Code schwerer.

Natürlich kannst Du das auch in C schreiben, aber so ist es 
übersichtlicher. Die wenigsten Compeiler (nur einige 
hochproffessionelle) können diese Optimierung. Wieso also Rechenzeit 
verschenken und etwas kompliziert schreiben wenn es auch einfacher geht. 
Wichtig, Anzahl_der_Register darf höchstens eine 12-Bit Zahl sein.
Gast #2280693
Lesenswert?

> hm, hätte ich das damals auf dem 68000 schon gekannt :-)

...gab's bei dem 68k nicht "MOVE.B Dx, (Ax)+" in Verbindung mit einem 
LOOP?
LDIR, LDDR bei dem Z80, beim 80x8x kann ich mich noch an 
LODSx/STOSx/MOSVx erinnern...
Gast #2280695
Lesenswert?

Klaus Wachtler schrieb:
> Alle Achtung; ich habe noch nicht mitbekommen, um welchen Prozessor es
> eigentlich geht.
>
> Oder geht das auf jedem Rechner so?

Ich muss Dich enttäuschen, bei einem Appel Macintosh mit der Bord Rev. 
0716.5822.53 geht das leider nicht

Auf dem Prozessor, den der TO verwendet, da geht das.

Ganz sicher !!!

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