Exemple d'un programme écrit en langage d'assemblage SPARC
Le programme suivant calcule le périmètre et la surface d'un rectangle à partir des coordonnées de deux points qui représentent les sommets opposés du rectangle
/* Rectangle: Programme qui calcule le perimetre et la surface d'un rectangle
a partir des coordonnees de deux points (X1,Y1) and (X2,Y2).
Auteur: Richard St-Denis, Universite de Sherbrooke, 2013.
*/
.global Rectangle ! point d'entree
.section ".text" ! section de code
Rectangle:
mov 2,%l0 ! deux points a lire
setx points,%l7,%l1
rec00:
setx ptfmt1,%l7,%o0 ! 1er: adresse du message de sollicitation
mov 3,%o1 ! 2e: numero du point = 3 - %l0
sub %o1,%l0,%o1
call printf ! affichage du message de sollicitation pour la coordonnee en X
nop
setx scfmt1,%l7,%o0 ! 1er: adresse de la chaine du format d'entree
mov %l1,%o1 ! 2e: adresse de la coordonnee en X
call scanf ! lecture de la coordonnee en X d'un point
nop
setx ptfmt2,%l7,%o0 ! 1er: adresse du message de sollicitation
mov 3,%o1 ! 2e: numero du point = 3 - %l0
sub %o1,%l0,%o1
call printf ! affichage du message de sollicitation pour la coordonnee en X
nop
setx scfmt1,%l7,%o0 ! 1er: adresse de la chaine du format d'entree
inc 4,%l1
mov %l1,%o1 ! 2e: adresse de la coordonnee en Y
call scanf ! lecture de la coordonnee en Y d'un point
nop
inc 4,%l1
dec %l0
brnz %l0,rec00 ! Un autre point à lire ?
nop
setx points,%l7,%l1
ldsw [%l1],%l2 ! point 1 (X1, ...)
ldsw [%l1+4],%l3 ! point 1 (... ,Y1)
ldsw [%l1+8],%l4 ! point 2 (X2, ...)
ldsw [%l1+12],%l5 ! point 2 (... ,Y2)
sub %l2,%l4,%l6 ! X1 - X2
sub %l3,%l5,%l7 ! Y1 - Y2
brgez %l6,rec05
nop
neg %l6 ! |X1 - X2|
rec05:
brgez %l7,rec10
nop
neg %l7 ! |Y1 - Y2|
rec10:
mulx %l6,%l7,%o2 ! calcul de la surface
add %l6,%l6,%l6 ! calcul du perimetre
add %l7,%l7,%l7
add %l6,%l7,%o1
setx ptfmt3,%l7,%o0 ! 1er: adresse de la chaine du format de sortie
call printf ! affichage des resultats
nop
clr %o0 ! 1er parametre
call exit ! sortie du programme
nop
/* Definitions des donnees */
.section ".bss" ! section des donnees non initialisees
.align 4
points: .skip 4*4 ! X1, Y1, X2, Y2
.section ".rodata" ! section des donnees en lecture seulement
scfmt1: .asciz "%d"
ptfmt1: .asciz "Entrez la coordonnee en X du point %u : "
ptfmt2: .asciz "Entrez la coordonnee en X du point %u : "
ptfmt3: .ascii "Le perimetre est : %u\n"
.asciz "La surface est : %u\n"
Sous Solaris, les commandes suivantes permettent d'assembler, d'effectuer l'édition des liens et d'exécuter le programme.
echo "Assemblage ..."
/usr/ccs/bin/as -xarch=v9 rectangle.as -o rectangle.o
echo "Edition des liens ..."
/usr/ccs/bin/ld -e Rectangle -o rectangle rectangle.o -lc
echo "Execution ..."
rectangle