pinosaur
/
sped.git
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c808c93
)
finished reading buffer
author
Daniel Liu
<mr.picklepinosaur@gmail.com>
Sat, 19 Jun 2021 17:11:07 +0000
(13:11 -0400)
committer
Daniel Liu
<mr.picklepinosaur@gmail.com>
Sat, 19 Jun 2021 17:11:07 +0000
(13:11 -0400)
sped.asm
patch
|
blob
|
history
diff --git
a/sped.asm
b/sped.asm
index
d0a634b
..
21d1910
100644
(file)
--- a/
sped.asm
+++ b/
sped.asm
@@
-72,15
+72,24
@@
main:
; eax - pointer to mem
; ecx - lines read
readFile:
; eax - pointer to mem
; ecx - lines read
readFile:
- %define _FILE_NAME 8
+ %define _FILE_NAME
8
%define FILE_HANDLE 4
%define FILE_HANDLE 4
+ %define IS_EOF 8
+ %define LINES_READ 12
+ %define BUF_PTR 16 ; malloced array of strings
push ebp
mov ebp, esp
; allocate vars
push ebp
mov ebp, esp
; allocate vars
- sub esp,
4
+ sub esp,
16
mov DWORD [ebp-FILE_HANDLE], 0x00
mov DWORD [ebp-FILE_HANDLE], 0x00
+ mov DWORD [ebp-IS_EOF], 0x00
+ mov DWORD [ebp-LINES_READ], 0x00
+
+ push 0
+ call malloc
+ mov [ebp-BUF_PTR], eax
; open existing file
mov eax, 5
; open existing file
mov eax, 5
@@
-92,20
+101,46
@@
readFile:
; check if file was open successfully
cmp eax, 0
; check if file was open successfully
cmp eax, 0
- jge _readFile_
noerror
+ jge _readFile_
loop
push eax
push wrongfile_str
call printf
jmp _readFile_exit
push eax
push wrongfile_str
call printf
jmp _readFile_exit
- _readFile_noerror:
+ _readFile_loop:
+
+ ; check if eof was reached
+ cmp DWORD [ebp-IS_EOF], 1
+ je _readFile_exit
+
push DWORD [ebp-FILE_HANDLE]
call readLine
push DWORD [ebp-FILE_HANDLE]
call readLine
- push eax
+ mov esi, eax
+ mov [ebp-IS_EOF], ebx
+
+ push esi
call printf
call printf
- jmp _readFile_exit
+ ; make string buffer bigger
+ mov eax, DWORD [ebp-LINES_READ]
+ add eax, 1
+ mov ecx, 4
+ mul ecx
+ push eax
+ push DWORD [ebp-BUF_PTR]
+ call realloc
+ mov DWORD [ebp-BUF_PTR], eax
+
+ ; write string to buffer
+ mov eax, DWORD [ebp-BUF_PTR]
+ mov ecx, 4
+ mul ecx
+ mov eax, esi
+
+ add DWORD [ebp-LINES_READ], 1
+
+ jmp _readFile_loop
_readFile_exit:
; close file
_readFile_exit:
; close file
@@
-115,6
+150,9
@@
readFile:
%undef _FILE_NAME
%undef FILE_HANDLE
%undef _FILE_NAME
%undef FILE_HANDLE
+ %undef IS_EOF
+ %undef LINES_READ
+ %undef BUF_PTR
mov esp, ebp
pop ebp
mov esp, ebp
pop ebp
@@
-136,7
+174,7
@@
readLine:
mov ebp, esp
; allocate vars
mov ebp, esp
; allocate vars
- sub esp,
8
+ sub esp,
12
mov DWORD [ebp-CHAR_COUNT], 0x00
mov DWORD [ebp-BLOCK_COUNT], 0x00
mov DWORD [ebp-CHAR_COUNT], 0x00
mov DWORD [ebp-BLOCK_COUNT], 0x00
@@
-169,6
+207,13
@@
readLine:
; add ecx, [ebp-CHAR_COUNT]
; mov edx, 1
; int 0x80
; add ecx, [ebp-CHAR_COUNT]
; mov edx, 1
; int 0x80
+
+ ; check for eof
+ cmp eax, 0 ; eax has zero on eof
+ jne _readLine_not_eof
+ mov ebx, 1
+ jmp _readLine_exit
+ _readLine_not_eof:
; check for newline
mov eax, [ebp-STR_PTR]
; check for newline
mov eax, [ebp-STR_PTR]
@@
-178,15
+223,6
@@
readLine:
mov ebx, 0
jmp _readLine_exit
_readLine_not_newline:
mov ebx, 0
jmp _readLine_exit
_readLine_not_newline:
-
- ; check for eof
- mov eax, [ebp-STR_PTR]
- add eax, [ebp-CHAR_COUNT]
- cmp DWORD [eax], 0x05
- jne _readLine_not_eof
- mov ebx, 1
- jmp _readLine_exit
- _readLine_not_eof:
add DWORD [ebp-CHAR_COUNT], 1
jmp _readLine_loop
add DWORD [ebp-CHAR_COUNT], 1
jmp _readLine_loop