Assembleur Pile
bolo972
Messages postés
87
Statut
Membre
-
sam3000 Messages postés 1226 Statut Membre -
sam3000 Messages postés 1226 Statut Membre -
Bonjour
l' Asembleur me tues , plus je l'etudie moins je comprend lol
Voici mon exo
L'interruption matérielle numéro 1 est déclenchée après chaque instruction du processeur dans le cas ou TF=1. Le bit TF est le bit 8 du registre des indicateurs du 8086.
Que représente TF ?
Le programme suivant permet de mettre à 1 le bit TF
je comprends pas que le programme mets TF a 1
merci a Tous et Bonne année
l' Asembleur me tues , plus je l'etudie moins je comprend lol
Voici mon exo
L'interruption matérielle numéro 1 est déclenchée après chaque instruction du processeur dans le cas ou TF=1. Le bit TF est le bit 8 du registre des indicateurs du 8086.
Que représente TF ?
Le programme suivant permet de mettre à 1 le bit TF
pushf pop ax or ax,100h push ax popf
je comprends pas que le programme mets TF a 1
merci a Tous et Bonne année
A voir également:
- Impossible de créer une nouvelle page de garde pour la pile
- Pile carte mere - Guide
- Impossible de supprimer une page word - Guide
- Créer un lien pour partager des photos - Guide
- Comment créer un groupe whatsapp - Guide
- Darkino nouvelle adresse - Guide
17 réponses
Salut,
Bon la manière dont est programmée le petit prog est un peu barbare, digne d'un compilateur.....
pushf # empile
pop ax # depile dans ax
or ax,100h # fait un ou de la val de ax avec 100h
push ax # reempile
popf # depile
En fait tout est dans le or ax, 100h, je ne connais pas trop l'assembleur mais 100h doit être un masque......il te permet de ne modifier qu'un seul bit dans le registre sans toucher aux 15 autres...ton TF doit être un flag
Voilà bonne année
GrdScarabe
Learn with the best, teach the others
Bon la manière dont est programmée le petit prog est un peu barbare, digne d'un compilateur.....
pushf # empile
pop ax # depile dans ax
or ax,100h # fait un ou de la val de ax avec 100h
push ax # reempile
popf # depile
En fait tout est dans le or ax, 100h, je ne connais pas trop l'assembleur mais 100h doit être un masque......il te permet de ne modifier qu'un seul bit dans le registre sans toucher aux 15 autres...ton TF doit être un flag
Voilà bonne année
GrdScarabe
Learn with the best, teach the others
ici
http://www.commentcamarche.net/asm/pile.php3
on explique comment utiliser les piles
1° compile Push AX
puis on decompile Pop AX
que représente f
pourquoi décompile t il ax ?
merci
http://www.commentcamarche.net/asm/pile.php3
on explique comment utiliser les piles
1° compile Push AX
puis on decompile Pop AX
pushf # empile
que représente f
pop ax # depile dans ax
pourquoi décompile t il ax ?
merci
Salut,
tu devra comprendre la structure des processeurs x86 en premier!
TF: veut dire Trap Flag, c'est la methode qu'un debuggeur utilise pour faire du pas à pas.
PUSHF: sert a mettre le registre F (Flags) sur la pile
si on depile dans AX c'est pour faire (AX reçoi FLAGS)
La sequence que tu as ecrit sert a mettre à un le bit 8 du registre F (qui est le Trap Flag).
si tu execute ce code rien ne se passera, sauf si tu as deja definit l'interruption #1
Normalement un programme utilisateur n'y accede pas (car c'est pas son rôle de faire du pas a pas)
tu devra expliquer pourquoi tu fait cette manipulation et sur quelle plaeforme tu travaille (c'est surement pas Windows :) )
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
tu devra comprendre la structure des processeurs x86 en premier!
TF: veut dire Trap Flag, c'est la methode qu'un debuggeur utilise pour faire du pas à pas.
PUSHF: sert a mettre le registre F (Flags) sur la pile
si on depile dans AX c'est pour faire (AX reçoi FLAGS)
La sequence que tu as ecrit sert a mettre à un le bit 8 du registre F (qui est le Trap Flag).
si tu execute ce code rien ne se passera, sauf si tu as deja definit l'interruption #1
Normalement un programme utilisateur n'y accede pas (car c'est pas son rôle de faire du pas a pas)
tu devra expliquer pourquoi tu fait cette manipulation et sur quelle plaeforme tu travaille (c'est surement pas Windows :) )
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
tu devra comprendre la structure des processeurs x86 en premier!
ce que j'essaye de faire
TF: veut dire Trap Flag, c'est la methode qu'un debuggeur utilise pour faire du pas à pas.
PUSHF: sert a mettre le registre F (Flags) sur la pile
si on depile dans AX c'est pour faire (AX reçoi FLAGS)
La sequence que tu as ecrit sert a mettre à un le bit 8 du registre F (qui est le Trap Flag).
Dc pour l'instant TF est 0
Normalement un programme utilisateur n'y accede pas (car c'est pas son rôle de faire du pas a pas)
tu devra expliquer pourquoi tu fait cette manipulation et sur quelle plaeforme tu travaille (c'est surement pas Windows :) )
c'est l'exo d'un exercice
ce que j'essaye de faire
TF: veut dire Trap Flag, c'est la methode qu'un debuggeur utilise pour faire du pas à pas.
PUSHF: sert a mettre le registre F (Flags) sur la pile
si on depile dans AX c'est pour faire (AX reçoi FLAGS)
La sequence que tu as ecrit sert a mettre à un le bit 8 du registre F (qui est le Trap Flag).
Dc pour l'instant TF est 0
Normalement un programme utilisateur n'y accede pas (car c'est pas son rôle de faire du pas a pas)
tu devra expliquer pourquoi tu fait cette manipulation et sur quelle plaeforme tu travaille (c'est surement pas Windows :) )
c'est l'exo d'un exercice
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui, dans le programme normalement TF=0
on la met à 1 pour activer l'utilisation de l'interruption TRAP (ou plutot Exception #1, dans le jargon x86)
à l'interieur de l'INT#1, TF revient à 0, c'est du gestionnaire de l'INT 1 de remettre TF=1 pour le prochain "PAS" (STEP).
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
on la met à 1 pour activer l'utilisation de l'interruption TRAP (ou plutot Exception #1, dans le jargon x86)
à l'interieur de l'INT#1, TF revient à 0, c'est du gestionnaire de l'INT 1 de remettre TF=1 pour le prochain "PAS" (STEP).
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
l'instruction or est un Ou logique,?
dc on compare as et 100 h ?
100h représente en binaire
100000000
est que bien ca
dc on compare as et 100 h ?
100h représente en binaire
100000000
est que bien ca
non, on ne compare pas!
F=F or 100h
c'est equivalent (binaire) à:
F=F + 100h
quelque soit la valeur de F (16bits) : ffffffffffffffff
elle deviendra : fffffff1ffffffff
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
F=F or 100h
c'est equivalent (binaire) à:
F=F + 100h
quelque soit la valeur de F (16bits) : ffffffffffffffff
elle deviendra : fffffff1ffffffff
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
à mon avis, le but de l'exercice, c'est de montrer l'interêt de l'INT#1, et la manipulation du registre FLAGS
Or, il n'y a pas d'instructions arithmetiques/binaires en assembleur qui manipulent ce registre, donc il faut passer par l'accumulateur 16 bits : AX
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
Or, il n'y a pas d'instructions arithmetiques/binaires en assembleur qui manipulent ce registre, donc il faut passer par l'accumulateur 16 bits : AX
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
pour mettre TF à zero, il faut:
and ax,0FEFFh
-> tous les bits inchangés à 1 sauf celui que nous voulons modifier: le contraire de OR.
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
and ax,0FEFFh
-> tous les bits inchangés à 1 sauf celui que nous voulons modifier: le contraire de OR.
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
dans la deuxième question on me demande ca
2. Ecrire un programme ayant deux taches :
- Tache principale : mettre TF=1 , mettre cl=1 ch=2 dl=3 dh=4, mettre TF=0
- Tache d'interruption numéro 1 : Afficher CL, CH ,DL et DH en utilisant le sous-programme d'affichage en binaire. Entre chaque valeur afficher un espace code ascii 2016 en utilisant un sous-programme nommé espace. A la fin de l'affichage de cl ch dl dh faire un retour à la ligne en utilisant un sous-programme nommé ligne. Les deux codes ascii à afficher pour passer à la ligne suivante sont A16 (line feed) et D16. (carriage return)
pour la première partie j'ai fai ca
j'avoue que la dexième partie je ne comprends pas trop :(
ps: cet exercice n'est pas un exercice a remettre , un exercice dc j'ai la correction. Cependant je ne comprends pas dc je tente de le refaire en comprenais tt les points
2. Ecrire un programme ayant deux taches :
- Tache principale : mettre TF=1 , mettre cl=1 ch=2 dl=3 dh=4, mettre TF=0
- Tache d'interruption numéro 1 : Afficher CL, CH ,DL et DH en utilisant le sous-programme d'affichage en binaire. Entre chaque valeur afficher un espace code ascii 2016 en utilisant un sous-programme nommé espace. A la fin de l'affichage de cl ch dl dh faire un retour à la ligne en utilisant un sous-programme nommé ligne. Les deux codes ascii à afficher pour passer à la ligne suivante sont A16 (line feed) et D16. (carriage return)
pour la première partie j'ai fai ca
PUSHF POP ax or as,100h push ax pop f mov cl,1 mov ch,2 mov dl,3 mov dh,4
j'avoue que la dexième partie je ne comprends pas trop :(
ps: cet exercice n'est pas un exercice a remettre , un exercice dc j'ai la correction. Cependant je ne comprends pas dc je tente de le refaire en comprenais tt les points
je pose une derniere question aujourd'hui et on continue la discussion demain si tu veut bien.
sur quelle plateforme tu travaille? PC ou maquette à base d'un 8086?
sur quel systeme d'exploitation? (ex: DOS, Windows...)
avec quel assembleur tu programme ou interface de programmation? (ex: MASM, TASM...)
à demain.
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
sur quelle plateforme tu travaille? PC ou maquette à base d'un 8086?
sur quel systeme d'exploitation? (ex: DOS, Windows...)
avec quel assembleur tu programme ou interface de programmation? (ex: MASM, TASM...)
à demain.
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.
Tache d'interruption numéro 1 : Afficher CL, CH ,DL et DH en utilisant le sous-programme d'affichage en binaire. Entre chaque valeur afficher un espace code ascii 2016 en utilisant un sous-programme nommé espace. A la fin de l'affichage de cl ch dl dh faire un retour à la ligne en utilisant un sous-programme nommé ligne. Les deux codes ascii à afficher pour passer à la ligne suivante sont A16 (line feed) et D16. (carriage return)
je comprends vraiment pas ce qu'il faut faire
je comprends vraiment pas ce qu'il faut faire
je vais faire les suppositions suivantes:
1. nous avons des sous-programmes :
a. afficher un nombre dans AL en binaire : binaire
b. afficher un espace : espace
c. afficher une ligne : ligne
2. nous definissons notre sous-programme d'interruption: inter1
si t'as un exemple dans le cours qui ressemble à ce que tu demande, ou donne la maniere de definir une interruption sur ton compilateur, il faudrai que je le vois!
@+
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique
1. nous avons des sous-programmes :
a. afficher un nombre dans AL en binaire : binaire
b. afficher un espace : espace
c. afficher une ligne : ligne
2. nous definissons notre sous-programme d'interruption: inter1
inter1 proc push ax mov al, cl call binaire call espace mov al, ch call binaire call espace mov al, dl call binaire call espace mov al, dh call binaire call espace call ligne pushf pop ax or ax, 100h push ax popf iret inter1 end
si t'as un exemple dans le cours qui ressemble à ce que tu demande, ou donne la maniere de definir une interruption sur ton compilateur, il faudrai que je le vois!
@+
L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique
la correction c ca
.model small .stack 100h .code mov ah,35h mov al,1 int 21h push bx; sauvegarde du vecteur dans la pile push es mov ax,seg spit1 mov ds,ax mov dx,offset spit1 mov ax,2501h int 21h pushf ; Mise à 1 de TF pop ax or ax,0100h push ax popf mov ch,1 ; Programme à débugger mov cl,2 mov dh,3 mov dl,4 pushf ; Mise à 0 de TF pop ax and ax,0EFFh push ax popf pop ds ; reprise de l'ancien vecteur dans le pile pop dx mov ax,2501h int 21h mov ah,4ch int 21h ; Procédure d'affichage en binaire proc AffBin push ax push bx push cx push dx mov cl,8 ABboucle: mov dl,'0' shl bl,1 Jnc ABzero mov dl,'1' ABzero: mov ah,02 int 21h sub cl,1 Ja ABboucle pop dx pop cx pop bx pop ax ret endp spit1 proc ; Sous programme d'interruption push bx mov bl,cl call AffBin call espace mov bl,ch call AffBin call espace mov bl,dl call AffBin call espace mov bl,dh call AffBin call ligne pop bx iret endp ligne proc push ax push dx mov ah,2 mov dl,0Ah int 21h mov dl,0Dh int 21h pop dx pop ax ret endp espace proc push ax push dx mov ah,2 mov dl,20h int 21h pop dx pop ax ret endp end