Advanced Vector Translator — programming language and cross compiler under DOS, GNU/Linux, KolibriOS, Windows and other x86 platforms

Переключиться на Русский

[Details] [Download] [FAQ] [Documentation]

Main window

Type Programming languages, code generators
Written in Lazarus IDE
Operating systems Windows XP/7/8, WINE
System requirements SSE3
Languages English, Russian
First release September 23, 2017
Latest version 0.3.2
Latest release March 28, 2018
Readable data formats AVT source .avt, AVT project .avtproj
Generated data formats fasm source .asm
License GNU GPL 3, GNU LGPL 3

Advanced Vector Translator (abbreviated to AVT) is a high-level programming language and a free (as in «freedom») cross compiler that creates the flat assembler sources. It is generates assembler code of any code length at programmer’s choice: 16-bit, 32-bit and 64-bit. If you select the generation of 64-bit code, then vector data types and operations will be available, as well as entire set of data types and instructions of AVT. Part of code can be written directly in flat assembler, including using the macro engine of flat assembler.

You also need the flat assembler for compile generated sources.

The documentation for the programming language and the compiler can be viewed here.

Important: this project has been abandoned. It will not receive any more updates. Further development of this project is its object-oriented version (only in Russian).



Download Advanced Vector Translator
In this archive you will find the compiler itself, syntax highlighting for AVT and fasm which can be imported into Notepad++ programme and example programmes for each of three code lengths.

AVT sources (use the Lazarus IDE and libraries at link below for compilation)

Common sources (required for compilation, but not localized. License: GNU LGPL version 3)

View all versions


what can i write in avt?

Everything is the same as the flat assembler: programmes for DOS, GNU/Linux, KolibriOS, MacOS, Windows and other x86 platforms, operating system kernels, bootloaders. However, it’s better to write the boot sectors in flat assembler, since their size should not exceed 512 bytes.



Q: Why do we need yvector, zvector, fvector, ultra32 and ultra64 data types if they can not be used?
A: These data types were supposed to be used in CPUs with AVX-512 support. In the object-oriented version of the programming language, the names of vector types are of the form TypeN, where Type is one of the types (byte, short, int, long, float, or double), and N is the number of elements of the vector (2, 4, or 8). Moreover, operations like ++..++, **..** and others with two dots inside have disappeared, since the number of vector elements is now always known.

Q: Why can not I use some kinds of data types when writing 16-bit and 32-bit programmes?
A: Due to the fact that the x86 CPUs do not have a complete set of instructions and registers for their full support. For example, you can not use the long type because all of the general-purpose registers are 32-bit, and the SSE3 instruction set doesn’t have an integer division instruction. The arbitrary-precision arithmetic exists, but it not implemented in AVT.

Q: Why can not I use the int type when writing 16-bit programmes, because all general-purpose registers are 32-bit?
A: This is due to limitations on the size of programme code: it shouldn’t exceed approximately 47 kilobytes. In one 64-kilobyte segment can be placed the programme code, the heap and other data, if it exists. 32-bit instruction are longer by 1 byte than 16-bit instructions, which leads to increase code size, and in 16-bit programme each byte in account.