Bibliotheque pour le 8086

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 857 fois - Téléchargée 17 fois

Contenu du snippet

une bibliothèque pour le 8086 ,temporisation,affichage du contenu des registres en différente bases,manipulation des chaines ....,à l'aide des interruptions

Source / Exemple :


segment .data
msg db 'saisir un nombre$';pour la fonction lireaxd

segment .text
delay:       ;temporisation ,paramettre ==>DX

     pusha
     mov      cx,dx
a    mov      dx,03DAh
     IN       al,dx
     and      al,00001000b
     jnz      a
la   in       al,dx
     and      al,00001000b
     jz       la
     loop     a
     popa
   ret

affaxd: ;afficher le contenu de AX en d?cimal
	
pusha
     mov      cx,0
b    mov      dx,0
     mov      bx,10
     div      bx
     push     dx
     inc      cx
     cmp      ax,0
     jne      b

c    pop      ax
     add      al,'0'
     mov      ah,0Eh
     int      10h
     loop     c
popa

ret

affaxh:  ;afficher le contenu de AX en hexad?cimal

pusha

     mov      cx,0
d    mov      dx,0
     mov      bx,16
     div      bx
     push     dx
     inc      cx
     cmp      ax,0
     jne      d

e    pop      ax
     cmp      al,9
     jbe      f
     add      al,7
f    add      al,48
     mov      ah,0Eh
     int      10h
     loop     e
popa
ret

affaxb:  ;afficher le contenu de AX en binaire

pusha
     mov      cx,0
g    mov      dx,0
     mov      bx,2
     div      bx
     push     dx
     inc      cx
     cmp      ax,0
     jne      g

k    pop      ax
     add      al,'0'
     mov      ah,0Eh
     int      10h
     loop     k
popa
ret

affald:   ;afficher le contenu de AL en d?cimal

pusha
     mov      ah,0
     mov      cx,0
l    mov      dx,0
     mov      bx,10
     div      bx
     push     dx
     inc      cx
     cmp      ax,0
     jne      l

m    pop      ax
     add      al,'0'
     mov      ah,0Eh
     int      10h
     loop     m
popa
ret

affalh:    ;afficher le contenu de AL en hexad?cimal

pusha
     mov      ah,0
     mov      cx,0
o    mov      dx,0
     mov      bx,16
     div      bx
     push     dx
     inc      cx
     cmp      ax,0
     jne      o

p    pop      ax
     cmp      al,9
     jbe      r
     add      al,7
r    add      al,48
     mov      ah,0Eh
     int      10h
     loop     p

popa
ret

affalb:    ;afficher le contenu de AL en binaire

pusha
    mov  ah,0
    mov  cx,0
s   mov  dx,0
    mov  bx,2
    div  bx
    push dx
    inc  cx
    cmp  ax,0
    jne  s

t    pop      ax
     add      al,'0'
     mov      ah,0Eh
     int      10h
     loop     t

popa
ret

lireaxd:  ;efficher le message d'invite et saisir un d?cimal en AX

pusha
    mov dx,msg
    mov ah,09h
    int 21h

    mov dl,1
    mov dh,2
    mov bh,0
    mov ah,02h
    int 10h

mov bx,0
debut    mov  ah,07h
         int  21h
         mov  ah,0eh
         int  10h
         cmp  al,13
         jz   fin ;fin
         sub  al,48
         mov  dh,0
         mov  dl,al
         mov  ax,bx
         mov  cl,10
         mul  cl
         mov  bx,ax
         add  bx,dx
         jmp  debut
         
fin      mov  ax,bx   
popa
ret

Conclusion :


assemblés avec NASM

A voir également

Ajouter un commentaire

Commentaires

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
RDTSC introduit depuis le Pentium.

"...justifié par le soucis d'oublier..."
c'est une philo pour usagers des langages interprétés mais qui n'est pas de mise en ASM. Si on ne vise pas les perfs optimales, il faut faire du VB.
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,



suivant le processeur:
1 - hooker l'interuption 8 afin de comptabiliser les impulsions d'horloge. La fonction delay sauvegarde le nombre d'impulsion courant, y ajoute dx et retourne la main une fois que le nombre d'impulsion courant est égal ou dépasse la valeur calculée. L'interruption 8 etant appelée de maniere régulière toutes les 18,2 ms (si mes souvenirs sont bons). Il est également possible de reprogrammer la rtc pour avoir une fréquence différente mais en prennant soin d'appeler l'interruption 8 d'origine toute les 18,2 ms quand meme.

2 - utiliser la commande processeur qui permet d'obtenir le nombre de tics interne mais dont je ne me rappelle plus le nom.


la première solution étant compatible avec tout les PC.

@++
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 ;

@++
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 ?

@++
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.

@++
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.