begin process at 2012 05 24 02:05:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

c et asm

 > BIBLIOTHEQUE POUR LE 8086

BIBLIOTHEQUE POUR LE 8086


 Information sur la source

 Description

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

Source

  • 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
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


 Sources de la même categorie

INTERFACE C ET ASM par parki
Source avec Zip Source avec une capture FONCTION INTTOBIN par Ken21
Source avec Zip MOT PALINDROME par Tinsalhi
EXECUTE /USR/BIN/ID par 0x0syscall
.:| CONVERSION D'UNE CHAINE EN MAJUSCULE |:. par fenkouch

 Sources en rapport avec celle ci

Source avec Zip LES INTERRUPTIONS SANS LES INT par wqaxs36
Source avec Zip BOOTLOADER & KERNEL EN ASM 64 BITS par wqaxs36
Source avec Zip AFFICHAGE PIXEL EN ASM X86\VESA SOUS XP par wqaxs36
Source avec Zip Source avec une capture BASE DE REGISTRE ET TRANSFERE DE BMP DANS SYSTEM32 par vincent2795
LECTURE ET ECRITURE D'UN CARACTERE ET D'UNE CHAINE DE CARACT... par yasmus

Commentaires et avis

Commentaire de patatalo le 21/06/2007 06:35:18 administrateur CS

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) ?

@++

Commentaire de flory_ le 21/06/2007 17:06:10

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 .

@++

Commentaire de patatalo le 23/06/2007 20:56:16 administrateur CS

re,




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

@++

Commentaire de patatalo le 24/06/2007 12:28:41 administrateur CS

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 ?

@++

Commentaire de flory_ le 24/06/2007 14:14:32

      
    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 ;

@++

Commentaire de patatalo le 24/06/2007 21:25:25 administrateur CS

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.

@++

Commentaire de BruNews le 25/06/2007 09:57:42 administrateur CS

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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

interruption clavier nasm [ par escobales ] Bonjour,Je n'arrive pas à appeler l'interrruption clavier avec nasmj'ai ecrit un programme en C mais j'ai besoin d'utiliser le clavier pendant que le Afficher le contenu d'un registre [ par Anakinele ] Bonjour !Grand débutant en ASM je cherche 'simplement' (rien ne semble simple en asm !) à afficher dans la console le contenu d'un registre choisi au 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 modification d'interruption au boot [ par Yoha ] Bonjour, je me suis remis à l'assembleur (sous debug pour éviter les compilations) et j'ai modifié l'interruption 80h. Cela fonctionne très bien sous microcontroleur [ par sam20 ] Salut a tous.Je voudrai faire une videotech.A partir d'un circuit imprimé,disque dur ,microcontroleur.  lire des video,jpg et mp3 sur ma tv.J'ai trouv interruption clavier avec assembleur sous 8086 [ par analem ] bonjour, j'ai besoin d'un exemple ou d'1 prototype d'1 programme assembleur qui détourne l'interruption 09h (l'utilisateur ne verra pas ce qu'il tape) Quel est l'assembleur le plus rapide ? [ par epineurien ] Salut à tous !Une nouvelle question , suite à quelques infos trouvées sur le net ...J'utilise MASM32 , mais de nombreux sites dises qu'il produit un c Temporisation avec 16F84 [ par Christian_69 ] Bonjour à tous,   <p class="MsoNormal" style="MARG interruption clavier [ par aboulkhir ] salut,je veux programmer en assembleur les interruptions du clavier 16h pouvez vous m'aidermerci 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales