Lecture adresse memoire en langage c++

Fermé
germond - 31 août 2001 à 21:58
 germond - 8 sept. 2001 à 21:31
ecrire sur une adresse (&h3f8) 2.registre=valeur1,ensuite
allez lire le 6° registre ,et afficher les valeurs à l'ecran
A voir également:

4 réponses

weblook Messages postés 78 Date d'inscription lundi 25 juin 2001 Statut Membre Dernière intervention 18 décembre 2004 7
5 sept. 2001 à 00:48
Si j'ai bien compris vous voulais mettre la valeur 1 à l'adresse 0x03f8:
pour cela il suffit de faire :
ptraccess=0x03f8 //on initialise le pointeur à l'@ 0x03f8 (le pointeur pointe sur cette adresse)
Puis ensuite de mettre à cette adresse la valeur 1 :
*ptracess=1
Si la question esy bien celle là cad mettre une valeur à une adresse spécifique c'est ce code qu'il faut utiliser.
Bye!
2
pascal.libert Messages postés 9 Date d'inscription samedi 25 août 2001 Statut Membre Dernière intervention 15 octobre 2001 3
1 sept. 2001 à 12:10
Je ne comprends pas bien la question. Mais je suppose que:
1 tu veux accéder à un mot de 32 bits ( registre) situé à l'adresse 03f8. et que dans cette adresse tu veux mettre la valeur 1.
2 Tu veux faire un saut de 5 fois le mot long (5+1)= le 6° registre.
et que tu veux le lire à l'écran.
Voici une petite routine qui doit faire ce que tu veux.
On utilise un pointeur sur un long ( 32 bits) et on l'initialise l'adresse à lire dans valeur. Ensuite, tu modifie le contenu du pointeur. Tu fais un saut et tu fais un printf.

#include <stdio.h>
#include <conio.h>




void main (void)
{
long*ptracces;
long valeur;
char chaine [81];

valeur = 0x03f8;
ptracces = &valeur;
*ptracces = 1;
ptracces = ptracces+ (5* sizeof(long));
valeur = *ptracces;

printf ("LA VALEUR DU 6° REGISTRE est : %x \n",valeur);
gets(chaine);
}

En espérant que ça va marcher .
Si tu as d'autres questions. Pas de problème. Je peux essayer de chercher avec toi.

A plus sur la toile :).
0
Utilisateur anonyme
3 sept. 2001 à 13:08
salut pascal, g une question (un doute???) sur ton code..

...
valeur = 0x03f8;
ptracces = &valeur; // La tu recupere l'adresse de l'entier valeur
// je vois pas le rapport avec le registre en question.
//comment sais tu que c'est bien la bonne adresse mémoire??
*ptracces = 1; // meme remarque
...

a ta place je ferai plutot
ptracces=valeur //(au lieu de &valeur)

qu'en penses-tu??

Castor


0
pascal.libert Messages postés 9 Date d'inscription samedi 25 août 2001 Statut Membre Dernière intervention 15 octobre 2001 3
4 sept. 2001 à 23:37
Bien vu . Il faut aussi caster le format car sinon ça ne passe pas bien. J'ai revérifié, je lis bien la bonne adresse mais quand j'effectue la modif de la valeur il y à une exception "access violation".
Aurais tu une idée??
Merci pour le tuyau.Je me remets au C et C++. La reprise est un peu difficile.
A+.
0
Utilisateur anonyme > pascal.libert Messages postés 9 Date d'inscription samedi 25 août 2001 Statut Membre Dernière intervention 15 octobre 2001
5 sept. 2001 à 13:34
Euh... access violation ca signifie en général que tu as pas le droit d'ecrire.. donc le registre apres décalage, ptet qu'il est réservé, non? A vérifier...

Castor
0

merci pour tes infos,je lis bien sur l'adresse mais je ne vois pas

évoluer la valeur quand j'active les entrées

je te passe l'exemple que j'ai ecrit en qb45 je voudrais l'écrire

en c++
rem début programme
ba=&h3f8

OUT ba+ 4,1

DO
etat6=&h3f8
if etat6=16 and c=0then c=1
if etat6=0 and c=1 then z=z+1:c=0
if z>3600 then aa=aa+1:print "tour codeur";aa : z=0
LOOP

Ce programme me permet de voir avec précision ,le top du codeur
le problème c'est que je manque de vitesse je suis tout juste a 2000 hertz
merci à bientôt J F G
0