Programming in Assembler for everyone and every class of devices: Embedded Systems (ATMEL), Fog class IoT and Mobiles (ARM) and PCs (x86_64).

This module will introduce you to computer architectures. We describe components of modern computers, including PC machines, mobile devices and even microcontrollers. Understanding of the hardware is essential in low-level programming, as it brings a variety of opportunities, such as writing optimal code in terms of performance and energy efficiency. This module serves as a standard introduction to all other assembler programming modules. It is recommended for all those who have little to no understanding of how digital devices are built “inside”.

In this module, you will learn how to write optimal and compact code for microcontrollers. As MCUs used to have very small RAM and storage, and they tend to execute real-time tasks, writing an efficient and compact code is crucial. We specifically present features for the ATMEL family and particularly for the popular Arduino Uno development board, which is both easy and affordable for experimentation.

In this module, you will become acquainted with the growing popularity of ARM-based processors, which are behind the majority of mobile phones, routers, IoT fog-class devices, and are now also used in modern notebooks and laptops, such as those from Apple, Lenovo, and Microsoft. We specifically focus on the implementation of the ARM CPU that can be found in the Raspberry Pi.

This module is related to programming in assembler for PC computers, based on the x86_64 architecture, which is the most popular family of CPUs in notebooks, desktop computers, and servers to date. Nowadays, programming in assembler from scratch is no longer necessary; we present an introduction to assembler programming and then focus on writing high-performance and memory-optimised code in assembler, which integrates with high-level programming languages such as C++ and C#, and is used as a library function. Specifically, we present how to write code for Windows and Linux operating systems.