vaytess
Messages postés14Date d'inscriptionsamedi 18 octobre 2008StatutMembreDernière intervention16 juillet 2009 27 déc. 2010 à 18:23
joli travail..c'est très impressionnant
aboulkhir
Messages postés11Date d'inscriptionlundi 26 novembre 2007StatutMembreDernière intervention18 mai 2008 14 mai 2008 à 13:26
salut
merci pour le code
seulement moi je compile en debug sous DOS et il me donne erreur à l instruction mov word ptr es:[88h*4] est ce ke vous pouvez m 'aider
aparan
Messages postés3Date d'inscriptionjeudi 8 février 2001StatutMembreDernière intervention10 juin 2006 20 févr. 2006 à 13:27
pour RM50Man:
En mode réel, le processeur adresse sa mémoire en bloc de 64Ko. Quand on veut accéder à une zone mémoire (pour lecture, ecriture, execution de code ...etc), on doit donc toujours donner deux infos pour l'adresse: le segment (que l'on pourrait considérer comme le numero du bloc de 64K dans lequel se trouve notre adresse), et l'offset (~ le décallage dans ce segment).
L'adresse des différents codes qui gèrent les différents évènements systèmes (exemple appuie d'une touche clavier, arrivée d'une infos sur un port série, signal de l'imprimante pour indiquer une fin de papier etc etc) est stockée dans la zone de mémoire de démarrant au segment 0. In note généralement 0000:0000. Une adresse d'interruption est décrite donc sur 4 octets (2 pour le segment, 2 pour le décallage).
L'adresse d'une interruption peut être calculée donc en faisant N° IRQ * 4 pour l'adresse de l'offset, + 2 octets pour l'adresse de segment. D'où (88h*4) pour l'offset, et (88h*4) + 2 octets pour le segement.
Note: en général, les octets mémoires sont toujours pointés avec les registres DS:SI et ES:DI. D'ou la remise à zéro de ES avec les deux intruction mov ax,0 et mov es,ax.
IMPORTANT: L'auteur se base sur le principe que les interruptions sont rangées dans l'ordre croissant! Cela pourrait ne pas être le cas, et donc il existe une interruption permettant de renvoyer l'adresse d'une interruption directement dans les registres (soit dans ES:DI soit dans DS:SI, je n'ai en tête exactement).
Voilà, j'ai peut-être été long, il y a peut-être des chose que vous saviez déjà. Mais c'est mon défaut.
RM50Man
Messages postés314Date d'inscriptionmercredi 1 novembre 2000StatutMembreDernière intervention20 août 2006 28 déc. 2005 à 01:22
mov word ptr es:[88h*4], offset LitCaractere
;on met notre adresse de routine
mov word ptr es:[88h*4 + 2], seg LitCaractere
Pkoi tu fais 88h * 4
et ensuite 88h * 4 + 2
tu peux m'expliquer!!!
Merci pour le code!!!!!!
Très bien, très utile !! Surtout quand on développe un OS :D !!
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 2 janv. 2004 à 16:40
pour les débutants, tu peux preciser que ton code concerne le mode réel du processeur.
le 16 bits est utile pour programmer des loaders d'OS mais depuis le 286, les processeurs sont capables d'utiliser le mode protégé.
a l'heure actuelle, programmer un OS en 16 bits serait un phénoménal retour en arrière. ( environ 20 ans non? )
NBhack
Messages postés23Date d'inscriptiondimanche 18 août 2002StatutMembreDernière intervention19 septembre 2006 1 août 2003 à 02:54
cool
cs_marcotte
Messages postés22Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention18 janvier 2011 2 juil. 2003 à 03:50
Bravo, tu as l'air d'etre un pro en asm !
Moi je programme depuis 1988 mais avec DEBUG.COM qui est un petit programme inclu dans le vrai dos, et permettant de créer des programmes en point com (.com) inférieurs à 64Ko.
Ya meme un désassembleur inclu, et on peut faire du pas a pas et voir les registres a chaque fois.
Mais bon c'est dépassé je sais, alors je passe à masm32, bye !
27 déc. 2010 à 18:23
14 mai 2008 à 13:26
merci pour le code
seulement moi je compile en debug sous DOS et il me donne erreur à l instruction mov word ptr es:[88h*4] est ce ke vous pouvez m 'aider
20 févr. 2006 à 13:27
En mode réel, le processeur adresse sa mémoire en bloc de 64Ko. Quand on veut accéder à une zone mémoire (pour lecture, ecriture, execution de code ...etc), on doit donc toujours donner deux infos pour l'adresse: le segment (que l'on pourrait considérer comme le numero du bloc de 64K dans lequel se trouve notre adresse), et l'offset (~ le décallage dans ce segment).
L'adresse des différents codes qui gèrent les différents évènements systèmes (exemple appuie d'une touche clavier, arrivée d'une infos sur un port série, signal de l'imprimante pour indiquer une fin de papier etc etc) est stockée dans la zone de mémoire de démarrant au segment 0. In note généralement 0000:0000. Une adresse d'interruption est décrite donc sur 4 octets (2 pour le segment, 2 pour le décallage).
L'adresse d'une interruption peut être calculée donc en faisant N° IRQ * 4 pour l'adresse de l'offset, + 2 octets pour l'adresse de segment. D'où (88h*4) pour l'offset, et (88h*4) + 2 octets pour le segement.
Note: en général, les octets mémoires sont toujours pointés avec les registres DS:SI et ES:DI. D'ou la remise à zéro de ES avec les deux intruction mov ax,0 et mov es,ax.
IMPORTANT: L'auteur se base sur le principe que les interruptions sont rangées dans l'ordre croissant! Cela pourrait ne pas être le cas, et donc il existe une interruption permettant de renvoyer l'adresse d'une interruption directement dans les registres (soit dans ES:DI soit dans DS:SI, je n'ai en tête exactement).
Voilà, j'ai peut-être été long, il y a peut-être des chose que vous saviez déjà. Mais c'est mon défaut.
28 déc. 2005 à 01:22
;on met notre adresse de routine
mov word ptr es:[88h*4 + 2], seg LitCaractere
Pkoi tu fais 88h * 4
et ensuite 88h * 4 + 2
tu peux m'expliquer!!!
Merci pour le code!!!!!!
31 août 2004 à 15:47
2 janv. 2004 à 16:40
le 16 bits est utile pour programmer des loaders d'OS mais depuis le 286, les processeurs sont capables d'utiliser le mode protégé.
a l'heure actuelle, programmer un OS en 16 bits serait un phénoménal retour en arrière. ( environ 20 ans non? )
1 août 2003 à 02:54
2 juil. 2003 à 03:50
Moi je programme depuis 1988 mais avec DEBUG.COM qui est un petit programme inclu dans le vrai dos, et permettant de créer des programmes en point com (.com) inférieurs à 64Ko.
Ya meme un désassembleur inclu, et on peut faire du pas a pas et voir les registres a chaque fois.
Mais bon c'est dépassé je sais, alors je passe à masm32, bye !