From f9a715e3b1fa9e2948152bb8b768ede5e30b947b Mon Sep 17 00:00:00 2001 From: cannoli-fruit Date: Fri, 24 Jul 2026 03:05:44 -0400 Subject: [PATCH] Added division --- flagvm | Bin 22248 -> 0 bytes src/interp.c | 8 +++++++- tests/div.asm | 10 ++++++++++ tests/fvm.inc | 6 ++++++ 4 files changed, 23 insertions(+), 1 deletion(-) delete mode 100755 flagvm create mode 100644 tests/div.asm diff --git a/flagvm b/flagvm deleted file mode 100755 index 364a20fe3e2046080c28a4fa9830195e68b335c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22248 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

o7c_J=yR|>wrP(bfIkw8yTn0NH`?2co%&1M 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 ObG6_&&mrI_vi|{w4JfJr diff --git a/src/interp.c b/src/interp.c index 81d2d56..f9b340b 100644 --- a/src/interp.c +++ b/src/interp.c @@ -162,12 +162,18 @@ int main(int argc, char **argv) { negativeFlag = (val < 0); break; } - case 0x60: { + case 0x60: { // AddR64 unsigned char dst = inputs[0]; unsigned char src = inputs[1]; registers[dst] += registers[src]; break; } + case 0x72: { // DivR64 + unsigned char dst = inputs[0]; + unsigned char src = inputs[1]; + registers[dst] /= registers[src]; + break; + } case 0xC0: { // Jmp unsigned char addr = inputs[0]; xPc = registers[addr]; diff --git a/tests/div.asm b/tests/div.asm new file mode 100644 index 0000000..6f8bc35 --- /dev/null +++ b/tests/div.asm @@ -0,0 +1,10 @@ +include "fvm.inc" + +org 0x4000000000000000 + MovI64 r95, UART_TX + MovI64 r2, 64 + MovI64 r3, 16 + DivR64 r2, r3 + MovI64 r4, 48 ; ascii for 0 + AddR64 r2, r4 + St8 r2, r95 diff --git a/tests/fvm.inc b/tests/fvm.inc index 8aefca8..0b494bb 100644 --- a/tests/fvm.inc +++ b/tests/fvm.inc @@ -236,6 +236,12 @@ macro AddR64 dst, src db src end macro +macro DivR64 dst, src + db 0x72 + db dst + db src +end macro + macro RSetF reg db 0x42 db reg