Difference between revisions of "LU-MOP-en"
(→xx.01.2023) |
(→19.12.2023) |
||
(24 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
[[#{{CURRENTDAY2}}.{{CURRENTMONTH}}.{{CURRENTYEAR}} | Today <small>(if there is a class)</small>]] |
[[#{{CURRENTDAY2}}.{{CURRENTMONTH}}.{{CURRENTYEAR}} | Today <small>(if there is a class)</small>]] |
||
</big> |
</big> |
||
'''Course: Assembly Programming''' |
'''Course: Assembly Programming''' |
||
=Calendar= |
=Calendar= |
||
Line 22: | Line 20: | ||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====19.09.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 33: | Line 31: | ||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====19.09.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 41: | Line 39: | ||
| |
| |
||
⚫ | |||
⚫ | |||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====26.09.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 56: | Line 51: | ||
| |
| |
||
'''Quiz |
'''Quiz 1''' |
||
⚫ | |||
⚫ | |||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====03.10.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 71: | Line 66: | ||
| |
| |
||
'''Quiz 2''' (rescheduled to next week) |
|||
⚫ | |||
Lab: |
|||
Developing and testing a simple Assembly program. Using cross-compilation tools. Introduction to the Make system. |
Developing and testing a simple Assembly program. Using cross-compilation tools. Introduction to the Make system. |
||
Line 76: | Line 75: | ||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====10.10.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 84: | Line 84: | ||
| |
| |
||
⚫ | |||
Two's complement. |
|||
Announced: '''HW1''' - Arithmetic progression |
Announced: '''HW1''' - Arithmetic progression |
||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====17.10.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 96: | Line 101: | ||
| |
| |
||
⚫ | |||
⚫ | |||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====24.10.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 111: | Line 115: | ||
| |
| |
||
⚫ | |||
'''Quiz 3''' |
|||
⚫ | |||
* Announced: '''HW2''' - Matrix multiplication |
* Announced: '''HW2''' - Matrix multiplication |
||
Line 120: | Line 122: | ||
| |
| |
||
==== |
====31.10.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 128: | Line 130: | ||
| |
| |
||
* '''Quiz 3''' - Code comprehension (moved) |
|||
* '''Due''' '''HW1''' - Arithmetic progression |
* '''Due''' '''HW1''' - Arithmetic progression |
||
Line 134: | Line 138: | ||
| |
| |
||
==== |
====07.11.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 146: | Line 150: | ||
| |
| |
||
==== |
====14.11.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 154: | Line 158: | ||
| |
| |
||
* '''Quiz 3''' - Code comprehension |
|||
* '''Due''' '''HW2''' - Matrix multiplication |
* '''Due''' '''HW2''' - Matrix multiplication |
||
Line 159: | Line 164: | ||
| |
| |
||
==== |
====21.11.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 174: | Line 179: | ||
| |
| |
||
==== |
====28.11.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 184: | Line 189: | ||
* '''Due''' '''M1P1''' - Midterm 1 programming task 1, tested |
* '''Due''' '''M1P1''' - Midterm 1 programming task 1, tested |
||
* '''Due''' '''M1P2''' - Midterm 1 programming task 2, tested |
* '''Due''' '''M1P2''' - Midterm 1 programming task 2, tested |
||
⚫ | |||
⚫ | |||
|- style='vertical-align: top;' |
|- style='vertical-align: top;' |
||
| |
| |
||
==== |
====05.12.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 202: | Line 207: | ||
| |
| |
||
==== |
====12.12.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 223: | Line 228: | ||
| |
| |
||
==== |
====12.12.2023==== |
||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 236: | Line 241: | ||
* Bootstraping |
* Bootstraping |
||
Case study: |
|||
⚫ | |||
* Atmega328P MCU ([https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf datasheet]) |
|||
* [https://www.elprocus.com/avr-atmega8-microcontroller-architecture-applications/ Atmega8 architecture description] |
|||
⚫ | |||
| |
| |
||
Line 242: | Line 252: | ||
| |
| |
||
==== |
====02.01.2024==== |
||
12:30 |
|||
xx:xx |
|||
| |
| |
||
{| width='100%' style='background-color:#ddd;' |
{| width='100%' style='background-color:#ddd;' |
||
Line 253: | Line 263: | ||
| |
| |
||
⚫ | |||
* '''Due''' by the end of the day: '''ExP1''' - Exam programming task, tested |
* '''Due''' by the end of the day: '''ExP1''' - Exam programming task, tested |
||
⚫ | |||
|} |
|} |
||
=Assignments= |
=Assignments= |
||
* |
* Homeworks and other assignments are available from e-Studijas |
||
{{MCU_resources}} |
{{MCU_resources}} |
Latest revision as of 12:18, 18 December 2023
Shortcuts: Calendar | Assignments | Resources | Today (if there is a class)
Course: Assembly Programming
Calendar
Date | Topic, content | Deliverables | |
---|---|---|---|
19.09.2023 |
Microprocessors and microcontrollers. Applications. Architectures. Coourse outline. |
||
19.09.2023 |
Representation of non-negative numbers in hardware, registers and memory. Decimal, binary, octal, and hexadecimal systems. Converting between the systems. |
||
26.09.2023 |
Representing negative numbers in hardware. Register size, and why it is important. Methods for encoding negative numbers: packed, signed, bias, one's complement and two's complement. Converting between the value and two's complement in binary and hexadecimal systems. |
Quiz 1 Decimal, binary, octal and hexadecimal systems. | |
03.10.2023 |
Architecture of a processor. Registers, register file, ALU, datapath. CISC vs. RISC architectures. x86 architecture as CISC representative. ARM architecture as RISC. Instruction encoding. |
Quiz 2 (rescheduled to next week) Two's complement. Lab: Developing and testing a simple Assembly program. Using cross-compilation tools. Introduction to the Make system. | |
10.10.2023 |
Environment and tools for compiling and debugging Assembly programs. Compiler, preprocessor, assembly, linker, loader, debugger. Cross-compilation and toolchains. Emulators and virtual machines. |
Quiz 2 Two's complement.
| |
17.10.2023 |
Introduction to ARM Assembly language and programming. Instruction types. Arithmetic instructions. MOV, ADD, SUB. MVN, ADC, SBC, RSB, RSC. Barrel Shifter. |
Practicing tracing the code (on "paper") | |
24.10.2023 |
Flow control in Assembly. Branch instructions. B, BL, BX, BLX. Working directly with PC register. CPSR flags. Condition field. Bit operations. AND, ORR, EOR, BIC, shift and rotation. CMP, CMN, TST, TEQ. Fast flags and the S postfix. |
Code comprehension practice.
| |
31.10.2023 |
Reading and writing data to memory. Memory access instructions. STR, LDR, STRB, STRH, LDRB, LDRH, LDRSB, LDRSH. Addressing modes: offset, pre-indexed and post-indexed. Using barrel shifter with addressing. Data alignment in memory. |
| |
07.11.2023 |
Variable types in C: static, automatic and dynamic. Calling subroutines and parameter passing conventions. Parameters and return value. Stack and registers. Saving the registers, the context. Loading and storing multiple registers: LDM, STM. Interfacing between Assembly and C. |
||
14.11.2023 |
Symbol encoding in hardware and software. Code tables. ASCII. EBCDIC. ISO code tables. Foreign letter symbols. UTF-8, UTF-16. Strings in C and memory. Converting values to symbols and strings. |
| |
21.11.2023 |
Data representation in memory. Assembly code comprehension. Two programming tasks. |
| |
28.11.2023 |
Expressions in Assembly. Operators in expressions. Constants. Assigning values to symbols. Directives: .set, .equiv, .eqv. Conditional compilation. Directives .if, .ifdef, .endif., ifb, .ifc, .ifeqs. More conditionals .ifeq, .ifge, .ifne and others. Macro commands: .macro, .endm., .rept. Recursive macros. Local macros. Macros across sections. |
| |
05.12.2023 |
Including Assembly in C code. Inline code and Assembly code operands. Tasks for the compiler, linker and loader. Dynamic loaders and libraries. |
Due: Choice: Written exam vs. programming project (in eStudijas) | |
12.12.2023 |
Execution time for instructions. Case study for code optimization. Leveraging the documentation and specification of instructions. Reordering the code. Unrolling loops. Taking advantage of branch prediction. Cache memory and the code performance. Documentation: Intel XScale R Core Developer’s Manual. The section and focus:
|
||
12.12.2023 |
Case study:
Review of the course topics |
||
02.01.202412:30 |
Data representation in memory. Assembly code comprehension. Multiple choice questions and a programming task. |
|
Assignments
- Homeworks and other assignments are available from e-Studijas
Resources
Tutorials
- Setting up ARM development environment on Ubuntu
Make
GDB
- GDB tutorial from UMD
- GDB getting started tutorial
- GDB commands in short from PDX
- GDB manual
Remote debugging example
Debugging myprog with a parameter 10.
- First, start the qemu emulator, providing the communications port (12345), and run it in background (&).
- Before you do this, make sure that the port is not in use by anyone or anything.
- Then start the gdb-multiarch with the name of the program and
- Use the gdb command "remote target" with address (localhost) and the port (12345).
- Finally start the program execution with "continue". Perhaps, you may want to set some breakpoints before that.
$ qemu-arm -L /usr/arm-linux-gnueabi -g 12345 myprog 10 & $ gdb-multiarch myprog (gdb) target remote localhost:12345 (gdb) continue
A few essential GDB commands
GDB command | Shortcut | Description |
run | Run the program from the beginning | |
continue | c | Continue (or start) the execution of the program |
step | s | Execute the current line from the source. If there is a function call, step into it.
This command can have a parameter n that tells how many steps to make. |
next | n | Execute the current line from the source. If there is a function call, stop after running it.
This command can have a parameter n that tells how many steps to make. |
break <x> | b <x> |
Set a "breakpoint" to <x>, where <x> could be:
|
list | l | Shows the source code (lines). Could be followed by a function_name or file:line_number |
info registers | i r | Prints all registers and their values. Can be followed by one or more register names. |
set step mode on | Set running mode such that "step" will enter the code that has no debug information available.
Using "off" instead of "on" resets this mode. |
ARM
- ARM instruction set quick reference - from U.Wisconsin.
- A32 instruction summary
- Application Binary Interface (ABI) for the Arm architecture
- ARM A32 instruction set. Note, that ARM has several instruction sets described here
Xscale
- Intel XScale Microarchitecture Assembly Language Quick Reference Card ARM Instruction Set, Intel Corporation, 2001
- Intel IXP42X Product Line of Network Processors and IXC1100 Control Plane Processor Developer’s Manual, ON: 252480-006US, Intel Corporation, 2006
- Intel XScale(R) Core Developer’s Manual
- Intel XScale R Core Developer’s Manual, ON: 273473-002, Intel Corporation, 2004
Insights
- Teach yourself programming in 10 years by Peter Norvig
- Should I learn assembly language to program a microcontroller? - Answer on Quora by software R&D professional with 40 years of experience.