Calculs polonais
irmovl $0x500, %esp
irmovl $0x100, %eax
pushl %eax
irmovl $0xff, %eax
pushl %eax
irmovl $0x4d, %eax
pushl %eax
call calcul
irmovl $0x5a, %eax
pushl %eax
irmovl $0x2b, %eax
pushl %eax
call calcul
call calcul
call calcul
halt
calcul: popl %eax # y
popl %ebx # x
subl %eax, %ebx # x - y
pushl %ebx
ret
Voici ci-contre un programme qui calcule la valeur d'une expression
en appliquant la méthode polonaise :
on empile les arguments du calcul,
et lorsqu'une opération est possible sur les deux éléments
x et y
en haut de pile on les dépile,
on effectue l'opération, et on empile le résultat.
- Que calcule ce programme ? Effectuer les opérations
directement en hexadécimal.
- En fait le sous-programme calcul
est gravement défectueux
(une exécution du code ci-contre
avec le simulateur ne se passe pas du tout comme prévu
et le comportement du simulateur est très déroutant) :
pourquoi ? Proposer une correction
sans utiliser de registre supplémentaire.