pinosaur
/
sped.git
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
f0c5604
)
memory allocing
author
Daniel Liu
<mr.picklepinosaur@gmail.com>
Sat, 19 Jun 2021 03:36:29 +0000
(23:36 -0400)
committer
Daniel Liu
<mr.picklepinosaur@gmail.com>
Sat, 19 Jun 2021 03:36:29 +0000
(23:36 -0400)
sped.asm
patch
|
blob
|
history
diff --git
a/sped.asm
b/sped.asm
index
859d386
..
d0a634b
100644
(file)
--- a/
sped.asm
+++ b/
sped.asm
@@
-3,6
+3,10
@@
global main
extern printf
global main
extern printf
+extern malloc
+extern realloc
+extern free
+extern memset
; macros
%macro write_str 2
; macros
%macro write_str 2
@@
-22,9
+26,6
@@
section .data
char_str db `read this char: %i\n`, 0x00
printfint_str db `int: %i\n`, 0x00
char_str db `read this char: %i\n`, 0x00
printfint_str db `int: %i\n`, 0x00
-section .bss
- read_buf resb 64
-
section .text
main:
%define _ARGC 8
section .text
main:
%define _ARGC 8
@@
-101,6
+102,9
@@
readFile:
push DWORD [ebp-FILE_HANDLE]
call readLine
push DWORD [ebp-FILE_HANDLE]
call readLine
+ push eax
+ call printf
+
jmp _readFile_exit
_readFile_exit:
jmp _readFile_exit
_readFile_exit:
@@
-120,21
+124,33
@@
readFile:
; reads a line until newline character is reached
; args: file_handle
; return:
; reads a line until newline character is reached
; args: file_handle
; return:
-; location to buffer
-; contains eof
+;
eax:
location to buffer
+;
ebx:
contains eof
readLine:
%define _FILE_HANDLE 8
readLine:
%define _FILE_HANDLE 8
- %define CHAR_PTR 4
+ %define CHAR_COUNT 4 ; count number of characters read
+ %define BLOCK_COUNT 8 ; number of 64 blocks we've read
+ %define STR_PTR 12 ; malloced buffer to store read string
push ebp
mov ebp, esp
push ebp
mov ebp, esp
+
+ ; allocate vars
+ sub esp, 8
+ mov DWORD [ebp-CHAR_COUNT], 0x00
+ mov DWORD [ebp-BLOCK_COUNT], 0x00
- sub esp, 4
- mov DWORD [ebp-CHAR_PTR], 0x00
+ push 64
+ call malloc
+ mov [ebp-STR_PTR], eax
+
+ push DWORD [ebp-STR_PTR]
+ push 0x00
+ push 64
_readLine_loop:
; if buffer is full
_readLine_loop:
; if buffer is full
- cmp BYTE [ebp-CHAR_
PTR], 64
+ cmp BYTE [ebp-CHAR_
COUNT], 63 ; leave one byte for null byte
jne _readLine_notfull
jmp _readLine_exit
jne _readLine_notfull
jmp _readLine_exit
@@
-142,38
+158,47
@@
readLine:
; read a single character
mov eax, 3
mov ebx, [ebp+_FILE_HANDLE]
; read a single character
mov eax, 3
mov ebx, [ebp+_FILE_HANDLE]
- mov ecx,
read_buf
- add ecx, [ebp-CHAR_
PTR
]
+ mov ecx,
[ebp-STR_PTR]
+ add ecx, [ebp-CHAR_
COUNT
]
mov edx, 1
int 0x80
mov edx, 1
int 0x80
- mov eax, 4
- mov ebx, 1
- mov ecx, read_buf
-
add ecx, [ebp-CHAR_PTR
]
- mov edx, 1
- int 0x80
+
;
mov eax, 4
+
;
mov ebx, 1
+ ; mov ecx, [ebp-STR_PTR]
+
; add ecx, [ebp-CHAR_COUNT
]
+
;
mov edx, 1
+
;
int 0x80
; check for newline
; check for newline
- mov eax,
read_buf
- add eax, [ebp-CHAR_
PTR
]
+ mov eax,
[ebp-STR_PTR]
+ add eax, [ebp-CHAR_
COUNT
]
cmp DWORD [eax], 0x0a
cmp DWORD [eax], 0x0a
- je _readLine_exit
+ jne _readLine_not_newline
+ mov ebx, 0
+ jmp _readLine_exit
+ _readLine_not_newline:
; check for eof
; check for eof
- mov eax,
read_buf
- add eax, [ebp-CHAR_
PTR
]
+ mov eax,
[ebp-STR_PTR]
+ add eax, [ebp-CHAR_
COUNT
]
cmp DWORD [eax], 0x05
cmp DWORD [eax], 0x05
- je _readLine_exit
-
- add DWORD [ebp-CHAR_PTR], 1
+ jne _readLine_not_eof
+ mov ebx, 1
+ jmp _readLine_exit
+ _readLine_not_eof:
+ add DWORD [ebp-CHAR_COUNT], 1
jmp _readLine_loop
_readLine_exit:
jmp _readLine_loop
_readLine_exit:
+ mov eax, DWORD [ebp-STR_PTR]
+
%undef _FILE_HANDLE
%undef _FILE_HANDLE
- %undef CHAR_PTR
+ %undef CHAR_COUNT
+ %undef BLOCK_COUNT
+ %undef STR_PTR
mov esp, ebp
pop ebp
mov esp, ebp
pop ebp