on master help sign in
test: x86-64 Assembly NASM syntax test
commit5fe98689d4301f43831f9a104b3be51b91ae068a authorFilip Czaplicki <filipczaplicki@gmail.com> dateWed 7 Oct 2020, 17:30 (6 years ago) parent8832a96
2 files changed+172
tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasm+86 tests/syntax-tests/source/Assembly (x86_64)/test.nasm+86
tests/syntax-tests/highlighted/Assembly (x86_64)/test.nasmnew file+86
@@ -0,0 +1,86 @@
1+global enlight
2+
3+section .data
4+ red dq 0 ; some comment
5+ green dq 0
6+ blue dq 0
7+ data dq 0
8+ N dd 0
9+ M dd 0
10+ change dd 0
11+ delta db 0
12+
13+section .text
14+enlight:
15+ call assign_arguments
16+ call set_data
17+ call make_deltas
18+ ret
19+
20+assign_arguments:
21+ mov qword[red], rdi
22+ mov qword[green], rsi
23+ mov qword[blue], rdx
24+ mov dword[N], ecx
25+ mov dword[M], r8d
26+ mov dword[change], r9d
27+ mov al, byte[rsp + 16]
28+ mov byte[delta], al
29+ ret
30+
31+set_data:
32+ mov eax, dword[change]
33+ cmp eax, 1
34+ jne not_1
35+ mov rax, qword[red]
36+ mov qword[data], rax
37+ ret
38+not_1:
39+ cmp eax, 2
40+ jne not_2
41+ mov rax, qword[green]
42+ mov qword[data], rax
43+ ret
44+not_2:
45+ mov rax, qword[blue]
46+ mov qword[data], rax
47+ ret
48+
49+
50+make_deltas:
51+ mov ecx, dword[N]
52+ mov eax, dword[M]
53+ imul ecx, eax
54+loop_start:
55+ call make_delta
56+ loop loop_start
57+ ret
58+
59+make_delta:
60+ mov rax, qword[data]
61+ add rax, rcx
62+ dec rax
63+ mov dl, byte[delta]
64+ cmp dl, 0
65+ jl substracting
66+adding:
67+ add dl, byte[rax]
68+ jc adding_overflow
69+ mov byte[rax], dl
70+ ret
71+adding_overflow:
72+ mov byte[rax], 255 
73+ ret
74+substracting:
75+ mov r9b, dl
76+ mov dl, 0
77+ sub dl, r9b
78+ mov r8b, byte[rax]
79+ sub r8b, dl
80+ jc substracting_overflow
81+ mov byte[rax], r8b
82+ ret
83+; another comment
84+substracting_overflow:
85+ mov byte[rax], 0
86+ ret
tests/syntax-tests/source/Assembly (x86_64)/test.nasmnew file+86
@@ -0,0 +1,86 @@
1+global enlight
2+
3+section .data
4+ red dq 0 ; some comment
5+ green dq 0
6+ blue dq 0
7+ data dq 0
8+ N dd 0
9+ M dd 0
10+ change dd 0
11+ delta db 0
12+
13+section .text
14+enlight:
15+ call assign_arguments
16+ call set_data
17+ call make_deltas
18+ ret
19+
20+assign_arguments:
21+ mov qword[red], rdi
22+ mov qword[green], rsi
23+ mov qword[blue], rdx
24+ mov dword[N], ecx
25+ mov dword[M], r8d
26+ mov dword[change], r9d
27+ mov al, byte[rsp + 16]
28+ mov byte[delta], al
29+ ret
30+
31+set_data:
32+ mov eax, dword[change]
33+ cmp eax, 1
34+ jne not_1
35+ mov rax, qword[red]
36+ mov qword[data], rax
37+ ret
38+not_1:
39+ cmp eax, 2
40+ jne not_2
41+ mov rax, qword[green]
42+ mov qword[data], rax
43+ ret
44+not_2:
45+ mov rax, qword[blue]
46+ mov qword[data], rax
47+ ret
48+
49+
50+make_deltas:
51+ mov ecx, dword[N]
52+ mov eax, dword[M]
53+ imul ecx, eax
54+loop_start:
55+ call make_delta
56+ loop loop_start
57+ ret
58+
59+make_delta:
60+ mov rax, qword[data]
61+ add rax, rcx
62+ dec rax
63+ mov dl, byte[delta]
64+ cmp dl, 0
65+ jl substracting
66+adding:
67+ add dl, byte[rax]
68+ jc adding_overflow
69+ mov byte[rax], dl
70+ ret
71+adding_overflow:
72+ mov byte[rax], 255
73+ ret
74+substracting:
75+ mov r9b, dl
76+ mov dl, 0
77+ sub dl, r9b
78+ mov r8b, byte[rax]
79+ sub r8b, dl
80+ jc substracting_overflow
81+ mov byte[rax], r8b
82+ ret
83+; another comment
84+substracting_overflow:
85+ mov byte[rax], 0
86+ ret