General information

Course description

The course objectives can be found on the University course catalog:

The notes, references and material covered by the theoretical lessons can be found on Prof. Wolper's pages.


The course takes place every Tuesday during the first quarter at the Montefiore Institute (B28), room R3. The theoretical lessons are programmed from 14:00 to 16:00 and the practical sessions from 16:00 to 18:00.

The students are advised to come with their theoretical lessons material at each practice sessions.


  • Written exam: Open book for the material covered in the four first lectures (up to and including virtual memory), and closed book for the rest of the material covered.
  • Two programming assignments: These have to be completed during the course period (more details in due time).


Date Information and files.
Tutorial 04 Oct. 2016

Tutorial 1: μ-code (ULG01)

Additional material: ULG01 μ-code reference (coloured), support slides

Tutorial 11 Oct. 2016

Tutorial 2: μ-code (ULG01) and β-assembly

Additional material:

Tutorial 18 Oct. 2016 End of Tutorial 2 and Q&A for Project 1.
Tutorial 25 Oct. 2016

Tutorial 3: μ-code (ULG02) - User and supervisor modes, support slides

Tutorial 4: μ-code (ULG03) - Virtual memory, support slides

Erratum (last update: 03/01/17) Two small errors were made in the exercise 2 of tutorial 4. See the correct solutions in this erratum.

Holiday 1 Nov. 2016

All Saints' Day. The course and tutorial are moved on Thursday (14:00) at room R3, B28!

Deadline 1 Nov. 2016, 23:59

Project 1: Quicksort in β-assembly

Statement and source code

Last update 11 Oct. 2016, 11:30

Tutorial 3 Nov. 2016

Tutorial 5: statement, support slides

Tutorial 8 Nov. 2016

Tutorial 6: statement, support slides

Tutorial 15 Nov. 2016

Tutorial 7: statement, support slides

Tutorial 22 Nov. 2016

Tutorial 8: statement, support slides

Tutorial 29 Nov. 2016

Tutorial 9: cache memory, support slides

Tutorial 6 Dec. 2016

Tutorial 10: Parallel programming, support slides

Deadline 19 Dec. 2016, 23:59

Project 2: parallel programming (training an agent with a genetic algorithm)


Last update 23 Nov. 2016, 08:45

You'll find below a little Java program for testing your configuration files.

Tutorial 13 Dec. 2016

Tutorial 11: A performance-oriented β-machine, support slides

Tutorial 20 Dec. 2016

Tutorial 12: A β-machine with 2- and 4-stages pipeline, support slides

Deadline 16 Août 2017, 23:59

All assignments that were not done during the first semester, or for which the obtained marks were not high enough can be done again.

Statements are unchanged:

Project 2

Test your configuration file with CheckFile

The following .jar file is a program enabling you to test your level configuration files.

Simply run the following command java -jar CheckFile.jar and open your configuration file using the ... button. If your file is valid, the configuration will be rendered below. Otherwise, the cause of the error will be described in the Info field.

Program: CheckFile.jar

Example configuration:

CheckFile program:

βSim simulator

βSim is a simulator for the β-assembly language written in Java. It features:

  • An assembler to generate machine code.
  • A debugger featuring instruction per instruction execution, registers, stack and memory visualization.
  • A minimal code editor with error highlighting (when the code is assembled).

The simulator comes as a .jar package you can run in several ways:

  • On modern systems with UI (Windows,...), you can simply double-click on the file.
  • If you prefer using a console, you can run: java -jar bsim-vram.jar.

Because the built-in code editor is minimal, I don't recommend using it for developing programs. For instance, there is no "Undo" nor "Redo" option, so you might lose some work by performing some non-deliberate deletions. It is better to first write your code in another text editor such as NotePad++ or Sublime Text (β-assembly syntax highlighting and snippets, check this forum for installation location), and then load it into the simulator for testing.

Loading and launching code

To execute some code you have written in the simulator, you first have to load this piece of code in the editor. This can be done by clicking on in the upper toolbar and walking through your filesystem for getting the .asm file.

When your code is ready to be executed, the execution can be triggered by clicking on in the upper toolbar. If your code does not contain any syntax error, you will be redirected to the execution window. Otherwise, the syntax error will be described in the bottom of the editor window.


You can indicate to the β-machine you want to pause the execution of your code at a specific instruction by writing the keyword .breakpoint:

    |; Do something
    LD(R1, 0, R5)
    .breakpoint         |; The machine will pause its execution at this step
    ADDC(R5, R2, R6)
    |; ...