taille de la ram

taille de la ram - ASM - Programmation

Marsh Posté le 30-05-2005 à 19:23:51    

Bonjour!
 
j'essaye d'afficher la taille de la ram dispo en asm en utilisant: int 12h
.je ne dispose que des interruptions BIOS.la valeur est stockée dans ax or quand
j'essaye de l'afficher, y'a rien sauf des espaces.
ou est le soucis?
printf affiche des caractères
 
 
int 12h
mov bp,ax
mov cx,tmp
mov dh,8h
mov dl,0h
call printf
 
merci!!

Reply

Marsh Posté le 30-05-2005 à 19:23:51   

Reply

Marsh Posté le 31-05-2005 à 12:23:57    

Bonjour
Normalement, quand on utilise des fonctions de librairie, il faut passer les paramètres par la pile. C'est le cas pour linux et je pense aussi pour dos. Il faut donc déclarer une chaine contenant le format "%d\n" en l'occurence, empiler son adresse puis empiler le nombre (ax)
si le printf ne vient pas d'une librairie mais est défini ailleurs, il faut voir comment transmettre les paramètres à cette fonction.
En règle général, il est très risqué de modifier le registre bp qui sert justement souvent de cadre de pile.
Au vu du bout de code présenté, il semblerait que printf est une fonction issu d'un sous programme
que le nombre doit être entré dans le registre bp, qu'il faille un tampon intermédiaire dont l'adresse est en cx que le nombre doit faire 8 caractères ? quand au 0 dans dl ???
Bref il faut soit plus de code, soit dire d'où vient le printf

Reply

Marsh Posté le 31-05-2005 à 20:05:27    

en fait j'ai booté sur une disquette,donc je ne dispose pas des interruptions DOS.
c'est pour cette raison que "printf" est un sous programme
que j'ai fait (un appel de int 10h (bios)avec affichage de caractère) pour afficher une chaine de caractères.
en fait je souhaitait avoir plus de précisions sur l'utilisation d'interruptions du BIOS comme int 12h qui normalement doit m'afficher la taille de la ram en ko or ici
comme je le décris, je n'ai que des espaces.tout ce qui est en dessous de int 12h sert à initialiser les valeurs de int 10h pour afficher cx=nbr de caracères,dh et dl pour les lignes/colones.

Reply

Marsh Posté le 01-06-2005 à 12:35:50    

Bonjour
Je n'ai jamais utilisé le int 10h car j'écrivais directement en mev vidéo quand je faisais de l'assembleur dos il y a 15 ans.
Pour afficher un nombre, il est nécessaire de le convertir en chaine de caractères auparavant. Est-ce que l'INT 10h fait ça ? (j'en doute) sinon il va considérer le contenu de AX comme le code ascii de 2 caractères ou 1 caractère plus attribut ce qui n'affichera évidement pas le nombre voulu.
ou alors ax est un pointeur sur la chaine à afficher ou ??
Pour savoir si cela vient du int 12h ou du printf, il suffit de charger dans ax une valeur litéral et de la faire afficher par printf et là on sait qui est le coupable.
Je suis pratiquement certain que c'est le printf.

Reply

Marsh Posté le 01-06-2005 à 19:04:51    

je teste et je te dis ça mais j'en doute car int 10h est censé afficher des caractères "tout con"....
 
 
bref je teste!
 
PS: je programme pas sous DOS

Reply

Marsh Posté le 16-06-2005 à 15:46:50    

:D
j'ai tjour pas eu le temp de tester....ça arrive! lol

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed