ABI is an abbreviation for Application Binary Interface. Every processor’s instruction set has an ABI. This allows the developer to write code in the correct format that the processor is designed to accept. The x86-64 ABI document can be found at the following links:
In 2006, there was only YASM that supported both the 32-bit x86 and the 64-bit x86-64 or amd64 instruction set. NASM only supported the 32-bit x86 instruction set. Today, in 2020, NASM also suppports the 64-bit x86-64 instruction set. Both YASM and NASM are
under active development, with YASM being fully cross-platform and working with Visual Studio 2019 as of this update in August 2020. Wherever possible, we have made sure that the programs run under both YASM and NASM.
System calls are made using the syscall instruction on an x86-64 version of GNU/Linux as opposed to using int 0x80 on an x86 version of GNU/Linux.
All programs are in long mode. Depending on the type of GNU/Linux system you use, the list of system calls can be found in /usr/include/asm/unistd_64.h for Debian-based systems or in /usr/include/asm-x86_64/unistd.h for Slackware, etc.
The x86 and x86-64 instruction sets have an instruction called CPUID that tells the program who made the CPU and what features it may have.
We try to get that info using x86-64 assembly in this tutorial.