|Type||Programming languages, code generators|
|Written in||Lazarus IDE|
|Operating systems||Windows XP/7/8, WINE|
|First release||September 23, 2017|
|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.
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.
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
ultra64 data types if they can not be used?
A: These are the AVX-512 data types. They will be introduced in AVT as soon as the CPUs with this instruction set will be widely used. This will happen approximately in 2018—2019.
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.
Common sources (required for compilation, but not localized. License: GNU LGPL version 3)