summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorFilip Czaplicki <filipczaplicki@gmail.com>2020-10-07 17:30:48 +0200
committerDavid Peter <sharkdp@users.noreply.github.com>2020-10-07 18:00:33 +0200
commit5fe98689d4301f43831f9a104b3be51b91ae068a (patch)
tree1c26b13e1d1cf050686ec6245bd58a26c660dd42 /tests
parent8832a96e82cb7a1135d6188972f9634f21e83a4c (diff)
test: x86-64 Assembly NASM syntax test
Diffstat (limited to 'tests')
-rw-r--r--tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasm86
-rw-r--r--tests/syntax-tests/source/Assembly (x86_64)/test.nasm86
2 files changed, 172 insertions, 0 deletions
diff --git a/tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasm b/tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasm
new file mode 100644
index 00000000..816ec75e
--- /dev/null
+++ b/tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasm
@@ -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
diff --git a/tests/syntax-tests/source/Assembly (x86_64)/test.nasm b/tests/syntax-tests/source/Assembly (x86_64)/test.nasm
new file mode 100644
index 00000000..05c87947
--- /dev/null
+++ b/tests/syntax-tests/source/Assembly (x86_64)/test.nasm
@@ -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