Pyssembly allows to execute pseudo assembly code and it is meant for teaching purposes.
Project description
Pyssembly
A python assembly emulator.
This tool allows to execute pseudo assembly code and it is meant for teaching purposes.
Install
python -m pip install pyssembly
Usage
python -m pyssembly <code.pys>
Examples
Lots of examples are available in the examples
folder.
Print the result of 137 * 2322:
- create file
multiplication.pys
containing:
mov a 137
mul a 2322
out a "\n"
- run it with:
python -m pyssembly multiplication.pys
- result:
318114
Read 2 numbers from stdin and return average:
- create file
average.pys
containing:
in a "First number: "
in b "Second number: "
int a a
int b b
mov avg a
add avg b
div avg 2
out "The average between " a
out " and " b
out " is: " avg
out "\n" null
- run it with:
python -m pyssembly average.pys
- result:
First number: 26
Second number: 17
The average between 26 and 17 is: 21.5
Pseudo assembly
The language that pyssembly is able to execute is a pseudo assembly. All instructions have the form:
<instruction> <operand a> <operand b>
All instructions that return a result, store such result in the first operand (a).
Comments
To comment a line write ';' at the beginning. For example:
;this is a comment
Labels
To label a line, to use it as destination in a jmp statement, simply write a single word in the line. For example:
this-is-a-label
Null
The null value is simply the keyword null
. Like so:
out "Hello world" null
Arrays
Arrays are accessed using the []
sintax. For example:
mov arr[0] 6
Arrays are actually dictionaries and anything can be a key.
Instruction set
General
mov a b
: store b into ajmp a b
: if a, jump to b (b can be a label or a line number)in a b
: print b to stdout, read string from stdin, store it into aout a b
: print a and b to stdout
Conversions
bool a b
: boolean(b)int a b
: integer(b)flt a b
: float(b)str a b
: string(b)
Math
add a b
: a + bsub a b
: a - bmul a b
: a * bdiv a b
: a / bpow a b
: ablog a b
: logbaroot a b
: a1/bidiv a b
: a // bmod a b
: a % b
Random
rnd a b
: generate random float, a<=rf<=birnd a b
: generate random integer, a<=ri<=b
Trigonometry
sin a b
: sin(b)cos a b
: cos(b)tan a b
: tan(b)asin a b
: asin(b)acos a b
: acos(b)atan a b
: atan(b)atan2 a b
: atan2(a, b)
Boolean
eq a b
: a == bneq a b
: a != bles a b
: a < bleq a b
: a <= bgrt a b
: a > bgeq a b
: a >= bnot a b
: not band a b
: a and bor a b
: a or bxor a b
: a xor bnand a b
: a nand bnor a b
: a nor bnxor a b
: a nxor b
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pyssembly-1.0.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f6090a9ce637a12cbc2d4820fd320c993b342357e2924a88908b1b7c4e758741 |
|
MD5 | df1d04e269d67ef3a0bcfd36808a401c |
|
BLAKE2b-256 | 4224983652ce1b5246e2a8cf3321efeb921c7f12802aab7c61c422c55c986cd8 |