Rechercher : dans
Par :

Lecture adresse memoire en langage c++

Dernière réponse le 8 sep 2001 à 21:31:25 germond, le 31 aoû 2001 à 21:58:12 
 Signaler ce message aux modérateurs

Ecrire sur une adresse (&h3f8) 2.registre=valeur1,ensuite
allez lire le 6° registre ,et afficher les valeurs à l'ecran

Meilleures réponses pour « lecture adresse memoire en langage c++ » dans :
Langage C - Les types de données Voir Les types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
L'adresse mémoire ne peut pas être 'Read' ou 'Written' VoirL'adresse mémoire ne peut pas être 'Read' ou 'Written' Vérifier le fonctionnement des barrettes mémoire Vérifier la présence de malwares et le cas échéant, les éradiquer Vérifier la configuration de Windows Nettoyer le disque dur Réparer...
Langage C++ - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C++ sont typées, c'est-à-dire que les données contenues dans...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

pascal.libert, le 1 sep 2001 à 12:10:08

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 :).

Répondre à pascal.libert

2

castor, le 3 sep 2001 à 13:08:09

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


Répondre à castor

3

pascal.libert, le 4 sep 2001 à 23:37:24

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+.

Répondre à pascal.libert

5

castor, le 5 sep 2001 à 13:34:55

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

Répondre à castor

4

weblook, le 5 sep 2001 à 00:48:36

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!

Répondre à weblook

6

 germond, le 8 sep 2001 à 21:31:25


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

Répondre à germond