Commit 33939a63 authored by lesswixx's avatar lesswixx
Browse files

Update lib.inc

No related merge requests found
Pipeline #38175 failed with stage
in 9 seconds
......@@ -132,44 +132,50 @@ read_char:
; При неудаче возвращает 0 в rax
; Эта функция должна дописывать к слову нуль-терминатор
read_word:
xor rdx, rdx
xor rax, rax
mov r8, rdi
mov r9, rsi
.read_spaces:
call read_char
cmp al, WHITESPACE
je .read_spaces
cmp al, TAB
je .read_spaces
cmp al, NEXT_LINE
je .read_spaces
xor rdx, rdx
.loop:
push rsi
push rdi
cmp al, NEXT_LINE
je .finish
cmp al, WHITESPACE
je .finish
cmp al, 4
je .finish
cmp al, TAB
je .finish
cmp al, 0
je .finish
inc rdx
cmp rdx, r9
jge .overflow
dec rdx
mov [r8+rdx], al
inc rdx
push rdx
push r8
call read_char
pop r8
pop rdx
pop rdi
pop rsi
test rax, rax
je .end
cmp rax, WHITESPACE
je .space
cmp rax, NEXT_LINE
je .space
cmp rax, TAB
je .space
mov byte[rdi + rdx], al
inc rdx
cmp rdx, rsi
jge .overflow
jmp .loop
.space:
test rdx, rdx
jne .end
jmp .loop
.finish:
mov byte [r8+rdx], 0
mov rax, r8
ret
.overflow:
xor rax, rax
xor rdx, rdx
ret
.finish:
mov byte[rdi + rdx], 0
mov rax, rdi
ret
; Принимает указатель на строку, пытается (rdi)
; прочитать из её начала беззнаковое число.
; Возвращает в rax: число, rdx : его длину в символах
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment