mirror of
https://github.com/sharkdp/bat.git
synced 2025-09-02 03:12:25 +01:00
test: x86-64 Assembly NASM syntax test
This commit is contained in:
committed by
David Peter
parent
8832a96e82
commit
5fe98689d4
86
tests/syntax-tests/source/Assembly (x86_64)/test.nasm
Normal file
86
tests/syntax-tests/source/Assembly (x86_64)/test.nasm
Normal file
@@ -0,0 +1,86 @@
|
||||
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
|
Reference in New Issue
Block a user