En lisant différents topics, j'ai trouvé plein de petits trucs. mais je chercherai une synthèse de tout ça




add.w d1,d1 move.w d1,d0 asl.w #4,d1 sub.w d0,d1
d1+= d1; d0= d1; d1*= 16; d1-= d0;
t'as voulu un code optimisé !
donc toutes celles qui impliquent des registres an)
Voici la mienne :
SHIZUKA a le plaisir de vous présenter cette table des cycles du 68000
réalisée en deux portions de soirées avec les aides appréciables de:
craft2 ( stedi )
disque dur ( ouaaaah la vitesse )
"guide des instructions du 68000 , vol 2 de NACHTMANN chez PUBLITRONIC "
merci de diffuser cette table sans modifier l'en tête
calcul de l'adresse effective
b/w l
dn 0 0
an 0 0
(an) 4 8
(an)+ 4 8
-(an) 6 10
d16(an) 8 12
d8(an,xi) 10 14
abs.w 8 12
abs.l 12 16
d16(pc) 8 12
d8(pc,x1) 10 14
imm 4 8
move.b et move.w
dn an (an) (an)+ -(an) d16(an) d8(an,xi) abs.w abs.l
dn 4 4 8 8 8 12 14 12 16
an 4 4 8 8 8 12 14 12 16
(an) 8 8 12 12 12 16 18 16 20
(an)+ 8 8 12 12 12 16 18 16 20
-(an) 10 10 14 14 14 18 20 18 22
d16(an) 12 12 16 16 16 20 22 20 24
d8(an,xi) 14 14 18 18 18 22 24 22 26
abs.w 12 12 16 16 16 20 22 20 24
abs.l 16 16 20 20 20 24 26 24 28
d16(pc) 12 12 16 16 16 20 22 20 24
d8(pc,x1) 14 14 18 18 18 22 24 22 26
imm 8 8 12 12 12 16 18 16 20
move.l
dn an (an) (an)+ -(an) d16(an) d8(an,xi) abs.w abs.l
dn 4 4 12 12 12 16 18 16 20
an 4 4 12 12 12 16 18 16 20
(an) 12 12 20 20 20 24 26 24 28
(an)+ 12 12 20 20 20 24 26 24 28
-(an) 14 14 22 22 22 26 28 26 30
d16(an) 16 16 24 24 24 28 30 28 32
d8(an,xi) 18 18 26 26 26 30 32 30 34
abs.w 16 16 24 24 24 28 30 28 32
abs.l 20 20 28 28 28 32 34 32 36
d16(pc) 16 16 24 24 24 28 30 28 32
d8(pc,x1) 18 18 26 26 26 30 32 30 34
imm 12 12 20 20 20 24 26 24 28
op(ea),an op(ea),dn op dn,(m)
add.b - 4+ 8+
add.w 8+ 4+ 8+
add.l 6+& 6+& 12+
and.b - 4+ 8+
and.w - 4+ 8+
and.l - 6+& 12+
cmp.b - 4+ -
cmp.w 6+ 4+ -
cmp.l 6+ 6+ -
divs - 158+* -
divu - 140+* -
eor.b - 4+ 8+
eor.w - 4+ 8+
eor.l - 8+ 12+
muls - 70+* -
mulu - 70+* -
or.b - 4+ 8+
or.w - 4+ 8+
or.l - 6+& 12+
sub.b - 4+ 8+
sub.w 8+ 4+ 8+
sub.l 6+& 6+& 12+
+ = rajouter le temps de calcul de l'adresse effective
& = raouter 2 périodes d horloge pour les modes an dn et immédiat
* = durée max
op #,dn op #,an op #,m
addi.b 8 - 12+
addi.w 8 - 12+
addi.l 16 - 20+
addq.b 4 - 8+
addq.w 4 8 8+
addq.l 8 8 12+
andi.b 8 - 12+
andi.w 8 - 12+
andi.l 16 - 20+
cmpi.b 8 - 8+
cmpi.w 8 - 8+
cmpi.l 14 - 12+
eori.b 8 - 12+
eori.w 8 - 12+
eori.l 16 - 20+
moveq 4 - -
ori.b 8 - 12+
ori.w 8 - 12+
ori.l 16 - 20+
subi.b 8 - 12+
subi.w 8 - 12+
subi.l 16 - 20+
subq.b 4 - 8+
subq.w 4 8 8+
subq.l 8 8 12+
+ = rajouter le temps de calcul de l'adresse effective
registre mémoire
clr.b 4 8+
clr.w 4 8+
clr.l 6 12+
nbcd 6 8+
neg.b 4 8+
neg.w 4 8+
neg.l 6 12+
negx.b 4 8+
negx.w 4 8+
negx.l 6 12+
not.b 4 8+
not.w 4 8+
not.l 6 12+
scc ( cc=0 ) 4 8+
scc ( cc=1 ) 6 8+
tas 4 10+
tst.b 4 4+
tst.w 4 4+
tst.l 4 4+
+ = rajouter le temps de calcul de l'adresse effective
registres memoire
asr.b & asl.b 6+2n
asr.w & asl.w 6+2n 8+
asr.l & asl.l 8+2n
lsr.b & lsl.b 6+2n
lsr.w & lsl.w 6+2n 8+
lsr.l & lsl.l 8+2n
ror.b & rol.b 6+2n
ror.w & rol.w 6+2n 8+
ror.l & rol.l 8+2n
roxr.b & roxl.b 6+2n
roxr.w & roxl.w 6+2n 8+
roxr.l & roxl.l 8+2n
+ = rajouter le temps de calcul de l'adresse effective
n est le nombre de rotations ou de décalages successifs
dynamique dynamique statique statique
registre mmemoire registre memoire
bchg.b - 8+ - 12+
bchg.l 8* - 12* -
bclr.b - 8+ - 12+
bclr.l 10* - 14* -
bset.b - 8+ - 12+
bset.l 8* - 12* -
btst.b - 4+ - 8+
btst.l 6 - 10 -
+ = rajouter le temps de calcul de l'adresse effective
* = durée max
branchement pas de
effectué branchement
bcc.s 10 8
bcc.l 10 12
bra.s 10 -
bra.l 10 -
bsr.s 18 -
bsr.l 18 -
dbcc cc=1 - 12
dbcc cc=0 10 14
(an) (an)+ -(an) 16(an) d8(an,xi) abs.w abs.l d16(pc) d8(pc,xi)
jmp 8 - - 10 14 10 12 10 14
jsr 16 - - 18 22 18 20 18 22
lea 4 - - 8 12 8 12 8 12
pea 12 - - 16 20 16 20 16 20
movem.w 12+4n 12+4n - 16+4n 18+4n 16+4n 20+4n 16+4n 18+4n
(m->r)
movem.l 12+8n 12+8n - 16+8n 18+8n 16+8n 20+8n 16+8n 18+8n
(m->r)
movem.w 8+4n - 8+4n 12+4n 14+4n 12+4n 16+4n - -
(r->m)
movem.l 8+8n - 8+8n 12+8n 14+8n 12+8n 16+8n - -
(r->m)
n est le nombre de transferts de registra à effectuer
op dn,dn op m,m
addx.b 4 18
addx.w 4 18
addx.l 8 30
cmpm.b - 12
cmpm.w - 12
cmpm.l - 20
subx.b 4 18
subx.w 4 18
subx.l 8 30
abcd 6 18
sbcd 6 18
68000 68000
r->m m->r
movep.w 16 16
movep.l 24 24
68000 68000
registre mémoire
andi to ccr 20 -
andi to sr 20 -
chk ( sans trap ) 10 -
eori to ccr 20 -
eori to sr 20 -
exg 6 -
ext 4 -
link 16 -
move to ccr 12 12&
move to sr 12 12&
move from sr 6 8&
move usp 4 -
nop 4 -
ori to ccr 20 -
ori to sr 20 -
reset 132 -
rte 20 -
rtr 20 -
rts 16 -
stop 4 -
swap 4 -
trapv ( sans trap ) 4 -
unlk 12 -
& = rajouter le temps de calcul de l'adresse effective
68000
erreur adresse 50
erreur de bus 50
instruction chk 44+*
instruction illegal 34
interruption 44#
violation de privilège 34
trace 34
trap 38
trapvs 34
+ rajouter l temps de calcul de l'adresse effective
* durée max
# 4 périodes d'horloge incluses pour le cycle d'interruption

c'est ton tuto ASM qui n'est pas génial alors.

)
guigui17 a écrit :
Est ce que quelqu'un pourrai me donner les temps d'éxecutions des intructions suivantes:
adda
suba
movea
cmpa
Car dans la doc que j'ai, il n'y a rien (à croire que celui qu'il l'a fait en voulait aux instructions finissant par 'a'donc toutes celles qui impliquent des registres an)

guigui17 a écrit :
boomerang> A propos de dynamique et statique:
dynamique registre -> Dn,Dn
dynamique mémoire -> Dn,mem
statique registre -> #n,Dn
statique mémoire -> #n,mem
Je crois que c ça car statique: qui ne peut être changé
dynamique: peut être changé (donc un registre en source)
J'ai vu juste????
, alors que addi est une instruction différente (qui permet de faire addi.w #x,<ea>, alors que add n'accepte que add rn,<ea> et add <ea>,rn)

... C'ets pas parce que les compilo comprennent que c'est la même chose... D'accord, la base add est la même - 1101 - mais la suite est différente. c'ets obligatoirement 011 ou 111, ce qui ne se trouve pas dans la liste usuelle...