Lecture adresse memoire en langage c++

germond -  
 germond -
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   Statut Membre Dernière intervention   7
 
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   Statut Membre Dernière intervention   3
 
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
 
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   Statut Membre Dernière intervention   3
 
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   Statut Membre Dernière intervention  
 
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
germond
 

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