bat/tests/syntax-tests/source/Assembly (x86_64)/test.nasm

87 lines
1.2 KiB
NASM
Raw Normal View History

2020-10-07 15:30:48 +00:00
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