ASMM

From Esolang
Jump to navigation Jump to search

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;
};