Programmation en assembleur

publicité
ASR1 2016
Florent de Dinechin, Nicolas Louvet, Antoine Plet
TP 4
Programmation en assembleur
Vous devez avant tout lire le document qui décrit l’ISA de notre processeur.
1 Lisons un peu d’assembleur
Que font les programmes suivants ?
prog1:
letl
letl
add
lsl
add
r0 42
r10 17
r0 r0 r10
r3 r0 2
r3 r3 r0
prog2:
letl
rmem
letl
rmem
add
letl
wmem
r0
r0
r1
r1
r1
r0
r1
32
[r0]
33
[r1]
r1 r0
34
[r0]
; video memory ranges from 0x6000 to 0xffff
prog3:
letl r1 0
letl r0 6
lsl r0 r0 12
loop:
wmem r1 [r0]
add r0 r0 1
snif r0 eq 0
jump loop
return
2 Assemblons et désassemblons
2.1 Assemblage
Pour chacun de nos programmes d’échauffement, écrivez à droite de chaque instruction son code
hexadécimal. N’hésitez pas à commencer par l’écrire en binaire.
(Ce travail stupide et dégradant s’appelle l’assemblage (assembly), et vous avez déjà envie d’écrire un
programme qui le fait pour vous. Un tel programme s’appelle un assembleur.)
2.2 Désassemblage
Quel est le programme qui a pour codes hexadécimaux BAAD C0DE, B0B0 8BAD F00D, DEAD BEEF,
B0B0 DEAD ? (merci wikipedia HexSpeak).
(Ce travail rébarbatif et vexatoire s’appelle le désassemblage (disassembly), et le programme correspondant s’appelle un désassembleur – c’est le -d de objdump -d.)
3 Écrivons un peu d’assembleur
3.1) Ecrivez une routine (qui sera appelée par call et terminera par return) qui multiplie les contenus
de r0 et r1 et renvoie le résultat dans r2.
3.2) Ecrivez le produit scalaire de deux vecteurs d’entiers de taille r0, pointés respectivement par r1 et
r2, en appelant votre multiplication.
3.3) Ecrivez une routine qui convertit une chaine de caractères composés des chiffres 0 à 9 en l’entier
correspondant. On supposera la chaîne pointée par r0 et terminée par un espace.
3.4) Ecrivez une routine qui divise rO par r1, renvoie le quotient dans r2 et le reste dans r3. On commencera par poser en binaire la division de 25 par 5 pour se convaincre que c’est plus facile qu’en
décimal.
3.5) Ecrivez Pokemon Go 2, vite avant que Nintendo le fasse.
4 Et dans les 10mn qui restent
Identifiez-vous des instructions qui manquent à ce processeur, et des manières raisonnables de les
encoder ?
Téléchargement