From d1481f2770f363aa436db853a7c4f7616de80e50 Mon Sep 17 00:00:00 2001 From: mRnea Date: Sat, 27 Jul 2024 16:42:24 +0300 Subject: added memory manipulation and syscalls --- assembly.lisp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'assembly.lisp') diff --git a/assembly.lisp b/assembly.lisp index 1522643..e2b62f1 100644 --- a/assembly.lisp +++ b/assembly.lisp @@ -116,6 +116,30 @@ "cmovg rcx, rdx" "push rcx") +(defop bel () + "push bel") + +(defop oku () + "pop rax" + "xor rbx, rbx" + "mov bl, [rax]" + "push rbx") + +(defop yaz () + "pop rbx" + "pop rax" + "mov [rax], bl") + +(defop (syscall num) () + (iter (with call-regs = #("rdi" "rsi" "rdx" "r10" "r8" "r9")) + (initially (:write "pop rax")) + (for i from (- num 1) downto 0) + (:write ("pop ~a" (aref call-regs i))) + (finally (:write "syscall")))) + +(defun gen-header (op str) + (format str " ;; -- ~s --~%" op)) + (defun gen-code (op str) (let ((op-fn (gethash (car op) *operations*))) (if (null op-fn) -- cgit v1.2.3