Skip to content

Latest commit

 

History

History
 
 

misc-EmojiiVM

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Misc - EmojiiVM

See part 1 for VM description.

The goal here is to write out a multiplication table. This is a little bit awkward, since even though EmojiVM is a stack-based VM, it lacks certain key primitives like DUP. So we need to keep the algorithm as simple as possible.

First attempt: push the pre-generated result on the stack and use command 0x15 to print it in one go. This works, but it's always a good idea to check the server first: the limit is just 2000 bytes, so this solution won't fit.

Second attempt: store x and y in gptrs and reload them whenever we need them (we're not writing an optimizing compiler after all), use a single loop, use only backward jumps to avoid computing offsets:

x = 1;
y = 1;
do {
   print_decimal(x);
   print_string(" * ");
   print_decimal(y);
   print_string(" = ");
   print_decimal(x * y);
   print_string("\n");
   x += 1;
   if (x < 10) continue;
   x = 1;
   y += 1;
} while (y < 10);

This works, and server gives us the flag.