Skip to content
Snippets Groups Projects
Commit 00d64d56 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Vortragsfolien und Beispiele 4.5.2021

parent 99105543
No related branches found
No related tags found
No related merge requests found
#include <avr/io.h>
int main (void)
{
DDRD = 0x7c; /* binär: 0111 1100 */ /* DDR = Data Direction Register */
PORTD = 0x40; /* binär: 0100 0000 */ /* 0 = input, 1 = output */
while (1)
/* just wait */; /* Endlosschleife */
return 0;
}
:100000000C9434000C943E000C943E000C943E0082
:100010000C943E000C943E000C943E000C943E0068
:100020000C943E000C943E000C943E000C943E0058
:100030000C943E000C943E000C943E000C943E0048
:100040000C943E000C943E000C943E000C943E0038
:100050000C943E000C943E000C943E000C943E0028
:100060000C943E000C943E0011241FBECFEFD8E04C
:10007000DEBFCDBF0E9440000C9445000C940000F0
:0E0080008CE78AB980E48BB9FFCFF894FFCFEC
:00000001FF
.file "blink-0.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.section .text.startup,"ax",@progbits
.global main
.type main, @function
main:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
ldi r24,lo8(124)
out 0xa,r24
ldi r24,lo8(64)
out 0xb,r24
.L2:
rjmp .L2
.size main, .-main
.ident "GCC: (GNU) 5.4.0"
cassini/home/peter/bo/2021ss/rtech/20210504> cat blink-0.c
#include <avr/io.h>
int main (void)
{
DDRD = 0x7c; /* binär: 0111 1100 */ /* DDR = Data Direction Register */
PORTD = 0x40; /* binär: 0100 0000 */ /* 0 = input, 1 = output */
while (1)
/* just wait */; /* Endlosschleife */
return 0;
}
cassini/home/peter/bo/2021ss/rtech/20210504> avr-gcc -Wall -Os -mmcu=atmega328p blink-0.c -o blink-0.elf
cassini/home/peter/bo/2021ss/rtech/20210504> ls -l blink-0.elf
-rwxr-xr-x 1 peter peter 6360 Mai 4 11:43 blink-0.elf
cassini/home/peter/bo/2021ss/rtech/20210504> avr-objcopy -O ihex blink-0.elf blink-0.hex
cassini/home/peter/bo/2021ss/rtech/20210504> ls -l blink-0.hex
-rw-r--r-- 1 peter peter 414 Mai 4 11:45 blink-0.hex
cassini/home/peter/bo/2021ss/rtech/20210504> cat blink-0.hex
:100000000C9434000C943E000C943E000C943E0082
:100010000C943E000C943E000C943E000C943E0068
:100020000C943E000C943E000C943E000C943E0058
:100030000C943E000C943E000C943E000C943E0048
:100040000C943E000C943E000C943E000C943E0038
:100050000C943E000C943E000C943E000C943E0028
:100060000C943E000C943E0011241FBECFEFD8E04C
:10007000DEBFCDBF0E9440000C9445000C940000F0
:0E0080008CE78AB980E48BB9FFCFF894FFCFEC
:00000001FF
cassini/home/peter/bo/2021ss/rtech/20210504>
cassini/home/peter/bo/2021ss/rtech/20210504> avrdude -P /dev/ttyACM0 -c arduino -p m328p -U flash:w:blink-0.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "blink-0.hex"
avrdude: input file blink-0.hex auto detected as Intel Hex
avrdude: writing flash (142 bytes):
Writing | ################################################## | 100% 0.04s
avrdude: 142 bytes of flash written
avrdude: verifying flash memory against blink-0.hex:
avrdude: load data flash data from input file blink-0.hex:
avrdude: input file blink-0.hex auto detected as Intel Hex
avrdude: input file blink-0.hex contains 142 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.03s
avrdude: verifying ...
avrdude: 142 bytes of flash verified
avrdude: safemode: Fuses OK (E:00, H:00, L:00)
avrdude done. Thank you.
cassini/home/peter/bo/2021ss/rtech/20210504>
#include <avr/io.h>
#define F_CPU 16000000l
#include <util/delay.h>
int main (void)
{
DDRD = 0x7c;
PORTD |= 0x40; /* binär: 0100 0000 */
while (1)
{
_delay_ms (500);
PORTD &= ~0x40; /* binär: 1011 1111 */
_delay_ms (500);
PORTD |= 0x40; /* binär: 0100 0000 */
}
return 0;
}
:100000000C9434000C943E000C943E000C943E0082
:100010000C943E000C943E000C943E000C943E0068
:100020000C943E000C943E000C943E000C943E0058
:100030000C943E000C943E000C943E000C943E0048
:100040000C943E000C943E000C943E000C943E0038
:100050000C943E000C943E000C943E000C943E0028
:100060000C943E000C943E0011241FBECFEFD8E04C
:10007000DEBFCDBF0E9440000C9457000C940000DE
:100080008CE78AB95E9A2FEF89E698E1215080408B
:100090009040E1F700C000005E982FEF89E698E1FC
:1000A000215080409040E1F700C00000EBCFF89471
:0200B000FFCF80
:00000001FF
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino model, check
the Technical Specs of your board at https://www.arduino.cc/en/Main/Products
This example code is in the public domain.
modified 8 May 2014
by Scott Fitzgerald
modified 2 Sep 2016
by Arturo Guadalupi
modified 8 Sep 2016
by Colby Newman
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
.file "blink-1.c"
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__SREG__ = 0x3f
__tmp_reg__ = 0
__zero_reg__ = 1
.section .text.startup,"ax",@progbits
.global main
.type main, @function
main:
/* prologue: function */
/* frame size = 0 */
/* stack size = 0 */
.L__stack_usage = 0
ldi r24,lo8(124)
out 0xa,r24
.L3:
sbi 0xb,6
ldi r18,lo8(1599999) # #include <avr/io.h>
ldi r24,hi8(1599999) #
ldi r25,hlo8(1599999) # #define F_CPU 16000000l
1: subi r18,1 # #include <util/delay.h>
sbci r24,0 #
sbci r25,0 # int main (void)
brne 1b # {
rjmp . # DDRD = 0x7c;
nop # PORTD |= 0x40; /* binär: 0100 0000 */
cbi 0xb,6 # while (1)
ldi r18,lo8(1599999) # {
ldi r24,hi8(1599999) # _delay_ms (500);
ldi r25,hlo8(1599999) # PORTD &= ~0x40; /* binär: 1011 1111 */
1: subi r18,1 # _delay_ms (500);
sbci r24,0 # PORTD |= 0x40; /* binär: 0100 0000 */
sbci r25,0 # }
brne 1b # return 0;
rjmp . # }
nop
rjmp .L3
.size main, .-main
.ident "GCC: (GNU) 5.4.0"
"blink-1.c" 18L, 322C geschrieben
#include <avr/io.h>
#define F_CPU 16000000l
#include <util/delay.h>
int main (void)
{
DDRD = 0x7c;
PORTD |= 0x40; /* binär: 0100 0000 */
while (1)
{
_delay_ms (500);
PORTD &= ~0x40; /* binär: 1011 1111 */
_delay_ms (500);
PORTD |= 0x40; /* binär: 0100 0000 */
}
return 0;
}
cassini/home/peter/bo/2021ss/rtech/20210504> avr-gcc -Wall -Os -mmcu=atmega328p blink-1.c -o blink-1.elf
cassini/home/peter/bo/2021ss/rtech/20210504> ls -l blink-1.elf
-rwxr-xr-x 1 peter peter 6396 Mai 4 11:55 blink-1.elf
cassini/home/peter/bo/2021ss/rtech/20210504> avr-objcopy -O ihex blink-1.elf blink-1.hex
cassini/home/peter/bo/2021ss/rtech/20210504> ls -l blink-1.hex
-rw-r--r-- 1 peter peter 525 Mai 4 11:56 blink-1.hex
cassini/home/peter/bo/2021ss/rtech/20210504> cat blink-1.hex
:100000000C9434000C943E000C943E000C943E0082
:100010000C943E000C943E000C943E000C943E0068
:100020000C943E000C943E000C943E000C943E0058
:100030000C943E000C943E000C943E000C943E0048
:100040000C943E000C943E000C943E000C943E0038
:100050000C943E000C943E000C943E000C943E0028
:100060000C943E000C943E0011241FBECFEFD8E04C
:10007000DEBFCDBF0E9440000C9457000C940000DE
:100080008CE78AB95E9A2FEF89E698E1215080408B
:100090009040E1F700C000005E982FEF89E698E1FC
:1000A000215080409040E1F700C00000EBCFF89471
:0200B000FFCF80
:00000001FF
cassini/home/peter/bo/2021ss/rtech/20210504> avrdude -P /dev/ttyACM0 -c arduino -p m328p -U flash:w:blink-1.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "blink-1.hex"
avrdude: input file blink-1.hex auto detected as Intel Hex
avrdude: writing flash (178 bytes):
Writing | ################################################## | 100% 0.04s
avrdude: 178 bytes of flash written
avrdude: verifying flash memory against blink-1.hex:
avrdude: load data flash data from input file blink-1.hex:
avrdude: input file blink-1.hex auto detected as Intel Hex
avrdude: input file blink-1.hex contains 178 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.03s
avrdude: verifying ...
avrdude: 178 bytes of flash verified
avrdude: safemode: Fuses OK (E:00, H:00, L:00)
avrdude done. Thank you.
cassini/home/peter/bo/2021ss/rtech/20210504>
../20210503/screenshot-20210503-181001.png
\ No newline at end of file
../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
../common/logo-hochschule-bochum.pdf
\ No newline at end of file
../common/pgslides.sty
\ No newline at end of file
File added
% rtech-20210504.pdf - Lecture Slides on Computer Technology
% Copyright (C) 2012, 2013, 2014, 2021 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
% README: Computer-Sprachen: Arduino
\documentclass[10pt,t]{beamer}
\usepackage{pgslides}
\usepackage{pdftricks}
\newcommand{\Cin}{C\raisebox{-0.5ex}{\footnotesize in}}
\newcommand{\Cout}{C\raisebox{-0.5ex}{\footnotesize out}}
\begin{psinputs}
\usepackage[latin1]{inputenc}
\usepackage[german]{babel}
\usepackage[T1]{fontenc}
\usepackage{helvet}
\renewcommand*\familydefault{\sfdefault}
\usepackage{pstricks,pst-grad,pst-circ-pg}
\newcommand{\invisible}{\tiny\color{white}}
\psset{unit=1cm}
\psset{logicLabelstyle=\invisible}
\newcommand{\logicSymbol}{\small\boldmath\bf\rule{0pt}{0.5cm}}
\psset{logicSymbolstyle=\logicSymbol}
\newcommand{\Cin}{C\raisebox{-0.5ex}{\footnotesize in}}
\newcommand{\Cout}{C\raisebox{-0.5ex}{\footnotesize out}}
\end{psinputs}
\title{Rechnertechnik}
\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
\date{4.\ Mai 2021}
\begin{document}
\maketitleframe
\sectionnonumber{\inserttitle}
\begin{frame}
\showsectionnonumber
\begin{itemize}
\item[\textbf{1}] \textbf{Einführung}
\item[\textbf{2}] \textbf{Vom Schaltkreis zum Computer}
\begin{itemize}
\item[2.1] Logik-Schaltkreise
\item[2.2] Binärdarstellung von Zahlen
\item[2.3] Vom Logik-Schaltkreis zum Addierer
\item[2.4] Negative Zahlen
\item[2.5] Vom Addierer zum Computer
\color{medgreen}
\item[2.6] Computer-Sprachen
\color{orange}
\item[2.7] Programmieren in Assembler
\end{itemize}
\color{gray}
\item[\textbf{3}] \textbf{Architekturmerkmale von Prozessoren}
\item[\textbf{4}] \textbf{Der CPU-Stack}
% \item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
% \item[\textbf{6}] \textbf{Anwender-Software}
% \item[\textbf{7}] \textbf{Bus-Systeme}
% \item[\textbf{8}] \textbf{Pipelining}
\item[\textbf{\dots\hspace{-0.75em}}]
% \item[\textbf{9}] \textbf{Ausblick}
\end{itemize}
\end{frame}
\setcounter{section}{1}
\section{Vom Schaltkreis zum Computer}
\setcounter{subsection}{5}
\subsection{Computer-Sprachen}
\subsubsection{Maschinensprache}
\begin{frame}
\showsubsection
\showsubsubsection
\strut\hfill
\begin{minipage}{6.5cm}
\vspace*{-1.7cm}
\small
Computer
\begin{itemize}\itemsep0pt
\item Rechenwerk (ALU)
\item Speicher: Register,\\
adressierbarer Hauptspeicher
\item Takt: Befehle abarbeiten
\item Peripherie: Kommunikation\\
mit der Außenwelt
\arrowitem in Maschinensprache programmierbar
\end{itemize}
\end{minipage}\hspace*{-0.5cm}
In jedem Takt:
\begin{itemize}
\item
dort aus dem Hauptspeicher lesen, wohin das Register \lstinline{IP} zeigt\\
\textarrow\ \newterm{Befehl\/} (\newterm{Instruction\/} -- \lstinline{IP} = \newterm{Instruction Pointer\/})
\item
den \newterm{Befehl\/} an den \newterm{Funktion\/}-Eingang der \newterm{ALU\/} legen
\item
auf ähnliche Weise weitere Daten an den \newterm{Akkumulator\/}-\\
und den \newterm{Daten\/}-Eingang der \newterm{ALU\/} legen
\item
auf ähnliche Weise den \newterm{Ergebnis\/}-Ausgang der \newterm{ALU}\\
in den Hauptspeicher schreiben
\textarrow\ Befehl ausgeführt
\item
Register \lstinline{IP} hochzählen
\textarrow\ nächster Befehl
\arrowitem
Maschinensprache
\end{itemize}
\end{frame}
\begin{frame}
\showsubsection
\showsubsubsection
\begin{itemize}
\item
Daten aus dem Speicher in Register einlesen
\item
Daten aus Register in den Speicher schreiben
\arrowitem
Lade- und Speicher-Befehle
\item
Daten aus Registern (oder Speicher) an ALU legen,\\
Ergebnis in Register (oder Speicher) schreiben
\arrowitem
arithmetische Befehle
% \pause
\item
Daten aus Register oder Speicher in das \lstinline{IP}-Register laden
\arrowitem
\only<1->{unbedingter }Sprungbefehl
% \pause
\item
Sprungbefehl nur dann, wenn im Status-Ausgang der ALU ein bestimmtes Bit gesetzt ist
\arrowitem
bedingter Sprungbefehl
% \pause
% \pause
\bigskip
\arrowitem
Der Computer kann "`alles"' -- \newterm{Turing-Vollständigkeit}
\end{itemize}
\end{frame}
\begin{frame}
\showsubsection
\showsubsubsection
\begin{itemize}
\item
Lade- und Speicher-Befehle\\
arithmetische Befehle\\
unbedingte und bedingte Sprungbefehle
\arrowitem
Der Computer kann "`alles"' -- \newterm{Turing-Vollständigkeit}
\bigskip
\item
Maschinensprache = Zahlen \textarrow\ für Menschen schwer handhabbar
\arrowitem
Namen für die Befehle: \newterm{Mnemonics}
\arrowitem
\newterm{Assembler\/}-Sprache
\end{itemize}
\end{frame}
\subsubsection{\strut{\protect\color{gray}Maschinensprache \protect\textarrow\ }Assembler}
\begin{frame}[fragile]
\showsubsubsection
Beispiel: Intel-x86-16-Bit-Assembler
\begin{itemize}
\item
Lade- und Speicher-Befehle\hfill
\lstinline{mov}, \dots\\
arithmetische Befehle\hfill
\lstinline{add}, \lstinline{sub}, \lstinline{inc}, \lstinline{dec},
\lstinline{xor}, \lstinline{cmp}, \dots\\
unbedingte und bedingte Sprungbefehle\hfill
\lstinline{jmp}, \lstinline{jz}, \lstinline{jae}, \dots
\item
Register\hfill
\lstinline{ax}, \lstinline{bx}, \dots
\end{itemize}
\bigskip
Beispiel: Atmel-AVR-8-Bit-Assembler
\begin{itemize}
\item
Lade- und Speicher-Befehle\hfill
\lstinline{ldi}, \lstinline{lds}, \lstinline{sti}, \dots\\
arithmetische Befehle\hfill
\lstinline{add}, \lstinline{sub}, \lstinline{subi},
\lstinline{eor}, \lstinline{cp}, \dots\\
unbedingte und bedingte Sprungbefehle\hfill
\lstinline{rjmp}, \lstinline{brsh}, \lstinline{brlo}, \dots
\item
Register\hfill
\lstinline{r0}, \lstinline{r1}, \dots
\end{itemize}
\bigskip
\textarrow\ für jeden Prozessor anders
\end{frame}
\subsubsection{\strut{\protect\color{gray}Maschinensprache \protect\textarrow\ Assembler \protect\textarrow\ }Hochsprachen}
\begin{frame}[fragile]
\showsubsubsection
Beispiel: Intel-x86-16-Bit-Assembler
\begin{itemize}
\item
Lade- und Speicher-Befehle\hfill
\lstinline{mov}, \dots\\
arithmetische Befehle\hfill
\lstinline{add}, \lstinline{sub}, \lstinline{inc}, \lstinline{dec},
\lstinline{xor}, \lstinline{cmp}, \dots\\
unbedingte und bedingte Sprungbefehle\hfill
\lstinline{jmp}, \lstinline{jz}, \lstinline{jae}, \dots
\item
Register\hfill
\lstinline{ax}, \lstinline{bx}, \dots
\end{itemize}
\bigskip
Beispiel: Atmel-AVR-8-Bit-Assembler
\begin{itemize}
\item
Lade- und Speicher-Befehle\hfill
\lstinline{ldi}, \lstinline{lds}, \lstinline{sti}, \dots\\
arithmetische Befehle\hfill
\lstinline{add}, \lstinline{sub}, \lstinline{subi},
\lstinline{eor}, \lstinline{cp}, \dots\\
unbedingte und bedingte Sprungbefehle\hfill
\lstinline{rjmp}, \lstinline{brsh}, \lstinline{brlo}, \dots
\item
Register\hfill
\lstinline{r0}, \lstinline{r1}, \dots
\end{itemize}
\bigskip
\textarrow\ für jeden Prozessor anders
\bigskip
Hochsprache \textarrow\ für jeden Prozessor gleich
\end{frame}
\begin{frame}[fragile]
\showsubsubsection
Compiler-Sprachen
\begin{itemize}\itemsep0pt
\item
\newterm{Compiler\/} übersetzt Hochsprachen-\newterm{Quelltext\/} in die Assembler-Sprache
\item
\newterm{Assembler\/} übersetzt Assembler-Quelltext in die Maschinensprache
\item
Compiler und Assembler sind Programme,\\
geschrieben in Maschinensprache, Assembler oder einer Hochsprache
\item
Beispiele: Fortran, Algol, Pascal, Ada, C, C++, \dots
\end{itemize}
% \pause
\medskip
Interpreter- oder Skript-Sprachen
\begin{itemize}\itemsep0pt
\item
\newterm{Interpreter\/} liest Hochsprachen-\newterm{Quelltext\/} und führt ihn sofort aus
\item
Der Interpreter ist ein Programm,\\
geschrieben in Maschinensprache, Assembler oder einer Hochsprache
\item
Beispiele: Unix-Shell, BASIC, Perl, Python, \dots
\end{itemize}
% \pause
\medskip
Kombinationen
\begin{itemize}\itemsep0pt
\item
\newterm{Compiler\/} erzeugt \newterm{Zwischencode\/} für eine \newterm{virtuelle Maschine}
\item
\newterm{Interpreter\/} liest Hochsprachen-\newterm{Zwischencode\/} und führt ihn sofort aus
\item
Die virtuelle Maschine ist ein Programm,
geschrieben in Maschinensprache, Assembler, einer Hoch- oder Skript-Sprache
\item
Beispiele: UCSD-Pascal, Java, \dots
\end{itemize}
\vspace*{-1cm}
\end{frame}
\subsection{Programmieren in Assembler}
\begin{frame}
\showsubsection
Beispiel: PC, 1980er bis 1990er Jahre
\begin{itemize}
\item
Prozessor: Intel 8086
\item
Takt: 4,77--100\,MHz
\end{itemize}
Anwendung von Assembler: zeitkritische Programmteile,\\
z.\,B.\ Text- und Grafikausgabe
\begin{onlyenv}<1>
\begin{center}
\vspace*{-0.15cm}
\includegraphics[width=9.8cm,trim={0cm 0cm 0cm 0.8cm},clip]{hello-world-maschinensprache.png}
\vspace*{-10cm}
\end{center}
\end{onlyenv}
\pause
\bigskip
Beispiel: Arduino Uno
\begin{itemize}
\item
Prozessor: ATmega 328p
\item
Takt: 16\,MHz
\end{itemize}
Anwendung von Assembler: zeitkritische Programmteile,\\
z.\,B.\ Mikrosekunden-Timing
\end{frame}
\sectionnonumber{\inserttitle}
\begin{frame}
\showsectionnonumber
\begin{itemize}
\item[\textbf{1}] \textbf{Einführung}
\item[\textbf{2}] \textbf{Vom Schaltkreis zum Computer}
\begin{itemize}
\item[2.1] Logik-Schaltkreise
\item[2.2] Binärdarstellung von Zahlen
\item[2.3] Vom Logik-Schaltkreis zum Addierer
\item[2.4] Negative Zahlen
\item[2.5] Vom Addierer zum Computer
\item[2.6] Computer-Sprachen
\color{orange}
\item[2.7] Programmieren in Assembler
\end{itemize}
\color{gray}
\item[\textbf{3}] \textbf{Architekturmerkmale von Prozessoren}
\item[\textbf{4}] \textbf{Der CPU-Stack}
% \item[\textbf{5}] \textbf{Hardwarenahe Programmierung}
% \item[\textbf{6}] \textbf{Anwender-Software}
% \item[\textbf{7}] \textbf{Bus-Systeme}
% \item[\textbf{8}] \textbf{Pipelining}
\item[\textbf{\dots\hspace{-0.75em}}]
% \item[\textbf{9}] \textbf{Ausblick}
\end{itemize}
\end{frame}
\end{document}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment