From ba274c03717f75dc78f967bc3e7afb1661e1e07e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?b=CA=B0edoh=E2=82=82=20sw=C3=A9?= Date: Tue, 18 Jun 2024 03:56:21 +0500 Subject: [PATCH] Add std/string/array/compare.lb --- std/string/array/compare.lb | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 std/string/array/compare.lb diff --git a/std/string/array/compare.lb b/std/string/array/compare.lb new file mode 100644 index 0000000..26dbbb7 --- /dev/null +++ b/std/string/array/compare.lb @@ -0,0 +1,84 @@ +@ 0 ; Getting all arguments + args 0 + size + + args 1 + dup + |#insert push + push 1 + |#insert jmp + |args + jmp 255 + +@ 1 + dup + #expr + + pick ; Finish getting arguments + + dup ; Duplicate top two elements + push 2 + pick + + sub ; Lengths unequal => strings unequal + jnz 2 + + pop + push 0 + +@ 4 + + dup ; Duplicate top two elements + push 2 + pick + ; |str_size index...> + + sub + jz 5 + + ; |index str_size...> + dup ; Get current symbol of s1 + push 2 + add + pick + ; |char index str_size...> + + push 2 ; Get string size + pick + + push 2 ; Get current symbol of s2 + pick + add + push 4 + add + pick + + sub ; Check symbol equality + jnz 2 + + ; |index...> + #expr + + + jmp 4 + +@ 2 ; Clear stack (diff) + size + jz 3 + pop + jmp 2 + +@ 3 ; Exit, string are different + push 0 + quit + +@ 6 ; Clear stack (equ) + size + jz 5 + pop + jmp 6 + +@ 5 ; Exit, string are the same + push 1 + quit + + +@ 255