Skip to content
This repository has been archived by the owner on May 15, 2021. It is now read-only.

CQU-AI/pymips

Repository files navigation

MIPS-Simulator

Code quality Travis-CI GitHub_release PyPI Downloads

Introduction

MIPS-Simulator runs MIPS32 programs. Unlike real simulator, which assembles the instructions into machine code and executes them, MIPS-Simulator just parse the instructions and runs them using python code. In other words, MIPS-simulator actually interprets mips instructions.

https://raw.githubusercontent.com/CQU-AI/pymips/master/example.png

Note

  • This project is a toy, which means some functions are not supported.
  • If you just need an IDE for MIPS Programming, I personally recommend MARS by Softpedia Lab, Missouri State University.
  • If you also want to play with this toy, feel free to do want ever you want but don't forget about the CI tests.

Install

  • With pip : pip3 install fengyong
  • With src : Clone or fork this project, then build it with python3 setup.py install

Usage

Shell

After install, you can run a mips shell with mips-shell command.

Assemble

from fengyong import Assembler

instructions = """
j 10000
add $s0,$a1,$t7
sw $s1,10($s2)"""

machine_code = Assembler.encode(instructions)
print(machine_code.bin)
print(machine_code.value_base(16))

DisAssemble

from fengyong import DisAssembler
from fengyong import RegData

machine_code = RegData("0x8002710af820ae51000a")
instructions = DisAssembler.decode(machine_code)
print(instructions)

Simulate - RUN!

from fengyong import Simulator


# Run mips instruction in line
Simulator.run_line("addi $s0, $s1, 10")

# Run asm file
Simulator.run_file("../test/drings.asm")

Simulate - Debug

from fengyong import Registers
from fengyong import RegData


# Set the register data
Registers.reg_set("$s0",RegData(100))

# Get the register data
res = Registers.reg_get("$s0")

# print all the "s" registers
Registers.print("s")

# print all registers
Registers.print()

Example

Contributing

Read CONTRIBUTING for more information.