back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/calls.asm
diff options
context:
space:
mode:
authorscratko <m@scratko.xyz>2024-03-31 21:05:36 +0300
committerscratko <m@scratko.xyz>2024-03-31 21:05:36 +0300
commit7d07ff825dc7cff7ee80b04346e0d2c49a91e190 (patch)
treef3bf4c72c22107b0d74143f09af39b0071106540 /calls.asm
downloadarithmetic-expression-computator-7d07ff825dc7cff7ee80b04346e0d2c49a91e190.tar.gz
arithmetic-expression-computator-7d07ff825dc7cff7ee80b04346e0d2c49a91e190.tar.bz2
arithmetic-expression-computator-7d07ff825dc7cff7ee80b04346e0d2c49a91e190.zip
Initial commit
Diffstat (limited to 'calls.asm')
-rw-r--r--calls.asm77
1 files changed, 77 insertions, 0 deletions
diff --git a/calls.asm b/calls.asm
new file mode 100644
index 0000000..7d45fa7
--- /dev/null
+++ b/calls.asm
@@ -0,0 +1,77 @@
+global sys_write
+global sys_read
+global sys_errno
+global sys_alloc
+global sys_free
+global sys_exit
+
+section .text
+
+generic_sys_call_3:
+ push ebp
+ mov ebp, esp
+ push ebx
+ mov ebx, [ebp+8]
+ mov ecx, [ebp+12]
+ mov edx, [ebp+16]
+ int 80h
+ mov edx, eax
+ and edx, 0fffff000h
+ cmp edx, 0fffff000h
+ jnz .okay
+ mov [sys_errno], eax
+ xor eax, eax
+ not eax ; -1
+.okay: pop ebx
+ mov esp, ebp
+ pop ebp
+ ret
+
+sys_write: mov eax, 4
+ jmp generic_sys_call_3
+sys_read: mov eax, 3
+ jmp generic_sys_call_3
+
+sys_alloc: push ebp
+ mov ebp, esp
+ mov eax, 45 ; brk()
+ xor ebx, ebx
+ int 80h
+ mov [initial_break], eax
+
+ mov eax, 45
+ mov ebx, [initial_break]
+ add ebx, [ebp+8]
+ int 80h
+ cmp eax, [initial_break]
+ jz .error
+ mov eax, [initial_break]
+ jmp .quit
+.error: mov eax, -1
+.quit: mov esp, ebp
+ pop ebp
+ ret
+
+sys_free: push ebp
+ mov ebp, esp
+ mov eax, 45
+ mov ebx, [ebp+8]
+ int 80h
+ mov esp, ebp
+ pop ebp
+ ret
+
+sys_exit: push ebp
+ mov ebp, esp
+ mov eax, 1
+ mov ebx, [ebp+8]
+ int 80h
+ mov esp, ebp
+ pop ebp
+ ret
+
+section .bss
+sys_errno resd 1
+
+section .data
+initial_break dd 0