diff options
author | mRnea <akannemre@gmail.com> | 2024-07-27 16:42:24 +0300 |
---|---|---|
committer | mRnea <akannemre@gmail.com> | 2024-07-27 16:42:24 +0300 |
commit | d1481f2770f363aa436db853a7c4f7616de80e50 (patch) | |
tree | 33eb9616d2d96f08aaff329be9a8f9aee65e939b /assembly.lisp | |
parent | 2d94db09901c346d1ac7f5787f89609b6ecf38dd (diff) |
added memory manipulation and syscalls
Diffstat (limited to 'assembly.lisp')
-rw-r--r-- | assembly.lisp | 24 |
1 files changed, 24 insertions, 0 deletions
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) |