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.

  1. Que calcule ce programme ? Effectuer les opérations directement en hexadécimal.
  2. 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.