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+
Effet+
implémentation+
clr %ri
met$à$zéro$%ri$
orcc %r0, %r0, %ri
mov %ri,%rj
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
copie$val$dans$%ri$
orcc %r0, val12..0,
%ri
cmp %ri, %rj
compare$%ri$et$%rj$
subcc %ri, %rj, %r0
tst %ri
teste$nullité$et$signe$de$
orcc %ri, %r0, %r0
%ri$
negcc %ri
Calcule$opposé$de$%ri$
subcc %r0, %ri, %ri
nop
no$operation$
sethi 0,%r0
call <label>
Appel$de$sousI
programme$terminal$
or %r0, %r30, %r28
ba <label>
rcall <label>
Appel$de$sousI
programme$avec$
sauvegarde$de$l’adresse$de$
retour$
push %r28
call <label>
pop %r28
ret
retour$de$sousI
programme$
add %r28, 1, %r30
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éesIsorties$:$
0x9000$0000$=$switches$(lecture)$
0xB000$0000$=$leds$(écriture)$
2. Instructions+arithmétiques+
Coder$en$une$ou$plusieurs$instructions$:$
r1$!$r1$+$r2$
r2$!$r3$
r9$!$I123$
r1$!$Ir1$
r1$!$0$
r1$!$1234567$
Dire$si$l’instruction$est$valide$ou$non$:$
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,$I1$
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+
SousIprogramme$de$calcul$du$cube$de$%r2,$résultat$dans$%r3$
mem[100+i]$=$i3$pour$i$=$0..10$par$appel$du$sousIprogramme$
$
1 / 3 100%