Emulator for the RASP machines proposed by Cook & Reckow in 1973
Project description
RASP Machines
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
Release history Release notifications | RSS feed
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
File details
Details for the file RASP-Machine-0.1.2.tar.gz
.
File metadata
- Download URL: RASP-Machine-0.1.2.tar.gz
- Upload date:
- Size: 18.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 869a1a28997ff8104bd17787cbd18cc62f0dbd22a9c4e59ff379b639c33f8061 |
|
MD5 | c6e7296127b5ca6a85a2794f07573835 |
|
BLAKE2b-256 | 0ecd80e438805fc9ac78502a31807b351932e8d602e02e077f7a7034f9cd58f8 |
File details
Details for the file RASP_Machine-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: RASP_Machine-0.1.2-py3-none-any.whl
- Upload date:
- Size: 24.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fbcc7290c0236ee1b509dd2c7ccc6314c96e086235621290b0523d6a38e52c11 |
|
MD5 | a47405fa44d7b569436b21ccd38c207a |
|
BLAKE2b-256 | c8820f0a2b8e61fab9ba156a61416dfa47f95247b9c1883641318bcc75734ecd |