Fix ggt and write tests

This commit is contained in:
Jan-Niclas Loosen
2025-10-26 00:55:37 +02:00
parent dbac3442e9
commit a26207ae23
5 changed files with 156 additions and 98 deletions

View File

@@ -1,22 +1,26 @@
// Quellkode: ggt(a,b) { if (b==0) then a else ggt(b, a mod b) }
// Annahmen: Die Argumente a und b werden durch Kellerzellen 0 und 1 repräsentiert,
// sowie PP=0, FP=0 und TOP=-1
INVOKE 2 LGGT 0
POP
INVOKE 2 GGT 0
HALT
LGGT:
// b
GGT: LOAD 1 0
IFZERO RET
LOAD 1 0
// if b != 0 -> 1
IFZERO 1
// return a
LOAD 0 0
RETURN
L1:
LOAD 1 0 // b
LOAD 0 0
LOAD 1 0
MOD // a mod b
INVOKE 2 LGGT 0 // ggt(b, a mod b)
INVOKE 2 MOD 1
INVOKE 2 GGT 0
RETURN
RET: LOAD 0 0
RETURN
MOD: LOAD 0 0
LOAD 1 0
LOAD 0 0
LOAD 1 0
DIV
MUL
SUB
RETURN