You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bat/tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasm

87 lines
12 KiB
Plaintext

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

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