Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : MOV CX,ES:[DI] ??? [ Archives / Newbii ] (Arnaud16022)

mardi 19 avril 2005 à 12:08:39 | MOV CX,ES:[DI] ???

Arnaud16022

Membre Club
hello tout le monde question de newbie, je comprends pas cette command:
MOV CX,ES:[DI]
bon le mve ca va, le CX itou, mais apres ca coince...
plus généralament, je n'ai pas bien saisi pour le coup du segment:offset
j'ai lu de la doc a ce sujet, alors OK, segment ca 'pointe' (mouais...) vers une table qui donne différentes infos, mais je vois pas bien le pourquoi du comment de la chose
Quelqu'un pourrait -il m'expliquer ca a sa maniere svp ? j'en connais d'autres que ca pourrait aider mdr

merci bien
++
ad
_______________________
Omnia vincit labor improbus

samedi 23 avril 2005 à 18:36:23 | Re : MOV CX,ES:[DI] ???

ShareVB

salut,

bon, déjà dans les premiers ordi, tu avais un bus d'adresse de 20bits et des registres de 16 : ce qui pose un prb, il manque 4 bits. Il faut dons 2 registres pour pointer une zone mémoire

ta mémoire conventionnelle est de 1Mo (2 puissance (20bits d'adresse) octets), divisée en 65536 segments de 16 octets...

le premier segment est d'indice 0, le dernier d'indice 65535 : normale puisque tu es en 16bits et que en 16bits, tu as des nombres compris entre 0 et 65535...

CS,DS,ES,FS et GS permettent de contenir un numéro de segment

SI et DI (voire d'autres) permette de pointer un des 16 octets du segment : c'est un offset depuis le début du segment

une adresse mémoire c'est donc segment:offset (adresse physique segment * 16 + offset)

donc pour adresser physiquement la zone mémoire B8004h, tu mets dans un registre de segment (sauf CS)
B800h et 4h dans un registre d'index (DI ou SI)

le début de ton code est à l'adresse CS:0000h
le début de tes données est à l'adresse DS:0000h
par ex : un MOV AX,[DI] se traduit par MOV AX,word ptr DS:[DI] et accède à la zone mémoire DS:DI pour lire un mot (adresse physique DS*16+DI)

dans ES, tu peux mettre le numéro de segment que tu veux

donc, en conclusion, MOV CX,ES:[DI] veut dire "met dans CX, le mot à l'adresse ES:DI". Après tout dépend des valeurs de ES et DI : si par ex, c'est ES=0B800h et DI=0, ca te donne dans CH, le premier caractère de l'écran (coin sup gauche) et dans CL, son attributs

ShareVB

samedi 23 avril 2005 à 19:47:39 | Re : MOV CX,ES:[DI] ???

Arnaud16022

Membre Club
...
waou
t'es un bon prof tu sais ;)
Merci bcp....
j'ai qd meme une autre question: la tu me parles du mode réel, mais en protégé, le segment dans segment:offset il ne pointe pas vers une adresse mémoire mais vers une tableau de renseignements (si j'ose dire)
ca change qqch point de vue programmation?
et puis si t'avais une bonne url qui explique tout ca... moi j'ai imprimé le cours de paul Carter (pov imprimante, 180 pages dans les dents :) ) il est super mais comme tu vois il résouds pas tous mes pbs.
pour l'instant j'ai pas d'autre pb de ce genre, mais c'est que (honte a moi) je n'ai jamais écrit une ligne d'asm, j'ai trop de progs c++ a terminer, au moins 5 en cours ... affaire a suivre
en tt cas merci
++
ad

_______________________
Omnia vincit labor improbus

samedi 23 avril 2005 à 20:40:50 | Re : MOV CX,ES:[DI] ???

ShareVB

salut,

dans le mode protégé, tous les registres de segment sont égaux (sauf FS qui pointe vers les infos sur le processus dont PEB), donc on s'en "fout", on met simplement des trucs comme MOV [eax],5 ; ADD [ebx+2],12. On n'utilise plus les segment:offset mais simplement le offsets 32bits entre []....tout est dans un même espace d'adressage de 4Go max...c'est le processeur (ou l'OS je sais plus) qui se débrouille...enfin le 32bits protégé c'est pour Windows, avec les apis et pas le int 21h (me semble-t-il...)

Tout ce que j'ai dis dans le post d'avant, c'est uniquement quand tu fais du 16bits mode réel : du DOS ou un boot loader, un OS...Quant à un mode 16bits protégé, je sais pas si ca existe...

ShareVB

lundi 25 avril 2005 à 00:04:05 | Re : MOV CX,ES:[DI] ???

Funto66

Ouais cool merci pr ces infos aussi :)

---------------------------------------------------------
Patience et longueur de temps font plus que force ni que rage....
Coucous flingueurs 3D : http://www.freewebs.com/cf3d/



Cette discussion est classé dans : mov, cx, di, segment


Répondre à ce message

Sujets en rapport avec ce message

boot system [ par henri12 ] salut je viens de trouver ce code qui permer de lancer un fichier sur une disquettr a: exemple systemje voudrais qu il me lance le jeu pong sur a:  j tp [ par rajabo ] je suis débutante en assembleur et je veux ecrire un programme qui fait la saisie d'une suite de nbres à stocker ds 1 tableau,la saisie s'arrete lors  interruption [ par aboulkhir ] salut j essaye de gerer le clavier en interruption en asselmbleur voila mon programme je travaille sous debug en invite de commande de windowsclimo pb mov [di+si], [bx+si] [ par nicographx ] bonjourj'ai un problème : je cherche à faire une instruction de typemov [di+si], [bx+si]mais je ne voit pas comment faire, il me ressort toujours la m prog tri en EMU8086 [ par joneskech ] bsr,j ecrit ce programme pour le tri en EMU8086 ;mais contient des erreures pouvez_vouz m aider?#make_exe#data segment tab db 1 dup (1,9,2,6,3,5)data Probleme ds mon code ki peut m aider?? [ par Gillouille ] voila l'objectif de ce programme c est de comparer deux fichiers de longueur differente et d'y trouver tt les éléments commun kelke soit leur position Probleme avec NASM et ALINK [ par epineurien ] Bonjour ! Voilà ma question : Je commence à utiliser NASM mais j'ai quelques problemes avec le linker ; Alink. Avec ce code (issu de la doc. de NASM Graphique [ par RM50Man ] Bonjour a tous!!!!Je veux tracer une ligne mais ca ne marche pas, je passe les parametre par la pile,et ensuite ds la fonction principale, je remplis Simple addition [ par nostra ] Big totoJe n'arrive pas à afficher les valeurs A (=3) et B(=2) ainsi que le résultat de l'addition. Merci de trouver le ou les erreurs commises.;-----


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.