[Oberon] ARM Oberon Code Generation (was PO.Computer documentation)

Chris Burrows chris at cfbsoftware.com
Sat Apr 26 06:45:06 CEST 2014

> -----Original Message-----
> From: eas lab [mailto:lab.eas at gmail.com]
> Sent: Saturday, 26 April 2014 12:41 PM
> To: chris at cfbsoftware.com; ETH Oberon and related systems
> Subject: Re: [Oberon] ARM Oberon Code (was: PO.Computer documentation)
> ...
> can you confirm IF the following bytes match the source:
> ...
> Out.Real(a*b, 12); Out.Ln; 
> ...
> eb 00 01 04   BL 468H
> eb 00 01 08   BL 47cH
> ?BL sounds like branchOnLess; but HelloWorld has no decisions?

BL is 'Branch with Link' (BLT is 'Branch Less Than'). 

BL is the ARM instruction used to call a procedure. There are two BL instructions for the above snippet - one for each call to an 'Out' procedure. 

A list of these instructions is in the 'ARM and Thumb-2 Instruction Set Quick Reference Card' which you can download from:


Detailed explanations of the ARM code sequences that are generated by Oberon-07 statements are included in Niklaus Wirth's 2007 paper: 'An Oberon Compiler for the ARM Processor'. You can download a copy of that document from:


NOTE: The document describes Wirth's ARM Oberon-07 compiler that was the immediate predecessor to his FPGA RISC compiler used in Project Oberon. There will be some differences from the instruction sequences generated by the ARM Oberon-2 compiler (a port of Regis Crelier's OP2 compiler?) that you are running on the Raspberry Pi.


Chris Burrows
CFB Software

More information about the Oberon mailing list