Skip to main content

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:
  1. create file multiplication.pys containing:
mov a 137
mul a 2322
out a "\n"
  1. run it with: python -m pyssembly multiplication.pys
  2. result: 318114
Read 2 numbers from stdin and return average:
  1. 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
  1. run it with: python -m pyssembly average.pys
  2. 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 a
  • jmp 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 a
  • out 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 + b
  • sub a b: a - b
  • mul a b: a * b
  • div a b: a / b
  • pow a b: ab
  • log a b: logba
  • root a b: a1/b
  • idiv a b: a // b
  • mod a b: a % b
Random
  • rnd a b: generate random float, a<=rf<=b
  • irnd 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 == b
  • neq a b: a != b
  • les a b: a < b
  • leq a b: a <= b
  • grt a b: a > b
  • geq a b: a >= b
  • not a b: not b
  • and a b: a and b
  • or a b: a or b
  • xor a b: a xor b
  • nand a b: a nand b
  • nor a b: a nor b
  • nxor 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

pyssembly-1.0.5.tar.gz (4.9 kB view hashes)

Uploaded Source

Built Distribution

pyssembly-1.0.5-py3-none-any.whl (4.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page