summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob L. Kreuze <zerodaysfordays@sdf.lonestar.org>2019-12-27 17:40:02 -0500
committerJakob L. Kreuze <zerodaysfordays@sdf.lonestar.org>2019-12-27 17:40:02 -0500
commite3feedee60a3b1b5177c8e0576f307a2f473a589 (patch)
treed1699eee24daf079ad336947c039807457c54954
parente7bf636a1cb9253ad32b83e0fbe14504e25fb2b6 (diff)
Implement SUBN instruction.
-rw-r--r--asm.myr10
1 files changed, 9 insertions, 1 deletions
diff --git a/asm.myr b/asm.myr
index ab26cbb..9dcde13 100644
--- a/asm.myr
+++ b/asm.myr
@@ -221,7 +221,15 @@ const emitinstr = {p
| _:
-> `std.Err(std.fmt("invalid argument to SUB: {}", p[1]))
;;
-
+ | "SUBN":
+ if p.len < 3
+ -> `std.Err("SUBN missing arguments")
+ ;;
+ match (parselit(p[1]), parselit(p[2]))
+ | (`Register(m), `Register(n)): b = `std.Some([0x80 | (m & 0x0f), ((n & 0x0f) << 1) | 0x07])
+ | _:
+ -> `std.Err(std.fmt("invalid argument to SUBN: {}", p[1]))
+ ;;
| _:
-> `std.Err(std.fmt("unrecognized instruction {}", p[0]))
;;