mirror of
https://github.com/sharkdp/bat
synced 2024-12-26 20:23:06 +00:00
87 lines
1.2 KiB
NASM
87 lines
1.2 KiB
NASM
|
global enlight
|
||
|
|
||
|
section .data
|
||
|
red dq 0 ; some comment
|
||
|
green dq 0
|
||
|
blue dq 0
|
||
|
data dq 0
|
||
|
N dd 0
|
||
|
M dd 0
|
||
|
change dd 0
|
||
|
delta db 0
|
||
|
|
||
|
section .text
|
||
|
enlight:
|
||
|
call assign_arguments
|
||
|
call set_data
|
||
|
call make_deltas
|
||
|
ret
|
||
|
|
||
|
assign_arguments:
|
||
|
mov qword[red], rdi
|
||
|
mov qword[green], rsi
|
||
|
mov qword[blue], rdx
|
||
|
mov dword[N], ecx
|
||
|
mov dword[M], r8d
|
||
|
mov dword[change], r9d
|
||
|
mov al, byte[rsp + 16]
|
||
|
mov byte[delta], al
|
||
|
ret
|
||
|
|
||
|
set_data:
|
||
|
mov eax, dword[change]
|
||
|
cmp eax, 1
|
||
|
jne not_1
|
||
|
mov rax, qword[red]
|
||
|
mov qword[data], rax
|
||
|
ret
|
||
|
not_1:
|
||
|
cmp eax, 2
|
||
|
jne not_2
|
||
|
mov rax, qword[green]
|
||
|
mov qword[data], rax
|
||
|
ret
|
||
|
not_2:
|
||
|
mov rax, qword[blue]
|
||
|
mov qword[data], rax
|
||
|
ret
|
||
|
|
||
|
|
||
|
make_deltas:
|
||
|
mov ecx, dword[N]
|
||
|
mov eax, dword[M]
|
||
|
imul ecx, eax
|
||
|
loop_start:
|
||
|
call make_delta
|
||
|
loop loop_start
|
||
|
ret
|
||
|
|
||
|
make_delta:
|
||
|
mov rax, qword[data]
|
||
|
add rax, rcx
|
||
|
dec rax
|
||
|
mov dl, byte[delta]
|
||
|
cmp dl, 0
|
||
|
jl substracting
|
||
|
adding:
|
||
|
add dl, byte[rax]
|
||
|
jc adding_overflow
|
||
|
mov byte[rax], dl
|
||
|
ret
|
||
|
adding_overflow:
|
||
|
mov byte[rax], 255
|
||
|
ret
|
||
|
substracting:
|
||
|
mov r9b, dl
|
||
|
mov dl, 0
|
||
|
sub dl, r9b
|
||
|
mov r8b, byte[rax]
|
||
|
sub r8b, dl
|
||
|
jc substracting_overflow
|
||
|
mov byte[rax], r8b
|
||
|
ret
|
||
|
; another comment
|
||
|
substracting_overflow:
|
||
|
mov byte[rax], 0
|
||
|
ret
|