From 0f7d451b18dbfbdb6060cd021dfdd56e199e98b8 Mon Sep 17 00:00:00 2001 From: "Jakob L. Kreuze" Date: Fri, 27 Dec 2019 17:37:47 -0500 Subject: Implement ADD instruction. --- asm.myr | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'asm.myr') diff --git a/asm.myr b/asm.myr index 0235db5..5fed9b7 100644 --- a/asm.myr +++ b/asm.myr @@ -199,6 +199,19 @@ const emitinstr = {p | _: -> `std.Err(std.fmt("invalid argument to LD: {}", p[1])) ;; + | "ADD": + if p.len < 3 + -> `std.Err("ADD missing arguments") + ;; + match (parselit(p[1]), parselit(p[2])) + | (`AddressRegister, `Register(n)): b = `std.Some([0xf0 | (n & 0x0f), 0x1e]) + | (`Register(m), `Number(n)): b = `std.Some([0x70 | (m & 0x0f), n & 0xff]) + | (`Register(m), `Label(l)): b = `std.Some([0x70 | (m & 0x0f), 0x00]) + mark = `std.Some(strdup(l)) + | (`Register(m), `Register(n)): b = `std.Some([0x80 | (m & 0x0f), ((n & 0x0f) << 1) | 0x04]) + | _: + -> `std.Err(std.fmt("invalid argument to ADD: {}", p[1])) + ;; | _: -> `std.Err(std.fmt("unrecognized instruction {}", p[0])) ;; -- cgit v1.3