Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Z80 Assemblerfrage » Themenansicht

Autor Thread - Seiten: -1-
000
28.06.2011, 09:00 Uhr
Ralph



Hallo Assembler Fachleute,

ich brauch im Register HL, den aktuellen Stand des Z80 Befehlszählers !
Konkret will ich rausfinden, auf welcher Adresse ein verschiebliches Programm Z80 grade läuft.

Ich hab adhoc keinen Ansatz wie ich das anstellen kann. Mein Instinkt sagt mir das ich den Wald vor lauter Bäumen nicht seh, vielleicht geht es Euch ja anders und ihr habt ne einfache Lösung.

Dankeschön sagt Ralph Hänsel :-)
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
28.06.2011, 09:33 Uhr
AE
Default Group and Edit


LD HL,0
ADD HL,SP
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
28.06.2011, 10:47 Uhr
Heiko_P




Zitat:
AE schrieb
LD HL,0
ADD HL,SP

Damit wird der aktuelle Stand des Stackpointers ermittelt. Dem aktuellen Stand des Befehlszählers kommt man näher mit einem CALL und anschließendem z.B. POP HL, das Ergebnis ist die Rücksprungadresse nach dem CALL-Befehl.

Viele Grüße

Heiko
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
28.06.2011, 11:25 Uhr
AE
Default Group and Edit


Entschuldigung!

im zu untersuchenden Programm 3-Byte- Behehl ersetzen durch CALL adr.
im (freien) Speicher bei adr. : ersetzten Befehl, POP HL, JMP (HL)

Variante für 1-Byte-Befehl : RST nr.
im Speicher bei nr. : JMP adr.
weiter wie oben..

Die wenigen Bytes lassen sich vom BASIC aus mit POKE-Befehlen erzeugen.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
28.06.2011, 20:32 Uhr
Ralph



Hm.. also mach ich folgendes, oder

Call M1
M1: pop HL ; und in HL steht jetzt die Adresse der Marke M1, weil es die Rückkehradresse des Calls ist

Edit: das ist ja Quatsch, denn in verschieblichen Code geht kein Call

Also nochmal.. das Programm schreib ich selber, aber es muss rausfinden an welcher Adresse es geladen wurde.



Gruß Ralph
--
Es geht alles erst richtig los !

Dieser Beitrag wurde am 28.06.2011 um 21:00 Uhr von Ralph editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
28.06.2011, 21:00 Uhr
Wusel_1



Vergesse aber nicht auch gleich wieder PUSH HL zu machen, sonst geht der Rücksprung irgendwohin.
Also
CALL M1

M1: POP HL
PUSH HL
CALL OUTHL (#07F1)
RET
--
Beste Grüße Andreas
______________________________________
DL9UNF ex Y22MF es Y35ZF
JO42VP - DOK: Y43 - LDK: CE

*** wer glaubt, hört auf zu denken ***

Dieser Beitrag wurde am 28.06.2011 um 21:01 Uhr von Wusel_1 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
28.06.2011, 21:13 Uhr
Ralph



Ne Wusel_1 das mit dem Call M1 geht eh nicht.. siehe auch mein Edit in 004..

aber Du hast mich dennoch auf ne Idee gebracht...

Ein Call auf eine feste bekannte Adresse geht ! Ich lade auf die Call Adresse einfach ...
M1: POP HL ;Rückkehradresse vom Call M1=Adresse die ich suche
PUSH HL ;Rückkehradressse wieder in Stack
RET ;Rückkehr aus Call M1

und im Programm selbst steht dann das hier
...
Call M1 --- auf M1 muss der obige Code unten stehen
M2: nun in HL M2
...



Gruß Ralph
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
29.06.2011, 13:59 Uhr
Ralph



Hm.. gibt es keine elegantere Variante ?? Es ist blöde erstmal das UP M1 umzuladen.. Irgendwie gefällt mir das nicht.
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
29.06.2011, 18:35 Uhr
lux-O-mat



Ich fürchte nicht. So wie ich dass sehe, sind CALL und RST die einzigen Befehle, die lesend auf den PC zugreifen und woanders (im Stack) speichern.

MfG, Jan.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
29.06.2011, 19:36 Uhr
volkerp
Default Group and Edit
Avatar von volkerp

Du könntest ein beliebiges bekanntes Programm aufrufen, unter CPM z.B. CALL 5 für Versionsnummer o. Consolenstatus oder so. Beim Z9001 wäre z.B. ein festes RET im BIOS (FFFF) eine mögliche Ansprungadresse. Oder Du schreibt ein RET auf eine feste Position und hast so Dein Mini-UP.

Nach der Rückkehr aus dem UP liegt die Adresse immer noch auf dem Stack (sofern nix dazwischen funkt, sicherheitshalber also mit DI ... EI einrahmen)
,Du musst nur noch die Stackposition passend manipulieren.

also sowas in der Art

DI
CALL 5
m1: DEC SP
DEC SP
POP HL; HL = Adr. M1
EI

(ungetestet!)
--
VolkerP

http://hc-ddr.hucki.net
(Z9001, Z1013, LC-80, ...)

Dieser Beitrag wurde am 29.06.2011 um 19:41 Uhr von volkerp editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
01.07.2011, 21:05 Uhr
Ralph



@All... ich habs jetzt damit gemacht

RST 10H ;beim AC1 Ausgabe Akku
m1: DEC SP
DEC SP
POP HL; HL = Adr. M1

Das braucht die wenigsten Befehle Danke Euch allen

Gruß Ralph
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek