summaryrefslogtreecommitdiff
path: root/tests/lexers/nasm
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2021-01-18 21:24:00 +0100
committerGeorg Brandl <georg@python.org>2021-01-18 22:08:36 +0100
commit2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch)
tree809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/nasm
parentf0445be718da83541ea3401aad882f3937147263 (diff)
downloadpygments-git-examplefiles.tar.gz
Move test_examplefiles to new tests/lexers scheme.examplefiles
Diffstat (limited to 'tests/lexers/nasm')
-rw-r--r--tests/lexers/nasm/example.txt688
-rw-r--r--tests/lexers/nasm/example2.txt178
2 files changed, 866 insertions, 0 deletions
diff --git a/tests/lexers/nasm/example.txt b/tests/lexers/nasm/example.txt
new file mode 100644
index 00000000..99f936d0
--- /dev/null
+++ b/tests/lexers/nasm/example.txt
@@ -0,0 +1,688 @@
+---input---
+; test source file for assembling to NetBSD/FreeBSD a.out shared library
+; build with:
+; nasm -f aoutb aoutso.asm
+; ld -Bshareable -o aoutso.so aoutso.o
+; test with:
+; cc -o aoutso aouttest.c aoutso.so
+; ./aoutso
+
+; This file should test the following:
+; [1] Define and export a global text-section symbol
+; [2] Define and export a global data-section symbol
+; [3] Define and export a global BSS-section symbol
+; [4] Define a non-global text-section symbol
+; [5] Define a non-global data-section symbol
+; [6] Define a non-global BSS-section symbol
+; [7] Define a COMMON symbol
+; [8] Define a NASM local label
+; [9] Reference a NASM local label
+; [10] Import an external symbol
+; [11] Make a PC-relative call to an external symbol
+; [12] Reference a text-section symbol in the text section
+; [13] Reference a data-section symbol in the text section
+; [14] Reference a BSS-section symbol in the text section
+; [15] Reference a text-section symbol in the data section
+; [16] Reference a data-section symbol in the data section
+; [17] Reference a BSS-section symbol in the data section
+
+ BITS 32
+ EXTERN __GLOBAL_OFFSET_TABLE_
+ GLOBAL _lrotate:function ; [1]
+ GLOBAL _greet:function ; [1]
+ GLOBAL _asmstr:data _asmstr.end-_asmstr ; [2]
+ GLOBAL _textptr:data 4 ; [2]
+ GLOBAL _selfptr:data 4 ; [2]
+ GLOBAL _integer:data 4 ; [3]
+ EXTERN _printf ; [10]
+ COMMON _commvar 4 ; [7]
+
+ SECTION .text
+
+; prototype: long lrotate(long x, int num);
+_lrotate: ; [1]
+ push ebp
+ mov ebp,esp
+ mov eax,[ebp+8]
+ mov ecx,[ebp+12]
+.label rol eax,1 ; [4] [8]
+ loop .label ; [9] [12]
+ mov esp,ebp
+ pop ebp
+ ret
+
+; prototype: void greet(void);
+_greet push ebx ; we'll use EBX for GOT, so save it
+ call .getgot
+.getgot: pop ebx
+ add ebx,__GLOBAL_OFFSET_TABLE_ + $$ - .getgot wrt ..gotpc
+ mov eax,[ebx+_integer wrt ..got] ; [14]
+ mov eax,[eax]
+ inc eax
+ mov [ebx+localint wrt ..gotoff],eax ; [14]
+ mov eax,[ebx+_commvar wrt ..got]
+ push dword [eax]
+ mov eax,[ebx+localptr wrt ..gotoff] ; [13]
+ push dword [eax]
+ mov eax,[ebx+_integer wrt ..got] ; [1] [14]
+ push dword [eax]
+ lea eax,[ebx+_printfstr wrt ..gotoff]
+ push eax ; [13]
+ call _printf wrt ..plt ; [11]
+ add esp,16
+ pop ebx
+ ret
+
+ SECTION .data
+
+; a string
+_asmstr db 'hello, world', 0 ; [2]
+.end
+
+; a string for Printf
+_printfstr db "integer==%d, localint==%d, commvar=%d"
+ db 10, 0
+
+; some pointers
+localptr dd localint ; [5] [17]
+_textptr dd _greet wrt ..sym ; [15]
+_selfptr dd _selfptr wrt ..sym ; [16]
+
+ SECTION .bss
+
+; an integer
+_integer resd 1 ; [3]
+
+; a local integer
+localint resd 1 ; [6]
+
+---tokens---
+'; test source file for assembling to NetBSD/FreeBSD a.out shared library' Comment.Single
+'\n' Text
+
+'; build with:' Comment.Single
+'\n' Text
+
+'; nasm -f aoutb aoutso.asm' Comment.Single
+'\n' Text
+
+'; ld -Bshareable -o aoutso.so aoutso.o' Comment.Single
+'\n' Text
+
+'; test with:' Comment.Single
+'\n' Text
+
+'; cc -o aoutso aouttest.c aoutso.so' Comment.Single
+'\n' Text
+
+'; ./aoutso' Comment.Single
+'\n' Text
+
+'\n' Text
+
+'; This file should test the following:' Comment.Single
+'\n' Text
+
+'; [1] Define and export a global text-section symbol' Comment.Single
+'\n' Text
+
+'; [2] Define and export a global data-section symbol' Comment.Single
+'\n' Text
+
+'; [3] Define and export a global BSS-section symbol' Comment.Single
+'\n' Text
+
+'; [4] Define a non-global text-section symbol' Comment.Single
+'\n' Text
+
+'; [5] Define a non-global data-section symbol' Comment.Single
+'\n' Text
+
+'; [6] Define a non-global BSS-section symbol' Comment.Single
+'\n' Text
+
+'; [7] Define a COMMON symbol' Comment.Single
+'\n' Text
+
+'; [8] Define a NASM local label' Comment.Single
+'\n' Text
+
+'; [9] Reference a NASM local label' Comment.Single
+'\n' Text
+
+'; [10] Import an external symbol' Comment.Single
+'\n' Text
+
+'; [11] Make a PC-relative call to an external symbol' Comment.Single
+'\n' Text
+
+'; [12] Reference a text-section symbol in the text section' Comment.Single
+'\n' Text
+
+'; [13] Reference a data-section symbol in the text section' Comment.Single
+'\n' Text
+
+'; [14] Reference a BSS-section symbol in the text section' Comment.Single
+'\n' Text
+
+'; [15] Reference a text-section symbol in the data section' Comment.Single
+'\n' Text
+
+'; [16] Reference a data-section symbol in the data section' Comment.Single
+'\n' Text
+
+'; [17] Reference a BSS-section symbol in the data section' Comment.Single
+'\n' Text
+
+'\n' Text
+
+'\t ' Text
+'BITS ' Keyword
+'32' Literal.Number.Integer
+'\n' Text
+
+'\t ' Text
+'EXTERN ' Keyword
+'__GLOBAL_OFFSET_TABLE_' Name.Variable
+'\n' Text
+
+'\t ' Text
+'GLOBAL ' Keyword
+'_lrotate' Name.Variable
+':' Punctuation
+'function' Name.Variable
+' ' Text
+'; [1]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'GLOBAL ' Keyword
+'_greet' Name.Variable
+':' Punctuation
+'function' Name.Variable
+' ' Text
+'; [1]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'GLOBAL ' Keyword
+'_asmstr' Name.Variable
+':' Punctuation
+'data' Name.Variable
+' ' Text
+'_asmstr.end' Name.Variable
+'-' Operator
+'_asmstr' Name.Variable
+' ' Text
+'; [2]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'GLOBAL ' Keyword
+'_textptr' Name.Variable
+':' Punctuation
+'data' Name.Variable
+' ' Text
+'4' Literal.Number.Integer
+' ' Text
+'; [2]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'GLOBAL ' Keyword
+'_selfptr' Name.Variable
+':' Punctuation
+'data' Name.Variable
+' ' Text
+'4' Literal.Number.Integer
+' ' Text
+'; [2]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'GLOBAL ' Keyword
+'_integer' Name.Variable
+':' Punctuation
+'data' Name.Variable
+' ' Text
+'4' Literal.Number.Integer
+' ' Text
+'; [3]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'EXTERN ' Keyword
+'_printf' Name.Variable
+'\t' Text
+'; [10]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'COMMON ' Keyword
+'_commvar' Name.Variable
+' ' Text
+'4' Literal.Number.Integer
+'\t' Text
+'; [7]' Comment.Single
+'\n\n' Text
+
+'\t ' Text
+'SECTION ' Keyword
+'.text' Name.Variable
+'\n\n' Text
+
+'; prototype: long lrotate(long x, int num);' Comment.Single
+'\n' Text
+
+'_lrotate:' Name.Label
+'\t\t\t' Text
+'; [1]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'push' Name.Function
+' ' Text
+'ebp' Name.Builtin
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'ebp' Name.Builtin
+',' Punctuation
+'esp' Name.Builtin
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'eax' Name.Builtin
+',[' Punctuation
+'ebp' Name.Builtin
+'+' Operator
+'8' Literal.Number.Integer
+']' Punctuation
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'ecx' Name.Builtin
+',[' Punctuation
+'ebp' Name.Builtin
+'+' Operator
+'12' Literal.Number.Integer
+']' Punctuation
+'\n' Text
+
+'.label' Name.Function
+'\t ' Text
+'rol' Name.Variable
+' ' Text
+'eax' Name.Builtin
+',' Punctuation
+'1' Literal.Number.Integer
+'\t\t' Text
+'; [4] [8]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'loop' Name.Function
+' ' Text
+'.label' Name.Variable
+'\t\t' Text
+'; [9] [12]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'esp' Name.Builtin
+',' Punctuation
+'ebp' Name.Builtin
+'\n' Text
+
+'\t ' Text
+'pop' Name.Function
+' ' Text
+'ebp' Name.Builtin
+'\n' Text
+
+'\t ' Text
+'ret' Name.Function
+'\n\n' Text
+
+'; prototype: void greet(void);' Comment.Single
+'\n' Text
+
+'_greet' Name.Function
+'\t ' Text
+'push' Name.Variable
+' ' Text
+'ebx' Name.Builtin
+'\t\t' Text
+"; we'll use EBX for GOT, so save it" Comment.Single
+'\n' Text
+
+'\t ' Text
+'call' Name.Function
+' ' Text
+'.getgot' Name.Variable
+'\n' Text
+
+'.getgot:' Name.Label
+' ' Text
+'pop' Name.Function
+' ' Text
+'ebx' Name.Builtin
+'\n' Text
+
+'\t ' Text
+'add' Name.Function
+' ' Text
+'ebx' Name.Builtin
+',' Punctuation
+'__GLOBAL_OFFSET_TABLE_' Name.Variable
+' ' Text
+'+' Operator
+' ' Text
+'$$' Keyword.Constant
+' ' Text
+'-' Operator
+' ' Text
+'.getgot' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..gotpc' Name.Variable
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'eax' Name.Builtin
+',[' Punctuation
+'ebx' Name.Builtin
+'+' Operator
+'_integer' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..got' Name.Variable
+']' Punctuation
+' ' Text
+'; [14]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'eax' Name.Builtin
+',[' Punctuation
+'eax' Name.Builtin
+']' Punctuation
+'\n' Text
+
+'\t ' Text
+'inc' Name.Function
+' ' Text
+'eax' Name.Builtin
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'[' Punctuation
+'ebx' Name.Builtin
+'+' Operator
+'localint' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..gotoff' Name.Variable
+'],' Punctuation
+'eax' Name.Builtin
+' ' Text
+'; [14]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'eax' Name.Builtin
+',[' Punctuation
+'ebx' Name.Builtin
+'+' Operator
+'_commvar' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..got' Name.Variable
+']' Punctuation
+'\n' Text
+
+'\t ' Text
+'push' Name.Function
+' ' Text
+'dword' Keyword.Type
+' ' Text
+'[' Punctuation
+'eax' Name.Builtin
+']' Punctuation
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'eax' Name.Builtin
+',[' Punctuation
+'ebx' Name.Builtin
+'+' Operator
+'localptr' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..gotoff' Name.Variable
+']' Punctuation
+' ' Text
+'; [13]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'push' Name.Function
+' ' Text
+'dword' Keyword.Type
+' ' Text
+'[' Punctuation
+'eax' Name.Builtin
+']' Punctuation
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'eax' Name.Builtin
+',[' Punctuation
+'ebx' Name.Builtin
+'+' Operator
+'_integer' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..got' Name.Variable
+']' Punctuation
+' ' Text
+'; [1] [14]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'push' Name.Function
+' ' Text
+'dword' Keyword.Type
+' ' Text
+'[' Punctuation
+'eax' Name.Builtin
+']' Punctuation
+'\n' Text
+
+'\t ' Text
+'lea' Name.Function
+' ' Text
+'eax' Name.Builtin
+',[' Punctuation
+'ebx' Name.Builtin
+'+' Operator
+'_printfstr' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..gotoff' Name.Variable
+']' Punctuation
+'\n' Text
+
+'\t ' Text
+'push' Name.Function
+' ' Text
+'eax' Name.Builtin
+'\t\t' Text
+'; [13]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'call' Name.Function
+' ' Text
+'_printf' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..plt' Name.Variable
+' ' Text
+'; [11]' Comment.Single
+'\n' Text
+
+'\t ' Text
+'add' Name.Function
+' ' Text
+'esp' Name.Builtin
+',' Punctuation
+'16' Literal.Number.Integer
+'\n' Text
+
+'\t ' Text
+'pop' Name.Function
+' ' Text
+'ebx' Name.Builtin
+'\n' Text
+
+'\t ' Text
+'ret' Name.Function
+'\n\n' Text
+
+'\t ' Text
+'SECTION ' Keyword
+'.data' Name.Variable
+'\n\n' Text
+
+'; a string' Comment.Single
+'\n' Text
+
+'_asmstr' Name.Function
+'\t ' Text
+'db' Name.Variable
+' ' Text
+"'hello, world'" Literal.String
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+'\t' Text
+'; [2]' Comment.Single
+'\n' Text
+
+'.end' Name.Function
+'\n\n' Text
+
+'; a string for Printf' Comment.Single
+'\n' Text
+
+'_printfstr' Name.Function
+' ' Text
+'db' Name.Variable
+' ' Text
+'"integer==%d, localint==%d, commvar=%d"' Literal.String
+'\n' Text
+
+'\t ' Text
+'db' Keyword.Declaration
+' ' Text
+'10' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'0' Literal.Number.Integer
+'\n\n' Text
+
+'; some pointers' Comment.Single
+'\n' Text
+
+'localptr' Name.Function
+' ' Text
+'dd' Name.Variable
+' ' Text
+'localint' Name.Variable
+'\t\t' Text
+'; [5] [17]' Comment.Single
+'\n' Text
+
+'_textptr' Name.Function
+' ' Text
+'dd' Name.Variable
+' ' Text
+'_greet' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..sym' Name.Variable
+'\t' Text
+'; [15]' Comment.Single
+'\n' Text
+
+'_selfptr' Name.Function
+' ' Text
+'dd' Name.Variable
+' ' Text
+'_selfptr' Name.Variable
+' ' Text
+'wrt' Operator.Word
+' ' Text
+'..sym' Name.Variable
+'\t' Text
+'; [16]' Comment.Single
+'\n\n' Text
+
+'\t ' Text
+'SECTION ' Keyword
+'.bss' Name.Variable
+'\n\n' Text
+
+'; an integer' Comment.Single
+'\n' Text
+
+'_integer' Name.Function
+' ' Text
+'resd' Name.Variable
+' ' Text
+'1' Literal.Number.Integer
+'\t\t' Text
+'; [3]' Comment.Single
+'\n\n' Text
+
+'; a local integer' Comment.Single
+'\n' Text
+
+'localint' Name.Function
+' ' Text
+'resd' Name.Variable
+' ' Text
+'1' Literal.Number.Integer
+'\t\t' Text
+'; [6]' Comment.Single
+'\n' Text
diff --git a/tests/lexers/nasm/example2.txt b/tests/lexers/nasm/example2.txt
new file mode 100644
index 00000000..14e9e0c7
--- /dev/null
+++ b/tests/lexers/nasm/example2.txt
@@ -0,0 +1,178 @@
+---input---
+; Demonstration of how to write an entire .EXE format program as a .OBJ
+; file to be linked. Tested with the VAL free linker.
+; To build:
+; nasm -fobj objexe.asm
+; val objexe.obj,objexe.exe;
+; To test:
+; objexe
+; (should print `hello, world')
+
+ segment code
+
+..start: mov ax,data
+ mov ds,ax
+ mov ax,stack
+ mov ss,ax
+ mov sp,stacktop
+
+ mov dx,hello
+ mov ah,9
+ int 0x21
+
+ mov ax,0x4c00
+ int 0x21
+
+ segment data
+hello: db 'hello, world', 13, 10, '$'
+
+ segment stack stack
+ resb 64
+stacktop:
+
+---tokens---
+'; Demonstration of how to write an entire .EXE format program as a .OBJ' Comment.Single
+'\n' Text
+
+'; file to be linked. Tested with the VAL free linker.' Comment.Single
+'\n' Text
+
+'; To build:' Comment.Single
+'\n' Text
+
+'; nasm -fobj objexe.asm' Comment.Single
+'\n' Text
+
+'; val objexe.obj,objexe.exe;' Comment.Single
+'\n' Text
+
+'; To test:' Comment.Single
+'\n' Text
+
+'; objexe' Comment.Single
+'\n' Text
+
+"; (should print `hello, world')" Comment.Single
+'\n' Text
+
+'\t ' Text
+'\n' Text
+
+'\t ' Text
+'segment ' Keyword
+'code' Name.Variable
+'\n\n' Text
+
+'..start:' Name.Label
+' ' Text
+'mov' Name.Function
+' ' Text
+'ax' Name.Builtin
+',' Punctuation
+'data' Name.Variable
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'ds' Name.Builtin
+',' Punctuation
+'ax' Name.Builtin
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'ax' Name.Builtin
+',' Punctuation
+'stack' Name.Variable
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'ss' Name.Builtin
+',' Punctuation
+'ax' Name.Builtin
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'sp' Name.Builtin
+',' Punctuation
+'stacktop' Name.Variable
+'\n\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'dx' Name.Builtin
+',' Punctuation
+'hello' Name.Variable
+'\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'ah' Name.Builtin
+',' Punctuation
+'9' Literal.Number.Integer
+'\n' Text
+
+'\t ' Text
+'int' Name.Function
+' ' Text
+'0x21' Literal.Number.Hex
+'\n\n' Text
+
+'\t ' Text
+'mov' Name.Function
+' ' Text
+'ax' Name.Builtin
+',' Punctuation
+'0x4c00' Literal.Number.Hex
+'\n' Text
+
+'\t ' Text
+'int' Name.Function
+' ' Text
+'0x21' Literal.Number.Hex
+'\n\n' Text
+
+'\t ' Text
+'segment ' Keyword
+'data' Name.Variable
+'\n' Text
+
+'hello:' Name.Label
+'\t ' Text
+'db' Keyword.Declaration
+' ' Text
+"'hello, world'" Literal.String
+',' Punctuation
+' ' Text
+'13' Literal.Number.Integer
+',' Punctuation
+' ' Text
+'10' Literal.Number.Integer
+',' Punctuation
+' ' Text
+"'$'" Literal.String
+'\n\n' Text
+
+'\t ' Text
+'segment ' Keyword
+'stack' Name.Variable
+' ' Text
+'stack' Name.Variable
+'\n' Text
+
+'\t ' Text
+'resb' Keyword.Declaration
+' ' Text
+'64' Literal.Number.Integer
+'\n' Text
+
+'stacktop:' Name.Label
+'\n' Text