-
Notifications
You must be signed in to change notification settings - Fork 7
An ARM Assembler and Simulator/Debugger
License
sipefree/d00ks
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
INTRO d00ks is an ARM assembler and simulator. It currently does not convert instructions to ARM machine code, and runs all instructions symbolically in python. The simulator is not designed for speed, and currently the performance is only suitable for debugging. In the future, LLVM bindings and output to machine code will be possible. USAGE Syntax for the basic debugger: $ ./dasm.py [-e] file.s Options: -e Execute the program immediately without going into step-mode. MODULES The assembler uses PLY as a lexer/parser combo. The simulator uses promise.py to optimize python bytecode where possible. cond.py Has one function for each conditional code in ARM, called by an instruction to determine whether it should execute. dasm.py A command-line based interface to the assembler and debugger. instruction.py Contains classes abstracting most ARM functionality. For example: Register/value accesses Label/value targets Addressing modes Bit-shifting operations Instructions themselves Each instruction is represented by a class, and when an instruction appears in the program code that is being run, an object of that class exists in the simulator. The execute() method is run on that object, passing the program state (registers) as arguments. lexer.py Used by PLY to define with regular expressions each token that will be parsed. memory.py Contains classes representing memory in the ARM system. An object of class Memory is able to perform load and store operations on passed virtual addresses (which are then translated into physical) addresses in the struct representing memory. It supports all ARM load and store operations, i.e. word, halfword, and byte. This file also contains classes representing compile-time memory store operations such as DCB and SPACE. parser.py Contains the yacc-based parser for d00ks. It is formed in a top-down fashion, with more abstract things at the top and the least abstract things at the bottom. Take a look at any instruction's entry for ideas on how to implement a new instruction. Tricky things can be implementing lists of items. Check out how attrlists for AREA directives are implemented. register.py Has a class representing the register state of a program. By proxy it also has a pointer to the Memory instance for the program, and the symbol table (which is available at runtime to the simulator). simulator.py Has a rather simplex class called Program which will run the fetch/decode/execute cycle for the program.
About
An ARM Assembler and Simulator/Debugger
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published