Implement TYPE
authorJonas Hvid <mail@johv.dk>
Thu, 21 Nov 2019 17:32:27 +0000 (18:32 +0100)
committerJonas Hvid <mail@johv.dk>
Thu, 21 Nov 2019 17:32:27 +0000 (18:32 +0100)
main.asm

index 0a8ff4cf256dcd602e3c8c59b3bde3418422343b..1fda85d7056575d2582496ef4bbf45a189178287 100644 (file)
--- a/main.asm
+++ b/main.asm
@@ -65,9 +65,25 @@ EMIT:
   popr rsi
   next
 
+TYPE:
+  dq .start
+.start:
+  mov rbx, rsi
+  mov rcx, rax
+
+  mov rax, 1
+  mov rdi, 1
+  pop rdx     ; Length
+  pop rsi     ; Buffer
+  syscall
+
+  mov rax, rcx
+  mov rsi, rbx
+  next
+
 PUSH_HELLO_CHARS:
   dq .start
-  .start:
+.start:
   push $A
   push 'o'
   push 'l'
@@ -76,6 +92,13 @@ PUSH_HELLO_CHARS:
   push 'H'
   next
 
+PUSH_TEST_STRING:
+  dq .start
+.start:
+  push test_string
+  push test_string.length
+  next
+
 HELLO:
   dq docol
   dq PUSH_HELLO_CHARS
@@ -97,12 +120,19 @@ TERMINATE:
 MAIN:
   dq docol
   dq HELLO
+  dq PUSH_TEST_STRING
+  dq PUSH_TEST_STRING
+  dq TYPE
+  dq TYPE
   dq HELLO
   dq HELLO
   dq TERMINATE
 
 segment readable writable
 
+test_string db 'Hi, this is a test.',$A
+.length = $ - test_string
+
 ;; Return stack
 rq $2000
 return_stack_top: