Skip to main content

Emulator for the RASP machines proposed by Cook & Reckow in 1973

Project description

RASP Machines

last release on PyPI License Build status Code coverage Code quality Downloads

This is a small Python 3 emulator for the random access stored procedure machine (RASP) designed by Cook & Reckhow in 1973 below. I developed this as a companion tool for a course in algorithms & data structures, where it helps (I hope) to with understanding computation models, growth orders and the applicability of the Big-O notation.

  • Cook, Stephen A., and Robert A. Reckhow. "Time bounded random access machines." Journal of Computer and System Sciences 7, no. 4 (1973): 354–375. DOI

In a nutshell, the RASP machine is a mini computer with eight instructions, two registers (an accumulator and instruction pointer), and an I/O device. As a computation model, it closely resembles an actual computer, as opposed to a Turing machine for instance.

How to install RASP?

The simplest way to install the latest version is to use PyPI as follows:

  $ pip install rasp-machine

Please, refer to the documentation for a more comprehensive help!

How to use the RASP machine?

A Simple Program: Adding Two Integers

Let us consider a tiny program for the rasp machine. To simplify writing programs, RASP provides a simple assembly language, as shown below, with the code needed to read two integers from the I/O device and to print their sum back onto it.

segment: data
    left     1       0
    right    1       0
    result   1       0

segment: code
    read     left      ;; left = user_input()
    read     right     ;; right = user_input()
    load     0
    add      left
    add      right
    store    result    ;; result = left + right
    print    result
    halt     -1

Provided we save the code above into a file named addition.asm, we can get the associated machine code, using the following command

$ rasp assemble addition.asm
Machine code saved in 'addition.rx'

Note that the option --debug will yield machine code that contains debugging information, useful when using the debugger.

Debugging & Executing RASP

Now we have the machine code, we can execute it using the following commands:

$ rasp execute addition.rx
rasp? 10
rasp? 20
30

Note that you can extract some performance measure (CPU cycle, read, writes, etc.) using the --use-profiler option.

Should there be any problem with the execution, we can start the associated debugger with the command:

$ rasp debug addition.rx
RASP-Machine 0.1.0
 ┼ debug >

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

RASP-Machine-0.1.2.tar.gz (18.1 kB view hashes)

Uploaded Source

Built Distribution

RASP_Machine-0.1.2-py3-none-any.whl (24.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