From a4e81a265038b42acd27ef315d1796dd332c50e0 Mon Sep 17 00:00:00 2001 From: Christian Cunningham Date: Sat, 13 Jul 2024 21:32:21 -0700 Subject: Strings --- zstring.inc | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 zstring.inc (limited to 'zstring.inc') diff --git a/zstring.inc b/zstring.inc new file mode 100644 index 0000000..5c88c02 --- /dev/null +++ b/zstring.inc @@ -0,0 +1,57 @@ +%ifndef ZSTRING_INC +%define ZSTRING_INC +%ifndef SYS_INC +%include "sys.inc" +%endif +%ifndef ALLOC_INC +%include "alloc.inc" +%endif + +%macro make_zstring 2-* +%1: db %2 + %rep %0-2 + db %3 + %rotate 1 + %endrep + db 0 +%endm + + section .text +length_zstring: + ;; rax = zstring address + push rbp + mov rbp, rsp + ;; + mov rdx, rax + xor rax, rax +.loop: + mov cl, byte [rdx] + cmp cl, 0 + je .exit + inc rax + inc rdx + jmp .loop +.exit: + ;; + mov rsp, rbp + pop rbp + ret + +print_zstring: + ;; rax = zstring address + push rbp + mov rbp, rsp + ;; + push rax + mov rsi, rax + call length_zstring + mov rdx, rax + mov rax, SYS_WRITE + mov rdi, 1 + syscall + ;; + mov rsp, rbp + pop rbp + ret + +%endif -- cgit v1.2.1