One of the huge advantages of Flat Assemblers over other assemblers for the Intel platform is its macro engine. In addition to being able to perform its original task--substituting macro instructions with their definitions--it is able to perform relatively complex computations, and I would dare to call it an additional programming language. The preceding examples only utilize a tiny fraction of what FASM's macro processor is capable of. While we only used a set of if clauses and a variable, we may, in necessary cases, use loops (with while or repeat statements). For example, imagine a string of characters that you want to keep encrypted:
my_string db 'This string will be encrypted',0x0d, 0x0a, 0x00
my_string_len = $ - my_string
Here, my_string_len is the length of the string.
$ is a special symbol denoting the current...