full screenshot

VisUAL has been developed as a cross-platform tool to make learning ARM Assembly language easier. In addition to emulating a subset of the ARM UAL instruction set, it provides visualisations of key concepts unique to assembly language programming and therefore helps make programming ARM assembly more accessible.

It has been designed specifically to use as a teaching tool for the Introduction to Computer Architecture course taught at the Department of Electrical and Electronic Engineering of Imperial College London.

navigate program history pointer visualisation shift visualisation memory access visualisation stack visualisation branch visualisation subroutine visualisation error correction suggestions infinite loop detection headless emulation mode

Key Features

Navigate Program History

In addition to stepping through code, users can navigate program history by browsing past register values. This feature can help debugging and understanding complex code easier.

history browsing

Pointer Visualisation

Pointers in ARM assembly can be quite difficult to understand, especially since ARM assembly has 9 different variations of pointer behaviour when it comes to load/store instructions. VisUAL provides an information pane that displays useful pointer information when needed.

pointer visualisation

Shift Operation Visualisation

VisUAL can demonstrate shift operations by playing them as animations. The animations use actual data values from the shift instruction being demonstrated.

Memory Access Visualisation

All memory access operations, word-aligned or byte-aligned, can be visualised. Base and offset addresses are shown, and any values that have been changed are highlighted.

memory visualisation

Stack Visualisation

Instructions to load/store multiple instructions in the form of a stack can be visualised. Stack behaviour is described, and the stack as well as stack pointer at the start and end of the stack are displayed.

stack visualisation

Branch Visualisation

Colour coded line highlights are used to indicate when a branch is being taken. For conditional instructions, status bits involved in condition checking are highlighted. An arrow points to the branch destination, acting as a visual cue to indicate a branch to another line of code is about to take place.

branch visualisation

Subroutine Visualisation

Whenever the link register is set to enter a subroutine, the linked subroutine return point will be highlighted and will remain highlighted until the subroutine exits.

subroutine visualisation

Error Correction Suggestions

As opposed to providing cryptic compiler error messages, VisUAL provides context-specific error messages with explanations of exactly what is expected. In addition, whenever a runtime error occurs, the user is informed of the problematic instruction and what operation in the instruction resulted in the error.

syntax error runtime error

Infinite Loop Detection

Inadvertently typed code that may result in an infinite loop can cause code to malfunction. VisUAL detects possible infinte loops and prompts the user to select the appropriate response.

branch visualisation

View Memory Contents

By using the view memory contents window, data defined in memory can be monitored in real-time as it changes. This allows fast debugging of memory access instructions from a static viewpoint in addition to the dynamic viewpoint provided by the pointer and memory access visualisations.

memory contents window

View Symbols

The symbols window provides a list of all code and data symbols that have been defined. This provides an easy method of lookup up symbols during execution.

view symbols window

Headless Emulation Mode

VisUAL allows assembly code to be executed via the command line and logs the program state to an XML file. This is useful for power users for testing large batches of code. See the logging guide for details on how to use this.