Table of Contents

 
 Multiasm Project Logo

Project Information

This content was implemented under the following project:

Consortium Partners

 Consortium Partner's Logos

Erasmus+ Disclaimer
This project has been funded with support from the European Commission.
This publication reflects the views only of the author, and the Commission cannot be held responsible for any use which may be made of the information contained therein.

Copyright Notice
This content was created by the MultiASM Consortium 2023–2026.
The content is copyrighted and distributed under CC BY-NC Creative Commons Licence and is free for non-commercial use.

CC BY-NC

In case of commercial use, please get in touch with MultiASM Consortium representative.

Introduction

The art of efficient and compact-code assembler programming is considered to be a crucial skill in the context of many EU initiatives that are targeting to bring back to Europe processor design and manufacturing, as on the low-level it requires engineers aware of low-level programming methods, to correctly design processor architecture and development tools such as e.g. compilers.
Assembler programming is also the one giving the best control over hardware. Assembler programming brings the capability to include only essential code and thus generate compact software that is fast, limits resource use, and is energy efficient.

The document offers a curriculum for studies (see figure below) in the niche of unique skills in low-level programming and computer architectures, which are still urgently needed.
Currently, available digital devices have been classified as contained ones (such as embedded systems, IoT end nodes, smart sensors, etc.), mobiles (including recent notebooks, e.g. Apple and Microsoft, tablets, mobile phones, network equipment and fog class IoT devices) and PCs (all x86-based equipment, including notebooks, desktops and servers).
This split reflects the composition of the curriculum. One common module about computer architectures is for those who do not know the hardware concepts behind the construction of digital devices. Familiarising themselves with those concepts is necessary to understand low-level programming techniques. Further modules are designed to familiarise users with class-specific assembler programming using selected technology.

Each module has a separate syllabus and is composed of topics intended to be studied in the order in which they are presented. Some of those topics can also be used independently to let experienced users catch up with a particular piece of knowledge (topic).

An expected number of ECTS points for each module is presented below (figure 2):

Figure 2: MultiASM Modules

The following section delineates the architecture of the curriculum module in detail.

MultiASM Overview

The MultiASM project delivers comprehensive learning and teaching materials for various stakeholders on low-level assembler programming for:

In addition to the three modules listed above, an introductory module for computer architecture is offered. This module enables inexperienced users to gain the necessary knowledge to understand basic concepts of low-level programming.

The contents are available in a variety of forms:

Figure 3: MultiASM Project Intellectual Outputs

The curriculum can be used as a whole course or a separate technology-related module. Once studied, students will obtain unique knowledge that is crucial for participation in EU-based activities, to bring chip, processor, and MCU design and manufacturing back to Europe. Modules can be used as a closed set of knowledge when studying from scratch or by experienced learners to recall/catch up with particular knowledge using selected topics, e.g. integration of the Assembler code and high-level languages.

Project results are composed of 4 main pillars (intellectual results, see figure below):

We have chosen to implement an ARM lab only, assuming that PC computers are available out of the box for all system users, while IoT and Embedded class devices (e.g. Arduino Uno) are affordable virtually for everyone interested.

Computers Architecture

Study level Bachelor
ECTS credits 2
Study forms Hybrid or fully online
Module aims To give an introductory view of computer construction, architecture and operation.
Pre-requirements Motivation to learn how computers operate.
Learning outcomes After completing this module, the student:
- knows the concept of computer operation
- knows computer architectures
- understands the functionality of processor and computer components and their purpose in the system
- can explain the role of elements of modern computers
Topics 1. Elements of computer: processor, memory, peripherals, interconnections (buses)
2. Principles of computer operation: instruction execution, cycles of operation (clock, machine, instruction cycle), addressing, address space
3. Elements of processors: registers, instruction processor, execution processor
4. Architectures of processors: RISC, CISC, SISD, SIMD, MIMD
5. Architectures of computers: von Neumann (Princeton), Harvard, Mixed, connection of I/O devices (memory mapped, separate)
6. Other features: stack, function call, interrupts, DMA
7. Methods of increasing the efficiency: cache memory, pipeline, super scaling, multithreading, multi-core
Type of assessment Evaluation test
Blended learning Student can attend classes or self-learn with video and reading materials provided.
References to literature 1. John L. Hennessy, David A. Patterson: Computer Architecture: A Quantitative Approach, Elsevier 2017.
2. Arroz Guilherme: Computer Architecture, World Scientific Publishing Co Pte Ltd 2020.
3. Ahmet Bindal: Fundamentals of Computer Architecture and Design, Springer 2019.
4. Miles Murdocca Ph.D., Vincent P. Heuring: Principles of Computer Architecture, Pearson 1999.
Lab equipment
Virtual lab
MOOC course https://multiasm.eu/mooc/course/view.php?id=12

Programming in Assembler for IoT and Embedded Systems

Study level Bachelor
ECTS credits 4
Study forms Hybrid or fully online
Module aims To give detailed description on programming of AVR microcontrollers in assembly language
Pre-requirements Basic knowledge on computer programming, knowledge on microcontrollers architecture including AVR family
Learning outcomes After completing this module, the student:
- knows the instruction set of AVR core
- knows the principles of writing assembler programs for AVR platform
- can write simple assembler program for AVR
Topics - AVR microcontrollers architecture
- addressing modes
- instruction set for AVR RISC core
- assembler programming tools or AVR
- variables, program and data memory location
- procedures, argument passing, functions
Type of assessment Evaluation test
Blended learning Student can attend classes or self-learn with video and reading materials provided.
References to literature 1. Elliot Williams, AVR Programming: Learning to Write Software for Hardware, Make Community, LLC, 2014
2. Panayotis M Papazoglou, An Educational Guide to the AVR Microcontroller Programming: AVR Programming Demystified, Createspace Independent Publishing Platform, 2018
3. Boxall John, Avr Workshop: A Hands-On Introduction with 60 Projects, No Starch Pr, 2022
Lab equipment AVR-based evaluation boards, Arduino boards
Virtual lab https://iot.aei.polsl.pl
MOOC course https://multiasm.eu/mooc/course/view.php?id=13

Programming in Assembler for Mobiles and ARM

Study level Bachelor
ECTS credits 4
Study forms Hybrid
Module aims The aims of this course are to introduce students to programming ARM and Mobile devices in the closest language to computer hardware.
This is about programming at assembly language to form a complete programs or modules for higher level programming languages.
Introduce students to debugging and stepping through assembly instructions while examining processor register values and parts of memory.
This will enable students to apply the concepts learned in this course on any mobile device and ARM devices.
Pre-requirements Basic knowledge on PC computers architecture and programming.
Learning outcomes At the end in successfully completing the course, students will be able to:
1. Enumerate the functional components of an ARM and Mobile devices; explain trade-offs in devices architecture as they relate to cost and function and performance.
2. Create, compile, execute and debug an assembler program
3. Evaluate and use a subroutine library within an assembler program; Explain the basic operation of interrupts and microcode.
4. Design and write syntactically and semantically correct assembler programs that are solutions to problems expressed with algorithms.
This includes high-level language concepts such as variables, data types, repetition, selection, and objects including conditional and looping structures within the assembler program.
5. Convert symbolic assembler code into machine code and convert machine code into symbolic assembler code.
6. Explain Floating-Point architecture and program the Floating-Point co-processor
7. Identify a problem, break it down into its component parts, develop and implement a solution using assembly language
Topics 1. Introduction to ARM Architecture and Assembly Language:
a. Overview of ARM Architecture
b. ARM Assembly Language Basics
c. Development Environments and Tools
2. ARM Assembly Language Programming:
a. Basic Instructions and Operations
b. Control Flow in Assembly
c. Advanced Assembly Programming
d. Peripheral Management
3. Mobile Device Architecture and Assembly Programming
a. Introduction to Mobile Device Architectures
b. Developing Assembly for Mobile Devices
c. Assembly Code optimization
4. Interfacing ARM Assembly with Mobile Development
a. Cross-Platform Development
b. Mobile App Integration
c. Security and Cryptography
Type of assessment Evaluation test
Blended learning On-site or Off-site learning with materials provided.
References to literature Kusswurm, D. (2020). Modern Arm Assembly Language Programming: Covers armv8-A 32-bit, 64-bit, and simd. Apress.
Hohl, W., & Hinds, C. (2015). ARM Assembly Language: Fundamentals and Techniques, Second Edition. CRC Press.
Smith, S. (2019). Raspberry Pi Assembly Language Programming: ARM Processor Coding. Apress.
Lab equipment Raspberry Pi with Debian/Rasbian/Ubuntu Linux installed, with VNC or SSH (or both) access.
Virtual lab n/a
MOOC course https://multiasm.eu/mooc/course/view.php?id=14

Programming in Assembler for PCs

Study level Bachelor
ECTS credits 4
Study forms Hybrid or fully online
Module aims To give detailed description on programming of x86 and x64 microprocessors in assembly language.
Pre-requirements Basic knowledge on PC computers architecture and programming.
Learning outcomes After completing this module, the student:
- knows the instruction set of x86 and x64 processors
- knows the principles of writing assembler programs for x86 and x64 platforms
- understand the rules of calling conventions in modern operating systems
- can write simple assembler program
- can write assembler spftware module for high-level programming language
Topics - x86 and x64 processors architecture
- addressing modes
- instruction set including floating point and vector extensions
- assembler programs, MASM, NASM, directives
- procedures, argument passing, functions
- macros
Type of assessment Evaluation test
Blended learning Student can attend classes or self-learn with video and reading materials provided.
References to literature 1. Randall Hyde, „The Art of 64-Bit Assembly”, No Starch Press; 2021
2. Jo Van Hoey, „Beginning x64 Assembly Programming: From Novice to AVX Professional”, Apress, 2019
3. Daniel Kusswurm, „Modern X86 Assembly Language Programming: Covers x86 64-bit, AVX, AVX2, and AVX-512”. Apress, 2018
4. Kip Irvine, „Assembly Language for x86 Processors”, 7th edition, Pearson India, 2018
Lab equipment A PC platform with Windows OS installed (eventually Linux platform with Virtual Machine with Windows), Visual Studio Community Edition (or higher version). Local or remote access with GUI (RDP, VNC).
Virtual lab n/a
MOOC course https://multiasm.eu/mooc/course/view.php?id=15