Download TBC (TOKIWA BASIC Compiler) Benutzerhandbuch

Transcript
/mov
ax,[bx+si+offset ary(0)]
Zugriff auf Parameter in SUBROUTINE- und FUNCTION-Anweisungen:
/mov
/inc
ax,arg
arg
Dies wird übersetzt in
mov ax,[bp+n] und inc word ptr [bp+n].
Ergänzung:
Unterprogramme und Funktionen werden in TOKIWA-Basic nach C-Konventionen aufgerufen.
Dies bedeutet, dass die Argumente (die hier grundsätzlich 16 Bit breit sind) in umgekehrter
Reihenfolge, das heißt das letzte zuerst, auf den Stack gelegt werden. Zuletzt wird vor dem
Aufruf die Rückkehradresse (16-Bit-Offset im Codesegment – es gibt nur NEAR-Aufrufe) auf den
Stack gelegt. Das Abräumen des Stacks übernimmt der Aufrufer.
Lokale (Integer-)Variablen stehen in der Reihenfolge ihrer Deklaration „unterhalb“ der
Rückkehradresse. Sie werden unmittelbar beim Eintritt in ein Unterprogramm auf den Stack
gelegt.
Das Unterprogramm muss den Wert des BP-Registers sichern und den Stack-Pointer (SP) bei
der Rückkehr auf den Wert von BP setzen.
Beim Eintritt in ein Unterprogramm sieht der Stackframe demnach wie folgt aus:
BP+2n
…
BP+4
BP+2
BP
BP-2
BP-2
…
SP=BP-2m
arg n
…
arg2
arg1
return offset
local integer variable 1
local integer variable 2
…
local integer variable m
Lokale Real- und String-Variablen sind statisch. Das bedeutet, sie sind zwar nur lokal sichtbar,
werden aber nicht auf den Stack, sondern global im Datensegment angelegt.
(2)
Referenzieren von Zeilennummern und Labels
Als Offset-Adressen:
/mov
/mov
/mov
/inc
bx,@100
[bx+si+@100],cx
ax,[@100+2]
byte ptr [@100]
Als Sprungziele
/jmp
/call
/jz
@100
@100+2
@name
Ergänzung:
Das @-Symbol liefert im Inline-Assembler die Offset-Adresse eines Symbols im Codesegment.
Es ist auf Zeilennummern ebenso anwendbar, wie auf Label-Bezeichner oder die Bezeichner
69