Assemble
Jump to navigation
Jump to search
Assemble is an Esolang designed by PSTF to expand the original Assembly language.
Instructions
Instruction | From | Meaning |
---|---|---|
add <num> | (addition) | Add the number after the instruction to the accumulator. |
sub <num> | (subtract) | Subtract the number after the instruction from the accumulator. |
mul <num> | (multiply) | Multiply the number after the instruction with the result from the accumulator and store the result in the accumulator. |
div <num> | (divide) | Divide the number after the instruction with the result from the accumulator and store the result in the accumulator. |
pow <num> | (power) | Power the number after the instruction (the exponent) with the result from the accumulator (the base) with and store the result in the accumulator. |
mod <num> | (modulo) | Modulo the result from the accumulator by the number after the instruction and store the result in the accumulator. |
dis | (display) | Display the result of the accumulator as a number. |
dvr $<var> | (display variable) | Display the result of the variable(or register). |
dst | (display string) | Display the string. |
das | (display ascii) | Display the result of the accumulator as a ASCII(Unicode) character from the ASCII(Unicode) decimal value. |
dgbk | (display GBK) | Display the result of the accumulator as a GBK character from the GBK decimal value. |
jmp ~<lbl> | (jump) | Jump to the label specified after the instruction. |
jnz ~<lbl> | (jump not zero) | Jump to the label specified after the instruction if the result from the accumulator is not zero. |
jze ~<lbl> | (jump zero) | Jump to the label specified after the instruction if the result from the accumulator is zero. |
jcxz ~<lbl> | (jump if CX is zero) | Jump to the label specified after the instruction if the result from CX is zero. |
jne <num> ~<lbl> | (jump not equal) | Jump to the label specified after the instruction if the result from the accumulator is not equal with the number after the instruction. |
jeq <num> ~<lbl> | (jump equal) | Jump to the label specified after the instruction if the result from the accumulator is equal with the number after the instruction. |
jgr <num> ~<lbl> | (jump greater) | Jump to the label specified after the instruction if the result from the accumulator is greater than the number after the instruction. |
jls <num> ~<lbl> | (jump less) | Jump to the label specified after the instruction if the result from the accumulator is less than the number after the instruction. |
ja <num> ~<lbl> | (jump above) | Jump to the label specified after the instruction if the result from the accumulator is greater than the number after the instruction. |
jb <num> ~<lbl> | (jump below) | Jump to the label specified after the instruction if the result from the accumulator is less than the number after the instruction. |
jle <num> ~<lbl> | (jump less equal) | Jump to the label specified after the instruction if the result from the accumulator is less or equal than the number after the instruction. |
jge <num> ~<lbl> | (jump greater equal) | Jump to the label specified after the instruction if the result from the accumulator is greater or equal than the number after the instruction. |
jin | (join) | Store the result of the accumulator in a buffer. Can be used multiple times, so the results will be chained from left to right, but with a space between the values. |
dbf | (display buffer) | Display the buffer as a string of ASCII characters from the ASCII decimal values. Spaces are removed from the buffer values before displaying. |
dbfws | (display buffer with spaces) | Display the buffer as a series of ASCII characters from the ASCII decimal values. Spaces are kept from the buffer values before displaying. |
dbn | (display buffer number) | Display the buffer as a number. Spaces are removed from the buffer values before displaying. |
dbnws | (display buffer number with spaces) | Display the buffer as a series of numbers. Spaces are kept from the buffer values before displaying. |
cbf | (clear buffer) | Clear the buffer. |
cac | (clear accumulator) | Clear the value from the accumulator and reset to zero. |
rsrg <reg> | (reset register) | Clear the value from the register and reset to zero. |
push <reg> | (push) | Push the value from the register and put in the accumulator. |
pop <reg> | (pop) | Pop the value from the accumulator and put in the register. |
mov <reg> <reg2> | (move) | Copy the value from the input register and put in the output register. |
slp <msec> | (sleep) | Pause execution for the amount of milliseconds after the instruction. |
pau | (pause) | Pause execution until the next keystroke. |
brk | (break) | Quit the execution of the program. |
ipt $<var> | (input) | Prompt for user input and store the result in the variable. |
psv $<var> | (push variable) | Push the value from the variable and put in the accumulator. |
pov $<var> | (pop variable) | Pop the value from the accumulator and put in the variable. |
nop | (no operation) | Do nothing. |
and $<var> *<const> | (and) | Bitwise AND. |
or $<var> *<const> | (or) | Bitwise OR. |
inc $<var> | (increase) | Set the value of var to var+1. |
dec $<var> | (decrease) | Set the value of var to var-1. |
You can use all default registers, and the reg01, reg02, and so on.
Other syntax
To introduce a comment, you may write this code:
<-- This is a comment. --> mov ax, 4 mov bx, ax mov cx, 3 mov bx, bx + cx dvr bx <-- This instruction prints the value of ax + cx. --> <""" You may also writes some document comment or comment block in your code. """>
To define a variable, you may write this code:
$a "Nope." <-- This instruction defines a variable a and assign it to "Nope.".
To define a label, you may write this code:
%label% $t NULL mov t, 5 mov t, t * 6 psv t jeq 30 ~label2 %label2% dst "Successfully transferred from label to label2." pau brk
Example
Hello, world!
dst "Hello, world!" pau brk
Cat
$st "" ipt st dvr st pas brk
Judge a number is even or odd
$a 0 ipt a mov ax, a push ax jmp ~even %even% mod 2 jze ~yes jnz ~nope %yes% dst "Even" jmp ~end %nope% dst "Odd" jmp ~end %end% pau brk