Travaux dirigés d`architecture des ordinateurs

publicité
Travaux dirigés d’architecture des ordinateurs TD5 : programmation assembleur 1. Références •
Une instruction = 1 mot mémoire de 32 bits o calcul op = add, addcc, sub, subcc, umulcc, and, andcc, or, orcc, xor, xorcc, sll, slr o accès mémoire op = ld, st o branchements conditionnels cond = ba, be (=bz), bne (=bnz), bcs, bcc, bpos, bneg, bvs, bvc, bg, ble, bge, bl, bgu, bleu o sethi •
instructions synthétiques = facilités d’écriture Instruction clr %ri
mov %ri,%rj
Effet implémentation met à zéro %ri orcc %r0, %r0, %ri
copie %ri dans %rj orcc %ri, %r0, %rj
inccc %ri
incrémente %ri addcc %ri, 1, %ri
deccc %ri
décrémente %ri subcc %ri, 1, %ri
set val31..0, %ri
copie val dans %ri sethi val31..8, %ri
orcc %ri, val7..0,
%ri
setq val12..0, %ri
cmp %ri, %rj
tst %ri
copie val dans %ri compare %ri et %rj teste nullité et signe de orcc %r0, val12..0,
%ri
subcc %ri, %rj, %r0
orcc %ri, %r0, %r0
%ri negcc %ri
Calcule opposé de %ri nop
no operation Appel de sous-­‐
programme terminal call <label>
rcall <label>
Appel de sous-­‐
programme avec sauvegarde de l’adresse de retour ba <label>
push %r28
call <label>
pop %r28
push %ri
empile %ri sub %r29, 1, %r29
st %ri, [%r29]
pop %ri
dépile %ri ld [%r29], %ri
add %r29, 1, %r29
Adresses d’entrées-­‐sorties : 0xB000 0000 = leds (écriture) 2. Instructions arithmétiques Coder en une ou plusieurs instructions : r1 ß r1 + r2 r2 ß r3 r9 ß -­‐123 r1 ß -­‐r1 r1 ß 0 r1 ß 1234567 Dire si l’instruction est valide ou non : •
•
•
•
•
•
•
•
•
•
or %r0, %r30, %r28
add %r28, 1, %r30
0x9000 0000 = switches (lecture) •
•
•
•
•
•
sethi 0,%r0
retour de sous-­‐
programme ret
•
subcc %r0, %ri, %ri
add %r1, %r2, %r3 div %r1, %r2, %r3 subcc %r1, 5000, %r2 xor %r9, %r33, %r8 st 10, [%r1+%r2] andcc %r1, sw[0], %r0 cmp %r1, %r2 cmp 10, %r1 cmp %r1, 10000 cmp %r1, -­‐1 3. Instructions d’accès mémoire Coder en une ou plusieurs instructions : •
•
•
•
•
•
•
•
•
mem[100] = 1000 r1 = mem[100] mem[100] = 0x1234 mem[100] = mem[101] r1 ß 0,0,0,…,sw[7],…,sw[0] r1 ß 1,1,1,…,sw[7],…,sw[0] Z ß(sw[3] == 1) ld[7..0] ß 0b10101010 ld[7..0] ß sw[7..0] Dire si l’instruction est valide ou non : •
•
•
•
st 10, [%r1+%r2] ld 100, %r1 ld [100], %r1 ld [5000], %r1 4. Divers •
•
r1 ß !"
!!! 𝑚𝑒𝑚[100 + 𝑖] mem[100+i] = i2 pour i = 0..10 5. Sous-­‐programmes terminaux •
•
Sous-­‐programme de calcul du cube de %r2, résultat dans %r3 mem[100+i] = i3 pour i = 0..10 par appel du sous-­‐programme 
Téléchargement