Motorola 68000, aide sur un programme - ASM - Programmation
Marsh Posté le 18-03-2003 à 19:49:29
Code :
|
le "8" est en octets, et signifie que l'on recopie la valeur qui est pointée 8 octets avant par la pile. Il faut faire attention au fait que : quand on rajoute qlq chose dans la pile, on la decremente. Donc quand on veut recupérer qlq chose mis avant dedans, il faut incrementer. c'est une autre façon de penser ... quand on parle du fond de pile, il s'agit de l'adresse maximale de la pile. En fait on remplit la pile par le "haut".
les 2 MOVE permettent de recuperer les parametres passés (@ de stockage et valeur du flottant) au sous programme.
Marsh Posté le 22-02-2003 à 18:31:34
ORG $0
DC.L $1E00
DC.L START
ORG $0800
N1 DC.L $40200000
N2 DC.L $C0200000
N3 DS.L 1
START MOVE.L (N1),-(A7) On place la valeur de N1 sur la pile
PEA N3 On place l'adresse de N3 sur la pile
BSR ABS
ADD.L #8,A7 On restitue la valeur de la pile
MOVE.L (N2),-(A7) On place la valeur de N2 sur la pile
PEA N3 On place l'adresse de N3 sur la pile
BSR ABS
ADD.L #8,A7 On restitue la valeur de la pile
BREAK Fin du programme principal
ABS MOVE.L 4(A7),A0 On récupère l'adresse où stocker le résultat
MOVE.L 8(A7),D0 On récupère la valeur du flottant
BCLR #31,D0 On met le bit S du flottant à 0
MOVE.L D0,(A0) On stocke le flottant
RTS Fin du sous programme
Le but de ce programme est de retourner la valeur absolue d'un nombre. Les parties en gras, je ne comprends pas
en fait c surtout que je n'arrive pas a voir ou se situe le pointeur de pile A7 après les instruction en gras !
Chaque donnée de la pile st sur 16 bits. faire (A7)+ incremente-t-il l'adresse pointée par A7 de 2 octets ? 8(A7), je sais que c l'addition pour un déplacement (adressage indirect) de A7+8 , mais 8 koi ?? (octet ou bit)...que je considère que ce soit des déplacements en octets ou en bit, je n'arrive pas a suivre le pointeur de pile (= A7).