Assembliera
		
		
		
		Jump to navigation
		Jump to search
		
Assembliera is designed by Steve Abel. It just like a real ASseMbly Language, but is has more function.
Commands and Syntax
| Assembliera | From | Mean | 
|---|---|---|
| add a, b | ADDition | Add B to A. B can be a constant or a variable, or a register. A must not a constant. | 
| sub a, b | SUBtraction | Subtract B from A. B can be a constant or a variable, or a register. A must not a constant. | 
| mul a, b | MULtiply | Multiply A by B. B can be a constant or a variable, or a register. A must not a constant. | 
| div a, b | DIVision | Divide A by B. B can be a constant or a variable, or a register. A must not a constant. B must not zero. | 
| mod a, b | MODulo | Divide A by B and then return remain. B can be a constant or a variable, or a register. A must not a constant. B must not zero. | 
| pow a, b | POWer | Multiply A by A for B times. B can be a constant or a variable, or a register. A must not a constant. | 
| dis x | DISplay | Display X as a value. X can be a integer or a float. X can be a var/const/reg. | 
| duc x | Display as UniCode | Display X as a Unicode character. X can be a integer or a character(byte or word). X can be a var/const/reg. | 
| def *name, (type), [value] | DEFine | Define a variable with *name as name, (type) as type and [value] as value. *name must be retained. (type) and [value] can be omitted. | 
| asn *var, [value] | ASSigN | Assign *var to [value]. | 
| jmp <label> | JuMP | Jump to label. | 
| loop <label> | LOOP | Repeat the <label> until CX is 0. | 
| inc p | INCrease | Add 1 to P. P must not be a constant. | 
| dec p | DECrease | Same as above, but the operation is reversed. (Subtract 1 from P) | 
| dvr *var | Display VaRiable | Display *var. | 
| dst "str" | Display STring | Display "str". | 
| cmp x, y | CoMPare | Compare X and Y. | 
| jab <label> | Jump if ABove | Jump to <label> if X>Y. There must be a cmp command before it. | 
| jbl <label> | Jump if BeLow | Jump to <label> if X<Y. There must be a cmp command before it. | 
| jeq <label> | Jump if EQual | Jump to <label> if X=Y. There must be a cmp command before it. | 
| jne <label> | Jump if Not Equal | Jump to <label> if X≠Y. There must be a cmp command before it. | 
| jna <label> | Jump if Not Above | Jump to <label> if X≤Y. There must be a cmp command before it. | 
| jnb <label> | Jump if Not Below | Jump to <label> if X≥Y. There must be a cmp command before it. | 
| join | 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 value of buffer as value. | 
| dbfs | Display BuFfer with Space | Display the value of buffer as value. There will be spaces between two value. | 
| dbu | Display Buffer as Unicode | Display the value of buffer as character. | 
| dbus | Display Buffer as Unicode with Space | Display the value of buffer as character. There will be spaces between two value. | 
| mov *reg, x | MOVe | Copy the value of X to *reg. X can be constant, variable or another register. | 
| push *reg | PUSH | Push the value from the register and put in the accumulator. | 
| pop *reg | POP | Pop the value from the accumulator and restore in the register. | 
| qt | QuiT | End program. | 
| inp x | INPut | Prompt for user input and store the result in the X. X must not a constant. | 
| incl [[[lib]]] | INCLude | Imports [[[lib]]] to program. | 
| and x, y | AND | Bitwise AND. Y can be a constant or a variable, or a register. X must not a constant. | 
| or x, y | OR | Bitwise OR. The argument is same as above. | 
| not x | NOT | Bitwise NOT. X must not a constant. | 
| pas | PAuSe | Pauses the program until User input. the prompt of pas command is: Press any key to continue...... | 
| slp x | SLeeP | Pauses the program for X milliseconds. | 
It uses AX, AH, AL, BX, BH, BL, CX, DX, CS, IP, SS, SP, DS, DP, DH, DL, CH, CL, OF, DF, IF, TF, SF, ZF, AF, PF, CF, ES, SI, DI, BP and RGUN, RGDI, RGTR, RGQD, RGQT, RGSX, RGSP, RGOC, RGNN, RGDC, STOR for registers.
STOR is for store any data.
One line comment:
<?COMMENT TEXT?>
Multi line comment:
<??? c o m m e n t t e x t ??>
Sub-program and label:
SubProgramName segment <?your code?> SubProgramName ends LabelName labelseg <?your code?> LabelName endls
The main code must wrapped in main segment and main ends.
Examples
Hello, world!
main segment dst (join "Hello, world!", 13) pas qt main ends
FizzBuzz
main segment
mov CX, 99 <Set the number of cycles to 100.>
mov AX, 1
loopUN labelseg
    mov STOR (mod AX, 3)
    cmp STOR, 0
    je fizz
    mov STOR (mod AX, 5)
    cmp STOR, 0
    je buzz
    non labelseg
        dis AX
    non endls
    duc 13
    inc AX
    fizz labelseg
        dst "Fizz"
    fizz endls
    buzz labelseg
        dst "Buzz"
    buzz endls
loopUN endls
loop loopUN
pas
qt
main ends
Cat Program
main segment def *cat, (str), [NULL] ipt *cat dvr *cat pas brk main ends
Truth Machine
main segment
ipt AX
mov BX, AX
cmp BX, 0
je nope
cmp BX, 1
jnb yes
nope labelseg
    dis AX
    pas
    qt
nope endls
yes labelseg
    dis AX
    jmp yes
yes ebdls
main ends