Difference between revisions of "LU-MOP-en"

From DiLab
Jump to: navigation, search
(13.12.2022)
(13.12.2022)
Line 236: Line 236:
 
* Bootstraping
 
* Bootstraping
  
 +
Case study: Atmega328P MCU ([https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf datasheet])
  
 
'''Review of the course topics'''
 
'''Review of the course topics'''

Revision as of 08:16, 13 December 2022

Shortcuts: Calendar | Assignments | Resources | Today (if there is a class)

Course: Assembly Programming

Calendar

Date Topic, content Deliverables

06.09.2022

Introduction

Microprocessors and microcontrollers. Applications. Architectures. Coourse outline.

13.09.2022

Hexadecimal arithmetic

Representation of non-negative numbers in hardware, registers and memory. Decimal, binary, octal, and hexadecimal systems. Converting between the systems.

20.09.2022

Two's complement

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.

27.09.2022

Processor architecture

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

Two's complement.

Lab:

Developing and testing a simple Assembly program. Using cross-compilation tools. Introduction to the Make system.

04.10.2022

Computing environment

Environment and tools for compiling and debugging Assembly programs. Compiler, preprocessor, assembly, linker, loader, debugger. Cross-compilation and toolchains. Emulators and virtual machines.

Announced: HW1 - Arithmetic progression

11.10.2022

ARM Assembly and arithmetic

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")

18.10.2022

Flow control and tests

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.

  • Announced: HW2 - Matrix multiplication

25.10.2022

Memory instructions

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.

  • Quiz 3 - Code comprehension
  • Due HW1 - Arithmetic progression


01.11.2022

Calling subroutines and interfacing with C

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.

08.11.2022

Symbols

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.

  • Due HW2 - Matrix multiplication

15.11.2022

Midterm

Data representation in memory. Assembly code comprehension. Two programming tasks.

  • Assignment Proj - Project choice

22.11.2022

Expressions and Macro commands

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.

  • Due M1P1 - Midterm 1 programming task 1, tested
  • Due M1P2 - Midterm 1 programming task 2, tested

29.11.2022

Inline Assembly

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)

06.12.2022

Optimizations

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:

  • A.2.1.2 — Processor execution pipe diagram. Instruction and data flow description.
  • 10.4 — Instruction execution time. For example, multiplication vs. addition.
  • 5 — Branch prediction mechanism
  • 4 and 6 — Cache memory. Instruction cache and Data cache.
  • A.3–A.5 — Optimizations as suggested by Intel.

13.12.2022

Systems on chip (SoC)
  • Datasheets
  • Memory map
  • Communications protocols (RS232, USB, SPI, I2C, 1-wire, CAN)
  • Peripherals
  • Watchdog timer
  • Bootstraping

Case study: Atmega328P MCU (datasheet)

Review of the course topics

20.12.2022

xx:xx

Exam

Data representation in memory. Assembly code comprehension. Multiple choice questions and a programming task.

  • Due by the end of the day: ExP1 - Exam programming task, tested

Assignments

  • Homeworks and other assignments are available from e-Studijas

Resources

Tutorials

Make

GDB

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:

  • line_number in the current source code file
  • filename:line_number
  • function_name
  • filename:function_name
  • *address
  • ...and many others
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

Xscale

Insights