ASSEMBLEUR ET EMULATEUR 8086 !

Signaler
Messages postés
224
Date d'inscription
samedi 26 juillet 2003
Statut
Membre
Dernière intervention
30 mars 2009
-
Messages postés
156
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
23 novembre 2011
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/8457-assembleur-et-emulateur-8086

Messages postés
156
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
23 novembre 2011

Vous me faite plané les mecs !!!
Je vien de plusieurs sources et EBArtSoft vous doze tous un par un, il vous explose et vous marcher tous, certe a première vue il a l'aire doué en la matière ... mais il n'en reste que des commentaire ki me sont utile a ... bien rire ;)

Bon trève de plaisanterie je sui fatigué i fo k jaille dormir o taff lol

Tchao

Thyraël
Messages postés
38
Date d'inscription
lundi 18 mars 2002
Statut
Membre
Dernière intervention
29 octobre 2003

merci pour ces détails : j'ai mieux compris certaines choses que tu essayant de m'expliquer.

Pour l'émulateur, on va dire que je développe un simulateur, le terme est plus adapté.

Pour l'assembleur : la fonction move je vais de toute façon la réécrire puisque il suffit d'aditionner b0 au numéro du registre. pour les autres cas que tu soulève, tu as raison... je n'avais pas réfléchi a ça... faudra que je voie.

pour le jump ce n'est pas un gros problème par contre une soustraction me donne la distance, par contre pour la suite du travail sur le tableau ce ne sera certes pas particulièrement obtimisé :)

en tout cas merci pour tes conseils, ça me donne des nouvelles pistes de réflexions ! a+
Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
9
ok qlq precisions...

d'abord sur la methode prenons ta methode MOV

- separe les instructions "SPLIT"
- teste le mot clef "SELECT CASE"
- lit les arguments "SELECT CASE" & "MID"
- puis tu ajoute ton code

tu gere independament les 8 et 16 bits c'est bien mais...
un probleme va se poser lorsque que tu va tomber sur une instruction
du type MOV AX,AH ou bien encore MOV BYTE PTR [BX],AX
ou bien pire encore MOV BYTE PTR ES:[SI+02],10

comment vas tu faire ?
vas tu gerer tout les cas un par un ?

deuxieme interrogation :
sur une instruction on ne peu plus simple comme ADD AX,10 comment vas tu faire pour gerer les multiples possibilités qui s'offre a toi comme d'utiliser l'opcode 01, 03 ou encore 05 ? sachat que pour ax l'op 05 utilise moin de cycle !

troisieme interrogation :
pour un simple saut JMP tu a deux possibilité utiliser EB pour
un saut de moin de 128 octets et E9 pour un saut superieur
a 127 sachant que EB utilise moin de cycle ... mais comment
vas tu connaitre la distance qui separe deux label ou instruction
si tu a deja ecris ton code ?

bref je pense que ce genre de question se poserons d'elle meme quand tu aura plus avancé

Ensuite pour ce qui est de ton emulateur le probleme (de taille !!!)
vient du faite que tu n'emule rien ! je veus dire par la que pour
faire un emulateur il faudrait que tu gere TOUT les registre AX (AH|AL) BX etc..
mais aussi les segments DS CS SS ES, les pointeurs SI DI IP SP BP, les flags
sous forme de bits CF PF AF (et notement IF flags d'interruption) etc..
ou bien d'un registre FLAG 16 bits ET LE PLUS COMPLEXE gerer la memoire
de 0000:0000 a FFFF:FFFF (par paragraph de 16K) dans un tableau ou tu aura
prealablement charger une image du bios

Cela veut dire que dans ton emulateur lorsque l'on rencontre un INT 21h
IP pointe sur la memoire contenu a l'adresse du vecteur d'interruption 21h
(que tu trouvre si mes souvenir sont bon au allentour de 0000:0040 + n°veteur*4)
la pile s'incremente pour reçevoir l'ip de retour etc..etc...

ce n'est pas si simple .....

car je ne t'ai pas encore parler du Hardware pour emuler la console
de l'espace video B800 etc...

bref ça fait deja un gros commentaire tout ça !
je te souhaite quand meme de reussir dans ta tache si tu continue dans cette voie ! lol

@+
Messages postés
38
Date d'inscription
lundi 18 mars 2002
Statut
Membre
Dernière intervention
29 octobre 2003

Pour l'assembleur, ce que tu propose n'est pas très diférent de ce que je fais : première passe j'écris l'exécutable avec le code A10000 et je remplis un tableau d'endroit a remplir, puis je parcours ce tableau en fesant les remplacements, puis j'écris le fichier. non je n'ai pas l'intention de changer mon algo, il marche, et c'est le principal.

Bon ce qu'on va dire c'est que ce n'est pas un émulateur mais un simulateur... ava comme ça ? lol ! cela étant dis je ne sais pas si j'ai bien compris ce que tu explique mais si c'est ce que j'ai compris, un émulateur ne pourrait tourner que sur la machine qu'il émule (comme c'est débile je pense que je n'ai pas tout compris... lol) si tu peux me donner des détails...

A+
Afficher les 8 commentaires