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