Een echte re stack-machine nMemory nRegisters R0 R1 R2 R3 R4 PC SP MP nMemory uProgram uStack uMemory nRegisters uProgr.counter uStack pointer uMark pointer.

Slides:



Advertisements
Verwante presentaties

Advertisements


Hoe werkt een rekenmachine?

Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Par. 3.1 Computers zijn overal
Jerry van den Heuvel Pim van der Lee
1 SOCS Hoofdstuk 1 Computerarchitectuur. 2 Overzicht Eenvoudig C Arrays  Klassiek gebruik  For opdracht, Increment/Decrement  Wijzers, Arrays en Wijzers.
Auteursomgeving voor Digitale Componenten
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 4: Instructieformaten adressering assembleertalen (zelfstudie.
1/1/ /e/e eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 2(2): Instructieformaten adressering assembleertalen.
C programma int main(){ } Compilatie met devc++ in file main.c Gecompileerd programma in file FirstProgram.exe Mov R1, 120 Mov R2, 160 ADD R1, R2.
Hoofdstuk 6: Controle structuren
1 SOCS Hoofdstuk 1 Computerarchitectuur. 2 Overzicht Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren Macro’s C.
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Hoofdstuk 2 Hallo, C# !.
Functies op Proposities evalueer:: Bedeling  Prop  Bool tautologie:: Prop  Bool contradictie:: Prop  Bool equivalentie:: Prop  Prop  Bool vervulbaar::
1/1/ /e/e eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 3(1): Instructietypen (1)
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(1): Flow of.
1Ben Bruidegom Hoe werkt een rekenmachine? Ben Bruidegom AMSTEL Instituut Universiteit van Amsterdam.
1Ben Bruidegom 1 Hoe werkt een “loopje” nu precies? Recapitulatie rekenmachines week 1 Van rekenmachine naar rekenmachine met “loopjes”
1Ben Bruidegom A Harvard Machine Calculator Calculator  Computer.
Auteursomgeving voor Digitale Componenten
1Ben Bruidegom A Harvard Machine Recapitulatie Calculator Calculator  Calculator met “loopjes” Calculator met “loopjes”  Processor.
Frank Stalpers en Ad Baars
Functies als Getallen Jan Martin Jansen.
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.
Zelfgemaakt datatype voor bomen nMet functies data Tree a = Bin (Tree a) (Tree a) | Leaf a foldTree :: Tree a  b foldTree (b,lf) (Bin le ri) = b (foldTree.
Hoofdstuk 8 Objecten en klassen.
1Ben Bruidegom 1 De Harvard Machine Van rekenmachine met “loopjes” naar processor.
Opleiding INFORMATICA Programmeertaal Implementatie Taal ontwerp Vertalen.
PEMSY1http:// 1  Herhaling: - ACPS - set status, conditioneel uitvoeren - indexed addressing  Nieuw: - CMP, CMN - half-word.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  herhaling ARM assembler instructies.
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 1 Hogeschool van Utrecht.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 3: Instructietypen (1)
Samenwerking tussen processor, registers en RAMgeheugen
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  herhaling ARM assembler instructies.
PEMSY1http:// 1  Herhaling ARM assembler instructies  branch instructie  conditionele instructies en de flags  oefening.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  herhaling ARM assembler instructies  assembler.
PEMSY1http:// 1  Herhaling: combineren van assembler en C  Herhaling: subroutine  Oefening: melodie Klas EV2B: week.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
tircms02-p les 1 Operating Systems practicum
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Functioneel programmeren Een snelle herhaling…. Functie-definitie static int kwad (int x) { return x*x ; } kwad x = x * x Haskell kwad :: Int  Int.
VPEMSY1, D3ECPT2 : ARM Assembler 1 Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling: CMP, CMN,
PEMSY1http:// 1  Herhaling nieuwe instructies van vorige week  nieuw: combineren van assembler en C  oefeningen: assembler.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
AWK A Pattern scanning and processing language made by Aho Weinberger Kernighan and explained by Albert Montijn.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Wouter van Ooijen Mail:
Hoofdstuk 3 Methoden om te tekenen.
Hoofdstuk 4 Nieuwe methoden. Tekenen g.drawRect(20,60,40,40); g.drawLine(20,60,40,40); g.drawLine(40,40,60,60); g.drawRect(70,60,40,40); g.drawLine(70,60,90,40);
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen Instruction timing Shadow.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Informatie beoordelen If else Switch En Wiskunde.
VPEMSY1, D3ECPT2 : ARM Assembler Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling B/BL, conditions,
HOGESCHOOL ROTTERDAM / CMI Computersystemen 1
Aanroep van een methode voert opdrachten uit in de body daarvan
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Expressies
Digitale Methoden Onderdeel van vak Computer Systemen
Windows-applicatie using System.Windows.Forms; using System.Drawing;
vandaag èn vrijdag deadline maandag 12 dec.
Gameprogrammeren: Herhalingen
Voorbeeld: Simulatie van bewegende deeltjes
Wat gaan we doen? Herhaling ARM assembler instructies
Transcript van de presentatie:

Een echte re stack-machine nMemory nRegisters R0 R1 R2 R3 R4 PC SP MP nMemory uProgram uStack uMemory nRegisters uProgr.counter uStack pointer uMark pointer

Instructies: load on stack R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 HALT nLDC Load from constant

Instructies: load on stack nLDC Load from constant R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 HALT 17 nLDR Load from register

Instructies: load on stack nLDC Load from constant R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 HALT 17 nLDR Load from register 43 nLDL Load from local

Instructies: load on stack nLDC Load from constant R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 HALT 17 nLDR Load from register 43 nLDL Load from local 75 nLDS Load from stack

Instructies: load on stack nLDC Load from constant R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 HALT 17 nLDR Load from register 43 nLDL Load from local 75 nLDS Load from stack 12 nLDLA Load local address

Instructies: load on stack nLDC Load from constant R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 HALT 17 nLDR Load from register 43 nLDL Load from local 75 nLDS Load from stack 12 nLDLA Load local address nLDA Load via address

Instructies: load on stack nLDC Load from constant R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 HALT 17 nLDR Load from register 43 nLDL Load from local 75 nLDS Load from stack 12 nLDLA Load local address 81 nLDA Load via address

Instructies: load on stack nLDC Load from constant R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 HALT 17 nLDR Load from register 43 nLDL Load from local 75 nLDS Load from stack 12 nLDLA Load local address 81 nLDA Load via address

Instructies: store from stack nLDC Load from constant nLDR Load from register nLDL Load from local nLDS Load from stack nLDLA Load local address nLDA Load via address nSTR Store to register nSTL Store to local nSTS Store to stack nSTA Store via address

Instructies: Register nLDRR Load reg. to reg. R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 LDRR AJS -2 BRA +3 BSR -4 LDC 91 STR R3 RET LDR R3

Instructies: Register nLDRR Load reg. to reg. R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 LDRR AJS -2 BRA +3 BSR -4 LDC 91 STR R3 RET LDR R3 nAJS Adjust stackpointer

Instructies: Register nLDRR Load reg. to reg. R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 LDRR AJS -2 BRA +3 BSR -4 LDC 91 STR R3 RET LDR R3 nAJS Adjust stackpointer nBRA Branch (Jump)

Instructies: Register nLDRR Load reg. to reg. R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 LDRR AJS -2 BRA +3 BSR -4 LDC 91 STR R3 RET LDR R3 nAJS Adjust stackpointer nBRA Branch (Jump) nBSR Branch to subroutine

Instructies: Register nLDRR Load reg. to reg. R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 LDRR AJS -2 BRA +3 BSR -4 LDC 91 STR R3 RET LDR R3 nAJS Adjust stackpointer nBRA Branch (Jump) nBSR Branch to subroutine

Instructies: Register nLDRR Load reg. to reg. R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 LDRR AJS -2 BRA +3 BSR -4 LDC 91 STR R3 RET LDR R3 nAJS Adjust stackpointer nBRA Branch (Jump) nBSR Branch to subroutine

Instructies: Register nLDRR Load reg. to reg. R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 LDRR AJS -2 BRA +3 BSR -4 LDC 91 STR R3 RET LDR R3 nAJS Adjust stackpointer nBRA Branch (Jump) nBSR Branch to subroutine nRET Return from subroutine

Instructies: Register nLDRR Load reg. to reg. R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 LDRR AJS -2 BRA +3 BSR -4 LDC 91 STR R3 RET LDR R3 nAJS Adjust stackpointer nBRA Branch (Jump) nBSR Branch to subroutine nRET Return from subroutine

Instructies: Register nLDRR Load reg. to reg. R0 R1 R2 R3 R4 PC SP MP LDC 17 LDR R4 LDL 2 LDS -3 LDLA 1 LDA 2 NOP 12 LDRR AJS -2 BRA +3 BSR -4 LDC 91 STR R3 RET LDR R3 nAJS Adjust stackpointer nBRA Branch (Jump) nBSR Branch to subroutine nRET Return from subroutine 91

Instructies: Arithmetic nADD nSUB nMUL nDIV nMOD Haal twee waarden van de stack, en vervang ze door het resultaat van… nAND nOR nXOR nEQ nNE nLT nGT nLE nGE nNOT nNEG één of

Instructies: Branch nBRA Onvoorwaardelijke sprong nBSR Zet eerst returnadres op stack nBRT Voorwaardelijke sprong: alleen als er True op stack staat nBRF Voorwaardelijke sprong: …False…

Codegeneratie voor Expressies * * ?: 12 == LDC 3 LDC 5 ADD LDC 3 LDC 5 ADD LDC 2 MUL LDC 3 LDC 5 ADD LDC 2 MUL LDC 1 LDC 2 EQ BRF +2 LDC 7 BRA +3 LDC 3 LDC 5 ADD

Codegenereer-Algebra code b = foldExpr codeAlg b where codeAlg :: ExpAlg Code = (\n ,\x y ,\x y z  ) [LDC n] x ++ y ++ [ADD] x ++ y ++ [MUL] x ++ y ++ [EQ] x ++[BRF (sy+1)] ++ y ++[BRA sz] ++ z \e  data Expr = Con Int | Add Expr Expr | Mul Expr Expr | Eq Expr Expr | If Expr Expr Expr let sy=size y ; sz=size z in,\s ,\s d b  | Var Str | Let Str Expr Expr [LDL s ][LDL (e?s) ] (Env  Code) \e  ee ee ee ye=y e; ze=z e; e ye ze ye ze \e  d e ++ [STL (length e)] ++ b ((s,a):e) [ ]

Codegenereer-Algebra code b = foldStEx codeAlg b where codeAlg :: StExAlg Code = ((\s d  \e ,\c b a  \e ,\c b  \e ,\m ps  \e  ), (…)) data Stat = Asmt Str Expr | If Expr Stat Stat | While Expr Stat | Call Str [Expr] (Env  Code) [ ] d e ++ [STL (e?s)] ce ++ [BRF(size be+1)]++ be ++ [BRA(size ae)]++ae ce ++ [BRF (n+1)] ++ be ++ [BRA –(n+k+2)] where n = size be k = size ce concat [p e | p  ps] ++ [BSR (f e m)]

Codegenereer-Algebra code b = foldStEx codeAlg b where codeAlg :: StExAlg Code = ((\s d  \e ,\c b a  \e ,\c b  \e ,\m ps  \e  ), (…)) data Stat = Asmt Str Expr | If Expr Stat Stat | While Expr Stat | Call Str [Expr] (Env  Code) [ ] d e ++ [STL (e?s)] ce ++ [BRF(size be)] ++ be ++ [BRA(size ae)]++ae [BRA n] ++ be ++ ce ++ [BRT –(n+k+1)] where n = size be k = size ce concat [p e | p  ps] ++ [BSR (f e m)]

Methodes met parameters nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m nMethod-definitie m(7, 12); void m(int x, int y) { p(x+37); q(x*y); }

Methodes met parameters nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDS -2 LDC BSR p LDS -2 STS -2 LDS -2 MUL BSR q AJS -1 ADD RET nMethod-definitie m(7, 12); m: void m(int x, int y) { p(x+37); q(x*y); }

Methodes met parameters nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDS -2 LDC BSR p LDS -2 STS -2 LDS -2 MUL BSR q AJS -1 ADD RET nMethod-definitie m(7, 12); m: 7 37 void m(int x, int y) { p(x+37); q(x*y); }

Methodes met parameters nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDS -2 LDC BSR p LDS -2 STS -2 LDS -2 MUL BSR q AJS -1 ADD RET nMethod-definitie m(7, 12); m: void m(int x, int y) { p(x+37); q(x*y); }

Methodes met parameters nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDS -2 LDC BSR p LDS -2 STS -2 LDS -2 MUL BSR q AJS -1 ADD RET nMethod-definitie m(7, 12); void m(int x, int y) { p(x+37); q(x*y); } m: Wij ruimen onze eigen rommel op!

Methodes met parameters nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDS -2 LDC BSR p LDS -2 STS -2 LDS -2 MUL BSR q AJS -1 ADD RET nMethod-definitie m(7, 12); void m(int x, int y) { p(x+37); q(x*y); } m: Wij ruimen onze eigen rommel op!

Methodes met parameters nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDS -2 LDC BSR p LDS -2 STS -2 LDS -2 MUL BSR q AJS -1 ADD RET nMethod-definitie m(7, 12); void m(int x, int y) { p(x+37); q(x*y); } m: Wij ruimen onze eigen rommel op!

Methodes met parameters nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDS -2 LDC BSR p LDS -2 STS -2 LDS -2 MUL BSR q AJS -1 ADD RET nMethod-definitie m(7, 12); void m(int x, int y) { p(x+37); q(x*y); } m: Wij ruimen onze eigen rommel op!

Methodes met parameters nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDS -2 LDC BSR p LDS -2 STS -2 LDS -2 MUL BSR q AJS -1 ADD RET nMethod-definitie m(7, 12); void m(int x, int y) { p(x+37); q(x*y); } m: Wij ruimen onze eigen rommel op!

Methodes met n parameters nMethode-aanroep uZet parameters op de stack uCall nMethode-definitie uGebruik parameters … uRuim stack op uReturn BSR m LDS –(n+d)LDS –(1+d) STS –n AJS –(n-1) RET nMethode-aanroep uZet parameters op de stack uCall uRuim stack op nMethode-definitie uGebruik parameters … u Return BSR m RET AJS -n Alternatieve strategie: aanroeper ruimt op LDS –(n+d)LDS –(1+d)

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 7 12

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 7 12 MP=SP

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 7 12 MP=SP AJS +2

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 7 12 MP=SP AJS +2 LDL -3 NEG

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 7 12 MP=SP AJS +2 LDL -3 NEG -7 STL +1

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 7 12 MP=SP AJS +2 LDL -3 NEG -7 STL SP=MP

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 7 12 MP=SP AJS +2 LDL -3 NEG -7 STL +1 SP=MP STR MP -7

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 7 12 MP=SP AJS +2 LDL -3 NEG -7 STL +1 SP=MP STR MP -7 STS -2

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 12 MP=SP AJS +2 LDL -3 NEG -7 STL +1 SP=MP STR MP -7 STS -2 AJS -1

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 12 MP=SP AJS +2 LDL -3 NEG -7 STL +1 SP=MP STR MP -7 STS -2 AJS -1 RET

Methode met lokale variabelen nMethod-aanroep R0 R1 R2 R3 R4 PC SP MP LDC 7 LDC 12 BSR m LDR MP nMethod-definitie m(7, 12); void m(int x, int y) { int a, b; a = -x; …… } m: 12 MP=SP AJS +2 LDL -3 NEG -7 STL +1 SP=MP STR MP -7 STS -2 AJS -1 RET

Methode met n parameters en k lokale variabelen nCreëer ruimte voor lokalen uBewaar oude MP uMP wijst naar stukje stack nGebruik variabelen in de body uParameters uLokale variabelen nOpruimen uLokale variabelen uParameters LDR MP MP=SP AJS +k LDL –(n+1)LDL –2LDL +1LDL +k STR MP SP=MPSTS –n AJS –(n-1) RET LINK k UNLINK

Methoden met een resultaat nLaat het resultaat achter op de stack (nog meer gepruts bij het opruimen) nLaat het resultaat achter in R3 òf