BIBLIOTHEQUE POUR LE 8086

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
- - Dernière réponse : BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
- 25 juin 2007 à 09:57
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/43150-bibliotheque-pour-le-8086

Afficher la suite 
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
salut,



plusieurs petits détails:

1 - pourquoi empiler systematiquement tous les registres par "pusha". l'utilisation abusive de la pile en mode réel pourrait ecraser du code ou des données. Par exemple, pour un binaire .com qui aurait une pile de 100h octets et sans compter l'utilisation de la pile a l'interieur meme des fonctions ou de leurs paramètres, tu ne pourras en imbriquer que moins de 15 si elles ont toutes un pusha en entrée. Ce genre de bug serait extremement difficile à retrouver puisqu'il pourrait générer tout et n'importe quoi a n'importe quel moment.

2 - quelle est la fréquence de la synchronisation verticale et donc, quel est l'unité du parametre passé à ta fonction delay(dx) ? Le PC dispose d'une horloge interne (cela dit en passant).

3 - pourquoi ne pas mettre directement cx en paramètre de ta fonction delay(dx) ?

@++
flory_
Messages postés
2
Date d'inscription
mercredi 20 décembre 2006
Statut
Membre
Dernière intervention
24 juin 2007
-
salut,

1)D'abord l'utilisation systematique de "pusha" a pour but de sauvgarder le contenu des registres avant de les utiliser et aprés on les restaure par "popa".comme ça lors del'appel d'une fonction de la lib ça risquerai pas de changer les valeurs des registres,éventuellement,utilisés dans le programme avant l'appel.
d'autre part cette lib est conçu pour etre inclu toute entère dans un programme.mais aussi on peut utiliser ses fonctions de façon à copier seulement la partie du code qui nous intéresse dans notre programme principale ,dans ce cas tu pe laisser tomber cette histoire de "pusha" et "popa" et tu peut meme changer les registre utilisés dans la fonction et les substituer par d'autres pour que ça soit plus adapter avec votre programme principale.

2)pour ce qui concerne la "temporisation" la metohde utilisée consiste à se servirs du balayage de l'ecrant qui'est un peut prés le meme sur toutes les machines.le balayage de tout l'écran dure à peut prés de1/60s. comme ça on peut faire une temporisaion de l'ordre de 1/60s en surveillant le retour du spot.si on fait une boucle qui répete n fois cette temporisation on obtient une temporisation de l'orde de n*1/60s.
3) l'utilisation de Dx pour passer du parametre (ds la temporisation)n'est pas obligatoir,c'est juste un question d'adaptation,il se peut que cx soit utiliser dans un boucle...par exp, on peut par exp au lieu de mettre le parametre dans DX on peut passer l'adresse d'une case memoire(qui contiendrais notre fameux n ==>n/60 s) via bx .

@++
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
re,




je suis moyennement convaincu par cet ensemble de fonctions qui sont toutes a améliorer et a optimiser.

@++
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
re,


Pour finir:

1 - Ce n'est pas le programme appelant qui défini les registres utilisés dans ta fonction lib donc que tu copie l'ensemble ou une seule de tes fonction, le probleme reste le meme pour l'utilisation de "pusha" "popa".

2 - Ta fonction delay n'est pas a 60Hz mais est dépendante de la fréquence de ton écran, moi j'ai le choix:60Hz,70Hz,72Hz,75Hz, mais des ecrans peuvent monter beaucoup plus suivant la résolution choisie, ce qui rend ton delay de durée imprévisible et le paramètre passé n'as pas d'unité possible.

3 - "par exp, on peut par exp au lieu de mettre le parametre dans DX on peut passer l'adresse d'une case memoire(qui contiendrais notre fameux n ==>n/60 s) via bx".

Pourquoi utiliser bx qui etait auparavant inutilisé dans cette fonction alors que cx l'est, tu ne reponds pas à la question.
Pourquoi utiliser une case memoire et bx au lieu de passer le paramètre par la pile comme il est habituellement fait pour toutes fonctions ?

tout simplement:

delay: ;temporisation ,paramettre ==>CX
push ax
push dx
push cx
mov dx,03DAh
.1
in al,dx
and al,00001000b
jnz .1
.2
in al,dx
and al,00001000b
jz .2
loop .1
pop cx
pop dx
pop ax
ret

non ?

@++
flory_
Messages postés
2
Date d'inscription
mercredi 20 décembre 2006
Statut
Membre
Dernière intervention
24 juin 2007
-
re;


toute à fait d'accord avec vous à ce qui concerne la fonction delay,mais l'utilsation de 'popa' et 'pusha',est justifié par le souci d'oublier de "depiler" à la fin,...

se servire du balayage de l'écran,avais pour but de réaliser une temporisation plus stable ;sinon qu'est ce que vous proposz comme solution ;

@++