Program counter Wert ermitteln

R

R.Freitag

Guest
Hallo

ich suche eine Möglichkeit, den Wert des PC in C auszulesen bzw. zu
speichern. Weiss jemand, wie es geht?

Gruss

Robert
 
Thomas Belau <thomas.belau@z1013.de> schrieb im Beitrag <besm7m$4l2$1@online.de>...
ich suche eine Möglichkeit, den Wert des PC in C auszulesen bzw. zu
speichern. Weiss jemand, wie es geht?

Das bieten nicht viele Prozessoren an.

Na ja, der Prozessor muss es nicht tun.
Wenn der C-Compiler wie ueblich die Return-Adresse auf den Stack
legt, und die Bitanzahl von Code-Adressen mit der Bitanzahl des
Datentyps int uebereinstimmt, und keine Registeroptimierungen an
sind, hilft dieser Konstrukt:

int PC(int i)
{
return *(&i+1);
}

um an jeder Programmstelle den PC zu holen:

addr=PC(0); // liefert den PC *an einer Stelle innerhalb der Zeile*

Außerdem gibt es bei den "Großen" Prozen das Problem, daß
man wissen muß, wo man sich bewegt. Im physischen Adressraum oder im
logischen (siehe Segmentierung beim Intel).
Das allerdings stimmt, doch es geht wohl um uC.
--
Manfred Winterhoff, reply-to invalid, use mawin at gmx.net
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 
"MaWin" <me@privacy.net> wrote:
Thomas Belau <thomas.belau@z1013.de> schrieb im Beitrag <besm7m$4l2$1@online.de>...

ich suche eine Möglichkeit, den Wert des PC in C auszulesen bzw. zu
speichern. Weiss jemand, wie es geht?

Wenn der C-Compiler wie ueblich die Return-Adresse auf den Stack
legt, und die Bitanzahl von Code-Adressen mit der Bitanzahl des
Datentyps int uebereinstimmt, und keine Registeroptimierungen an
sind, hilft dieser Konstrukt:

int PC(int i)
{
return *(&i+1);
}
Oops. Das kann beliebig weit daneben gehen. Dein Konstrukt setzt noch
voraus, daß der Stack nach unten wächst und der Compiler wirklich nur
Returnadresse und Argument auf den Stack legt.

An den OP: in C gibt es keinen PC, die Frage ist also relativ sinnfrei.
Allerdings können die meisten Linker ein Mapfile schreiben, das zumin-
dest die Adressen aller globalen Variablen und Funktionen enthält.


XL
--
Das ist halt der Unterschied: Unix ist ein Betriebssystem mit Tradition,
die anderen sind einfach von sich aus unlogisch. -- Anselm Lingnau
 
R.Freitag schrieb:
Nein, ich habe ein Programm, welches auf mehreren Prozessoren laufen soll.
Hallo,

äh, ich wollte Dir doch gerade begreiflich machen das es für die
Ermittlung des Program Counters keine portable Lösung gibt, weil es dazu
in Standard C nichts gibt.

Bye
 
Uwe Hercksen wrote:

R.Freitag schrieb:

Nein, ich habe ein Programm, welches auf mehreren Prozessoren laufen
soll.

Hallo,

äh, ich wollte Dir doch gerade begreiflich machen das es für die
Ermittlung des Program Counters keine portable Lösung gibt, weil es dazu
in Standard C nichts gibt.

Jaja. Genau _das_ wollte ich ja auch wissen.

Danke!

Robert
 

Welcome to EDABoard.com

Sponsor

Back
Top