diff --git a/src/cheatsheets/CT.typ b/src/cheatsheets/CT.typ index 253af4b..9e57927 100644 --- a/src/cheatsheets/CT.typ +++ b/src/cheatsheets/CT.typ @@ -336,7 +336,74 @@ Wort: $64$ Bit - ] + *Calling Convensions* + + #cetz.canvas({ + import cetz.draw : * + + let cellHeight = 0.4 + let cellWidth = 2 + + let c(y, c, x: 0, number: "") = { + rect((x, cellHeight*y), (x + cellWidth, cellHeight*(y+1)), fill: white) + content((x+ cellWidth/2, cellHeight*(y+0.5)), c) + content((x - 0.2, cellHeight*(y+0.5)), number, anchor: "mid-east") + } + + c(0, "3.Param", number: raw("0x3FFFFFFFFFFFFFF8")) + c(1, "2.Param", number: raw("0x3FFFFFFFFFFFFFF0")) + c(2, "1.Param", number: raw("0x3FFFFFFFFFFFFFE8")) + c(3, "Sicherung $1", number: raw("0x3FFFFFFFFFFFFFE0")) + c(4, "Sicherung $2", number: raw("0x3FFFFFFFFFFFFFD8")) + + c(0, "Rückgabe wert", x: cellWidth) + }) + + #colbreak() + +#text(rgb("#1a00aa"))[ +*1. (Aufrufer) Parameter auf Stack ablegen*\ +#raw("SUB :SP,:SP,n*8 +STO $x0,:SP,0*8 +STO $x1,:SP,1*8 +... +STO $xn,:SP,n*8") + +*2. (Aufrufer) Funktions Aufruf*\ +#raw("GO $0,:Fkt") +] + +#text(rgb("#aa0000"))[ +*3. (Funktion) Sicherung der Register*\ +#raw("SUB :SP,:SP,n*8 +STO $y0,:SP,0*8 +STO $y1,:SP,1*8 +... +STO $yn,:SP,n*8") + +*4. (Funktion) Funktions Code*\ + +*5. (Funktion) Schreiben des Rückgabewerts*\ +#raw(" +STO $r,:SP,m*8 +") + +*6. (Funktion) Wiederherstellung der Register*\ +#raw("LDO $x0,:SP, 0*8 + k +LDO $x1,:SP, 1*8 + k +... +LDO $xn,:SP, n*8 + k +") + +*7. (Funktion) Rücksprung*\ +] + +#text(rgb("#1a00aa"))[ +*8. (Aufrufer) Lesen des Rückgabewerts*\ + + +] +] #bgBlock(fill: colorRandomShit)[ #subHeading(fill: colorRandomShit)[Register Register Magista]