ASMM
Assembly Macros, or ASMM (pronounced a-zum-em) for short, is a low level programming languange by Chillaxe on 28 February 2025. Its main function is to serve as a stepping stone between C and x86 Assembly. As of now, it is a work in progress, and contains a few basic functions.
Paradigm
ASMM requires in-depth knowledge of the computer, though some operations and functions are abstracted and sped up, hence the name. ASMM works in 32-bit and has 4 registers: eax
, ebx
, ecx
, and edx
. These 4 registers are what the CPU has access to at all times and are how you supply function properties. For instance, if you want to call writecon()
, then you would do eax = &character(uint);
. In this instance, =
would be equivalent to mov
in x86 Assembly. Types are specified by appending the value with a type name surrounded by brackets.
Operations
ASMM has a few operations;
&>>
shifts the location of the variable in memory by the second operand.=
duplicates a value from one variable or register in the case of set values, to the location of the first variable or register.+
adds the first operand to the second operand.
WIP
Types
ASMM has a few types, including:
byte
ubyte
str
short
ushort
int
uint
float
Programs
Hello World:
use "stdout.a"; data CoolStr[32] = "Hello World"(str) &>> 32(uint); block PrintCool { data string[32] = *(eax)(str) &>> 65(uint); data itarget[1] = (&string + 31)(uint) &>> 66(uint); for(data i[1] = &string(uint) &>> 64(uint); i < itarget) { eax = (string + i)(uint); ex writecon; eax = &string(uint); i += 1(uint); }; }; start { eax = 256(uint); ex palloc; eax = &CoolStr(uint); ex PrintCool; eax = 0(uint); ex return; };