Rechercher : dans
Par :

Assembleur Pile

Dernière réponse le 6 jan 2005 à 21:25:59 bolo972, le 3 jan 2005 à 18:03:33 
 Signaler ce message aux modérateurs

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

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

Meilleures réponses pour « Assembleur Pile » dans :
Pile en assembleur Voir Utilité d'une pile Une pile est une zone de mémoire dans laquelle on peut stocker temporairement des registres. Il s'agit d'un moyen d'accéder à des données en les empilant, telle une pile de livres, puis en les dépilant pour les utiliser. Ainsi il...
Mise à jour des pilotes de la carte graphique VoirMise à jour des pilotes graphiques Quelle carte Graphique je possède ? Sous Windows Xp Sous Windows Vista Mise à jour Mise à jour des pilotes graphiques Pour mettre à jour les pilotes de la carte graphique, il vous faut connaître la...
[Carte-mère] Changer la pile de la carte mère VoirSommaire Symptômes Fréquence de changement: 1 . Noter les données du Bios 2. Localiser la pile du BIOS 3. Ôter la pile usagée 4 - Installer la nouvelle pile 5. Vérifier les données du Bios et régler l'horloge Pour en savoir...
[Windows] Pilote endommagé ou absent (Code 39) VoirLors de l'installation ou de la réinstallation des pilotes (drivers) d'un périphérique, il se peut que Windows affiche le message d'erreur suivant :Windows ne peut pas charger le pilote de périphérique de ce matériel. Ce pilote est peut-être...
Télécharger Pilote SoundMAX Integrated Digital Audio Driver VoirLe pilote SoundMAX Integrated Digital Audio Driver ( ADI ) est un driver conçu pour les cartes mères ayant une carte son à base de puce audio SoundMax. Le driver est entièrement gratuit. Le site officiel ne fournit plus le driver en question...
Pilote (Driver) VoirQu'est-ce qu'un driver? Un ordinateur est constitué d'un assemblage de périphériques. Pour pouvoir contrôler chacun de ses périphériques, le système d'exploitation a besoin d'une interface logicielle entre lui et le matériel, on appelle driver...
Introduction à l'assembleur VoirLes prérequis nécessaires Le langage assembleur est très proche du langage machine (c'est-à-dire le langage qu'utilise l'ordinateur : des informations en binaire, soit des 0 et des 1). Il dépend donc fortement du type de processeur. Ainsi il...
Assembler un PC VoirDe l'assemblage d'un ordinateur Un ordinateur de type PC est modulaire, c'est-à-dire qu'il peut être monté en assemblant des éléments matériels de différents constructeurs, afin d'obtenir un ordinateur conforme à ses besoins. Les éléments...

2

grdscarabee, le 3 jan 2005 à 23:11:52

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

Répondre à grdscarabee

3

bolo972, le 4 jan 2005 à 14:22:16

Ici
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

Répondre à bolo972

4

sam3000, le 4 jan 2005 à 15:17:06

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.

Répondre à sam3000

5

bolo972, le 4 jan 2005 à 15:24:12

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

Répondre à bolo972

6

sam3000, le 4 jan 2005 à 15:39:51

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.

Répondre à sam3000

7

bolo972, le 4 jan 2005 à 16:58:38

L'instruction or est un Ou logique,?
dc on compare as et 100 h ?
100h représente en binaire
100000000
est que bien ca

Répondre à bolo972

8

sam3000, le 4 jan 2005 à 17:16:23

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.

Répondre à sam3000

bolo972, le 4 jan 2005 à 17:21:07

OR - Inclusive Logical OR
Syntaxe : OR Destination, Source
Destination et source sont combines bit a bit par l'operateur logique OU : Tout bit de destination est mis a 1 si le bit de source correspondant est a 1, sinon, il reste inchange.


F = F ok
F = 15 = 1111

c bien ca

Répondre à bolo972

10

sam3000, le 4 jan 2005 à 17:26:04

Oui, l'operation s'effectue bit à bit,
Or, nous avons un seul bit à 1 dans 100h (bit n°8, en comptant du 0)
donc c'est ce bit qui est à mettre à 1, les autres on ne change pas.
Sachant que: TF=bit_8 du FLAGS

L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000

9

sam3000, le 4 jan 2005 à 17:18:46

à 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.

Répondre à sam3000

11

bolo972, le 4 jan 2005 à 18:27:40

Si je veux mettre TF a 0 , j'utilise l'instruction AND

and ax, 0h ,?

Répondre à bolo972

12

sam3000, le 4 jan 2005 à 18:42:20

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.

Répondre à sam3000

13

bolo972, le 4 jan 2005 à 18:44:06

En fait TF c'est le bit numéro 8
dc on ne modifie que celui ci avec
and ax,0FEFFh

Répondre à bolo972

14

bolo972, le 4 jan 2005 à 18:56:55

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

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

Répondre à bolo972

15

sam3000, le 4 jan 2005 à 19:04:04

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.

Répondre à sam3000

16

bolo972, le 4 jan 2005 à 19:07:22

Oui moi meme je commence a etre fatiguée par l'assembleur ;)

je travaille sous PC / windows /8086

j'utilise Scite comme compilateur

a demain

Répondre à bolo972

17

bolo972, le 5 jan 2005 à 16:00:45

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

Répondre à bolo972

18

sam3000, le 5 jan 2005 à 20:08:46

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

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

Répondre à sam3000

19

bolo972, le 6 jan 2005 à 14:38:37

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 

Répondre à bolo972

20

 sam3000, le 6 jan 2005 à 21:25:59

Selon ce programme tu travaille sous DOS avec l'assembleur de borland TASM.
et il y a des commentaires! quelle partie te pose probleme?

L'erreur est humaine mais un véritable désastre
ne peut être qu'informatique.

Répondre à sam3000
Collection CommentÇaMarche.net