Απόδοση εντολών με στοίβα
- Σε αρχιτεκτονικές που βασίζονται σε στοίβα οι εντολές επιδρούν στα
περιεχόμενα της στοίβας.
- Εντολές δύο διευθύνσεων διαβάζουν και αφαιρούν τα δύο στοιχεία από την
κορυφή της στοίβας και γράφουν πίσω το αποτέλεσμα.
- Εντολές μιας διεύθυνσης διαβάζουν και αφαιρούν το στοιχείο από την
κορυφή της στοίβας και γράφουν πίσω το αποτέλεσμα.
- Επίσης είναι δυνατό οι εντολές να περιέχουν ενσωματωμένα έναν αριθμό
που να ορίζει την απόσταση του στοιχείου από την κορυφή της στοίβας.
- Οι εντολές κινητής υποδιαστολής της Intel χρησιμοποιούν τον τρόπο αυτό
για την απόδοση διευθύνσεων.
Παράδειγμα
Συνάρτηση σε C (μια ρίζα δευτεροβάθμιας εξίσωσης):
#include <math.h>
double
root1(double a, double b, double c)
{
double d;
d = b * b - 4.0 * a * c;
return (-b + sqrt(d)) / (2.0 * a);
}
Αντίστοιχος κώδικας σε συμβολική γλώσσα.
Η πρόσβαση στη στοίβα γίνεται με τη ST(Ν) όπου Ν ο αριθμός του στοιχείου
στη στοίβα.
CONST SEGMENT
$FOUR DQ 04010000000000000r ; 4
CONST ENDS
_TEXT SEGMENT
_a$ = 8
_b$ = 16
_c$ = 24
_root1 PROC NEAR
fld QWORD PTR _c$[esp-4]
fmul QWORD PTR _a$[esp-4]
fld QWORD PTR _b$[esp-4]
fmul ST(0), ST(0)
fld QWORD PTR _a$[esp-4]
fxch ST(2)
fmul QWORD PTR $FOUR
fxch ST(2)
fadd ST(0), ST(0)
fxch ST(2)
fsubp ST(1), ST(0)
fsqrt
fsub QWORD PTR _b$[esp-4]
fxch ST(1)
fdivp ST(1), ST(0)
ret 0
_root1 ENDP
_TEXT ENDS
END