diff --git a/20210504/rtech-20210504.tex b/20210504/rtech-20210504.tex index 52e438f4960d85d7298df7b65b1b01f5cba8f0d4..72180c8c92dbd37745f133c425d267a92bdf36f7 100644 --- a/20210504/rtech-20210504.tex +++ b/20210504/rtech-20210504.tex @@ -20,7 +20,7 @@ % Attribution-ShareAlike 3.0 Unported License along with this % document. If not, see <http://creativecommons.org/licenses/>. -% README: Computer-Sprachen: Arduino +% README: Computer-Sprachen, Programmieren in Assembler: PC \documentclass[10pt,t]{beamer} diff --git a/20210511/Makefile b/20210511/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d080ca3fa6821afe1e4075dea4f6463eda663f02 --- /dev/null +++ b/20210511/Makefile @@ -0,0 +1,11 @@ +%.s: %.c + avr-gcc -Wall -Os -mmcu=atmega328p $< -S -o $@ + +%.elf: %.c + avr-gcc -Wall -Os -mmcu=atmega328p $< -o $@ + +%.hex: %.elf + avr-objcopy -O ihex $< $@ + +download: + ./download.sh diff --git a/20210511/blink-0.E b/20210511/blink-0.E new file mode 100644 index 0000000000000000000000000000000000000000..f5f51be85c1055d5ff41b2dfa322120bbb933d55 --- /dev/null +++ b/20210511/blink-0.E @@ -0,0 +1,183 @@ +# 1 "blink-0.c" +# 1 "<built-in>" +# 1 "<command-line>" +# 1 "blink-0.c" +# 1 "/usr/lib/avr/include/avr/io.h" 1 3 +# 99 "/usr/lib/avr/include/avr/io.h" 3 +# 1 "/usr/lib/avr/include/avr/sfr_defs.h" 1 3 +# 126 "/usr/lib/avr/include/avr/sfr_defs.h" 3 +# 1 "/usr/lib/avr/include/inttypes.h" 1 3 +# 37 "/usr/lib/avr/include/inttypes.h" 3 +# 1 "/usr/lib/gcc/avr/5.4.0/include/stdint.h" 1 3 4 +# 9 "/usr/lib/gcc/avr/5.4.0/include/stdint.h" 3 4 +# 1 "/usr/lib/avr/include/stdint.h" 1 3 4 +# 125 "/usr/lib/avr/include/stdint.h" 3 4 + +# 125 "/usr/lib/avr/include/stdint.h" 3 4 +typedef signed int int8_t __attribute__((__mode__(__QI__))); +typedef unsigned int uint8_t __attribute__((__mode__(__QI__))); +typedef signed int int16_t __attribute__ ((__mode__ (__HI__))); +typedef unsigned int uint16_t __attribute__ ((__mode__ (__HI__))); +typedef signed int int32_t __attribute__ ((__mode__ (__SI__))); +typedef unsigned int uint32_t __attribute__ ((__mode__ (__SI__))); + +typedef signed int int64_t __attribute__((__mode__(__DI__))); +typedef unsigned int uint64_t __attribute__((__mode__(__DI__))); +# 146 "/usr/lib/avr/include/stdint.h" 3 4 +typedef int16_t intptr_t; + + + + +typedef uint16_t uintptr_t; +# 163 "/usr/lib/avr/include/stdint.h" 3 4 +typedef int8_t int_least8_t; + + + + +typedef uint8_t uint_least8_t; + + + + +typedef int16_t int_least16_t; + + + + +typedef uint16_t uint_least16_t; + + + + +typedef int32_t int_least32_t; + + + + +typedef uint32_t uint_least32_t; + + + + + + + +typedef int64_t int_least64_t; + + + + + + +typedef uint64_t uint_least64_t; +# 217 "/usr/lib/avr/include/stdint.h" 3 4 +typedef int8_t int_fast8_t; + + + + +typedef uint8_t uint_fast8_t; + + + + +typedef int16_t int_fast16_t; + + + + +typedef uint16_t uint_fast16_t; + + + + +typedef int32_t int_fast32_t; + + + + +typedef uint32_t uint_fast32_t; + + + + + + + +typedef int64_t int_fast64_t; + + + + + + +typedef uint64_t uint_fast64_t; +# 277 "/usr/lib/avr/include/stdint.h" 3 4 +typedef int64_t intmax_t; + + + + +typedef uint64_t uintmax_t; +# 10 "/usr/lib/gcc/avr/5.4.0/include/stdint.h" 2 3 4 +# 38 "/usr/lib/avr/include/inttypes.h" 2 3 +# 77 "/usr/lib/avr/include/inttypes.h" 3 +typedef int32_t int_farptr_t; + + + +typedef uint32_t uint_farptr_t; +# 127 "/usr/lib/avr/include/avr/sfr_defs.h" 2 3 +# 100 "/usr/lib/avr/include/avr/io.h" 2 3 +# 272 "/usr/lib/avr/include/avr/io.h" 3 +# 1 "/usr/lib/avr/include/avr/iom328p.h" 1 3 +# 273 "/usr/lib/avr/include/avr/io.h" 2 3 +# 627 "/usr/lib/avr/include/avr/io.h" 3 +# 1 "/usr/lib/avr/include/avr/portpins.h" 1 3 +# 628 "/usr/lib/avr/include/avr/io.h" 2 3 + +# 1 "/usr/lib/avr/include/avr/common.h" 1 3 +# 630 "/usr/lib/avr/include/avr/io.h" 2 3 + +# 1 "/usr/lib/avr/include/avr/version.h" 1 3 +# 632 "/usr/lib/avr/include/avr/io.h" 2 3 + + + + + + +# 1 "/usr/lib/avr/include/avr/fuse.h" 1 3 +# 239 "/usr/lib/avr/include/avr/fuse.h" 3 +typedef struct +{ + unsigned char low; + unsigned char high; + unsigned char extended; +} __fuse_t; +# 639 "/usr/lib/avr/include/avr/io.h" 2 3 + + +# 1 "/usr/lib/avr/include/avr/lock.h" 1 3 +# 642 "/usr/lib/avr/include/avr/io.h" 2 3 +# 2 "blink-0.c" 2 + + +# 3 "blink-0.c" +int main (void) +{ + +# 5 "blink-0.c" 3 + (*(volatile uint8_t *)((0x0A) + 0x20)) +# 5 "blink-0.c" + = 0x7c; + +# 6 "blink-0.c" 3 + (*(volatile uint8_t *)((0x0B) + 0x20)) +# 6 "blink-0.c" + = 0x40; + while (1); + return 0; +} diff --git a/20210511/blink-0.c b/20210511/blink-0.c new file mode 100644 index 0000000000000000000000000000000000000000..e477a88f50d4aa8b5ce4b60a039a83f347ff2bc0 --- /dev/null +++ b/20210511/blink-0.c @@ -0,0 +1,10 @@ +#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; +} diff --git a/20210511/blink-0.hex b/20210511/blink-0.hex new file mode 100644 index 0000000000000000000000000000000000000000..4a3ecbb32f186d6c742777b223473148e1cef0a4 --- /dev/null +++ b/20210511/blink-0.hex @@ -0,0 +1,10 @@ +:100000000C9434000C943E000C943E000C943E0082 +:100010000C943E000C943E000C943E000C943E0068 +:100020000C943E000C943E000C943E000C943E0058 +:100030000C943E000C943E000C943E000C943E0048 +:100040000C943E000C943E000C943E000C943E0038 +:100050000C943E000C943E000C943E000C943E0028 +:100060000C943E000C943E0011241FBECFEFD8E04C +:10007000DEBFCDBF0E9440000C9445000C940000F0 +:0E0080008CE78AB980E48BB9FFCFF894FFCFEC +:00000001FF diff --git a/20210511/blink-0s.hex b/20210511/blink-0s.hex new file mode 100644 index 0000000000000000000000000000000000000000..6806fe6d446b843666da2468d8ab89bd354551a0 --- /dev/null +++ b/20210511/blink-0s.hex @@ -0,0 +1,10 @@ +:100000000C9434000C943E000C943E000C943E0082 +:100010000C943E000C943E000C943E000C943E0068 +:100020000C943E000C943E000C943E000C943E0058 +:100030000C943E000C943E000C943E000C943E0048 +:100040000C943E000C943E000C943E000C943E0038 +:100050000C943E000C943E000C943E000C943E0028 +:100060000C943E000C943E0011241FBECFEFD8E04C +:10007000DEBFCDBF0E9440000C9445000C940000F0 +:0E0080008CE78AB980E08BB9FFCFF894FFCFF0 +:00000001FF diff --git a/20210511/blink-0s.s b/20210511/blink-0s.s new file mode 100644 index 0000000000000000000000000000000000000000..68816d74ac0abed2e71f367f3108cef22175b402 --- /dev/null +++ b/20210511/blink-0s.s @@ -0,0 +1,9 @@ + .section .text.startup,"ax",@progbits +.global main +main: + ldi r24,0x7c + out 0xa,r24 + ldi r24,0x00 + out 0xb,r24 +.L2: + rjmp .L2 diff --git a/20210511/blink-1.s0 b/20210511/blink-1.s0 new file mode 100644 index 0000000000000000000000000000000000000000..419c0b4f4b267dbc1d076db028ed82b40658baa3 --- /dev/null +++ b/20210511/blink-1.s0 @@ -0,0 +1,308 @@ + .file "blink-1.c" +__SP_H__ = 0x3e +__SP_L__ = 0x3d +__SREG__ = 0x3f +__tmp_reg__ = 0 +__zero_reg__ = 1 +.global __mulsf3 +.global __ltsf2 +.global __gtsf2 +.global __fixunssfsi + .text +.global main + .type main, @function +main: + push r28 + push r29 + in r28,__SP_L__ + in r29,__SP_H__ + sbiw r28,28 + in __tmp_reg__,__SREG__ + cli + out __SP_H__,r29 + out __SREG__,__tmp_reg__ + out __SP_L__,r28 +/* prologue: function */ +/* frame size = 28 */ +/* stack size = 30 */ +.L__stack_usage = 30 + ldi r24,lo8(42) + ldi r25,0 + ldi r18,lo8(124) + movw r30,r24 + st Z,r18 + ldi r24,lo8(43) + ldi r25,0 + ldi r18,lo8(43) + ldi r19,0 + movw r30,r18 + ld r18,Z + ori r18,lo8(64) + movw r30,r24 + st Z,r18 +.L18: + ldi r24,0 + ldi r25,0 + ldi r26,lo8(-6) + ldi r27,lo8(67) + std Y+1,r24 + std Y+2,r25 + std Y+3,r26 + std Y+4,r27 + ldi r18,0 + ldi r19,0 + ldi r20,lo8(122) + ldi r21,lo8(69) + ldd r22,Y+1 + ldd r23,Y+2 + ldd r24,Y+3 + ldd r25,Y+4 + call __mulsf3 + movw r26,r24 + movw r24,r22 + std Y+19,r24 + std Y+20,r25 + std Y+21,r26 + std Y+22,r27 + ldi r18,0 + ldi r19,0 + ldi r20,lo8(-128) + ldi r21,lo8(63) + ldd r22,Y+19 + ldd r23,Y+20 + ldd r24,Y+21 + ldd r25,Y+22 + call __ltsf2 + tst r24 + brge .L23 + ldi r24,lo8(1) + ldi r25,0 + std Y+24,r25 + std Y+23,r24 + rjmp .L4 +.L23: + ldi r18,0 + ldi r19,lo8(-1) + ldi r20,lo8(127) + ldi r21,lo8(71) + ldd r22,Y+19 + ldd r23,Y+20 + ldd r24,Y+21 + ldd r25,Y+22 + call __gtsf2 + cp __zero_reg__,r24 + brge .L24 + ldi r18,0 + ldi r19,0 + ldi r20,lo8(32) + ldi r21,lo8(65) + ldd r22,Y+1 + ldd r23,Y+2 + ldd r24,Y+3 + ldd r25,Y+4 + call __mulsf3 + movw r26,r24 + movw r24,r22 + movw r22,r24 + movw r24,r26 + call __fixunssfsi + movw r26,r24 + movw r24,r22 + std Y+24,r25 + std Y+23,r24 + rjmp .L7 +.L8: + ldi r24,lo8(-112) + ldi r25,lo8(1) + std Y+26,r25 + std Y+25,r24 + ldd r24,Y+25 + ldd r25,Y+26 +/* #APP */ + ; 105 "/usr/lib/avr/include/util/delay_basic.h" 1 + 1: sbiw r24,1 + brne 1b + ; 0 "" 2 +/* #NOAPP */ + std Y+26,r25 + std Y+25,r24 + ldd r24,Y+23 + ldd r25,Y+24 + sbiw r24,1 + std Y+24,r25 + std Y+23,r24 +.L7: + ldd r24,Y+23 + ldd r25,Y+24 + or r24,r25 + brne .L8 + rjmp .L9 +.L24: + ldd r22,Y+19 + ldd r23,Y+20 + ldd r24,Y+21 + ldd r25,Y+22 + call __fixunssfsi + movw r26,r24 + movw r24,r22 + std Y+24,r25 + std Y+23,r24 +.L4: + ldd r24,Y+23 + ldd r25,Y+24 + std Y+28,r25 + std Y+27,r24 + ldd r24,Y+27 + ldd r25,Y+28 +/* #APP */ + ; 105 "/usr/lib/avr/include/util/delay_basic.h" 1 + 1: sbiw r24,1 + brne 1b + ; 0 "" 2 +/* #NOAPP */ + std Y+28,r25 + std Y+27,r24 +.L9: + ldi r24,lo8(43) + ldi r25,0 + ldi r18,lo8(43) + ldi r19,0 + movw r30,r18 + ld r18,Z + andi r18,lo8(-65) + movw r30,r24 + st Z,r18 + ldi r24,0 + ldi r25,0 + ldi r26,lo8(-6) + ldi r27,lo8(67) + std Y+5,r24 + std Y+6,r25 + std Y+7,r26 + std Y+8,r27 + ldi r18,0 + ldi r19,0 + ldi r20,lo8(122) + ldi r21,lo8(69) + ldd r22,Y+5 + ldd r23,Y+6 + ldd r24,Y+7 + ldd r25,Y+8 + call __mulsf3 + movw r26,r24 + movw r24,r22 + std Y+9,r24 + std Y+10,r25 + std Y+11,r26 + std Y+12,r27 + ldi r18,0 + ldi r19,0 + ldi r20,lo8(-128) + ldi r21,lo8(63) + ldd r22,Y+9 + ldd r23,Y+10 + ldd r24,Y+11 + ldd r25,Y+12 + call __ltsf2 + tst r24 + brge .L25 + ldi r24,lo8(1) + ldi r25,0 + std Y+14,r25 + std Y+13,r24 + rjmp .L12 +.L25: + ldi r18,0 + ldi r19,lo8(-1) + ldi r20,lo8(127) + ldi r21,lo8(71) + ldd r22,Y+9 + ldd r23,Y+10 + ldd r24,Y+11 + ldd r25,Y+12 + call __gtsf2 + cp __zero_reg__,r24 + brge .L26 + ldi r18,0 + ldi r19,0 + ldi r20,lo8(32) + ldi r21,lo8(65) + ldd r22,Y+5 + ldd r23,Y+6 + ldd r24,Y+7 + ldd r25,Y+8 + call __mulsf3 + movw r26,r24 + movw r24,r22 + movw r22,r24 + movw r24,r26 + call __fixunssfsi + movw r26,r24 + movw r24,r22 + std Y+14,r25 + std Y+13,r24 + rjmp .L15 +.L16: + ldi r24,lo8(-112) + ldi r25,lo8(1) + std Y+16,r25 + std Y+15,r24 + ldd r24,Y+15 + ldd r25,Y+16 +/* #APP */ + ; 105 "/usr/lib/avr/include/util/delay_basic.h" 1 + 1: sbiw r24,1 + brne 1b + ; 0 "" 2 +/* #NOAPP */ + std Y+16,r25 + std Y+15,r24 + ldd r24,Y+13 + ldd r25,Y+14 + sbiw r24,1 + std Y+14,r25 + std Y+13,r24 +.L15: + ldd r24,Y+13 + ldd r25,Y+14 + or r24,r25 + brne .L16 + rjmp .L17 +.L26: + ldd r22,Y+9 + ldd r23,Y+10 + ldd r24,Y+11 + ldd r25,Y+12 + call __fixunssfsi + movw r26,r24 + movw r24,r22 + std Y+14,r25 + std Y+13,r24 +.L12: + ldd r24,Y+13 + ldd r25,Y+14 + std Y+18,r25 + std Y+17,r24 + ldd r24,Y+17 + ldd r25,Y+18 +/* #APP */ + ; 105 "/usr/lib/avr/include/util/delay_basic.h" 1 + 1: sbiw r24,1 + brne 1b + ; 0 "" 2 +/* #NOAPP */ + std Y+18,r25 + std Y+17,r24 +.L17: + ldi r24,lo8(43) + ldi r25,0 + ldi r18,lo8(43) + ldi r19,0 + movw r30,r18 + ld r18,Z + ori r18,lo8(64) + movw r30,r24 + st Z,r18 + rjmp .L18 + .size main, .-main + .ident "GCC: (GNU) 5.4.0" diff --git a/20210511/blink-1s.hex b/20210511/blink-1s.hex new file mode 100644 index 0000000000000000000000000000000000000000..39c68bec0798edbc7a35af189a5b96816c658340 --- /dev/null +++ b/20210511/blink-1s.hex @@ -0,0 +1,12 @@ +:100000000C9434000C943E000C943E000C943E0082 +:100010000C943E000C943E000C943E000C943E0068 +:100020000C943E000C943E000C943E000C943E0058 +:100030000C943E000C943E000C943E000C943E0048 +:100040000C943E000C943E000C943E000C943E0038 +:100050000C943E000C943E000C943E000C943E0028 +:100060000C943E000C943E0011241FBECFEFD8E04C +:10007000DEBFCDBF0E9440000C9453000C940000E2 +:100080008CE78AB95E9A2FEF89E698E1215080408B +:100090009040E1F75E982FEF89E698E1215080408B +:0A00A0009040E1F7EFCFF894FFCF96 +:00000001FF diff --git a/20210511/blink-1s.s b/20210511/blink-1s.s new file mode 100644 index 0000000000000000000000000000000000000000..8bb08c9689cc20318eec80ad0d6d89f77af23746 --- /dev/null +++ b/20210511/blink-1s.s @@ -0,0 +1,23 @@ + .section .text.startup +.global main +main: + ldi r24,0x7c + out 0xa,r24 ; DDRD = 0x7c: verwende die 1-Bits in 0x7c als Ouputs +loop: + sbi 0xb,6 ; setze Bit 6 auf PORTD ("set bit"), schalte LED ein + ldi r18,lo8(1599999) + ldi r24,hi8(1599999) + ldi r25,hlo8(1599999) +wait1: subi r18,1 + sbci r24,0 + sbci r25,0 + brne wait1 + cbi 0xb,6 ; lösche Bit 6 auf PORTD ("clear bit"), schalte LED aus + ldi r18,lo8(1599999) + ldi r24,hi8(1599999) + ldi r25,hlo8(1599999) +wait2: subi r18,1 + sbci r24,0 + sbci r25,0 + brne wait2 + rjmp loop diff --git a/20210511/download.sh b/20210511/download.sh new file mode 100755 index 0000000000000000000000000000000000000000..770c3b5dca74ac09778be055c9d6f5adb0df293b --- /dev/null +++ b/20210511/download.sh @@ -0,0 +1,3 @@ +port=$(ls -rt /dev/ttyACM* | tail -1) +echo avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1) +avrdude -P $port -c arduino -p m328p -U flash:w:$(ls -rt *.hex | tail -1) 2>/dev/null diff --git a/20210511/hello-world-maschinensprache.png b/20210511/hello-world-maschinensprache.png new file mode 120000 index 0000000000000000000000000000000000000000..a5b14fe44b350c69b8d59d2c59f7c923f4631825 --- /dev/null +++ b/20210511/hello-world-maschinensprache.png @@ -0,0 +1 @@ +../20210503/screenshot-20210503-181001.png \ No newline at end of file diff --git a/20210511/logo-hochschule-bochum-cvh-text-v2.pdf b/20210511/logo-hochschule-bochum-cvh-text-v2.pdf new file mode 120000 index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8 --- /dev/null +++ b/20210511/logo-hochschule-bochum-cvh-text-v2.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20210511/logo-hochschule-bochum.pdf b/20210511/logo-hochschule-bochum.pdf new file mode 120000 index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1 --- /dev/null +++ b/20210511/logo-hochschule-bochum.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20210511/pgslides.sty b/20210511/pgslides.sty new file mode 120000 index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64 --- /dev/null +++ b/20210511/pgslides.sty @@ -0,0 +1 @@ +../common/pgslides.sty \ No newline at end of file diff --git a/20210511/rtech-20210511.pdf b/20210511/rtech-20210511.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2f3ff3e194344c2e7d13709f8587b36d2278e013 Binary files /dev/null and b/20210511/rtech-20210511.pdf differ diff --git a/20210511/rtech-20210511.tex b/20210511/rtech-20210511.tex new file mode 100644 index 0000000000000000000000000000000000000000..ae79bba896a094a0ce124e83355e229c4726c9a1 --- /dev/null +++ b/20210511/rtech-20210511.tex @@ -0,0 +1,493 @@ +% rtech-20210511.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: Programmieren in Assembler: 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{11.\ 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 + \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} + +\begin{frame}[fragile] + + \showsubsection + + Beispiel: Arduino Uno + \begin{itemize} + \item + Prozessor: ATmega 328p + \item + Takt: 16\,MHz + \end{itemize} + Anwendung von Assembler: zeitkritische Programmteile,\\ + z.\,B.\ Mikrosekunden-Timing + + \bigskip + + Cross-Entwicklung + \begin{itemize} + \item + Programmieren auf PC + \item + Compilieren auf PC: + \begin{lstlisting}[style=cmd,gobble=8] + avr-gcc -Wall -Os -mmcu=atmega328p blink.c -o blink.elf + \end{lstlisting} + \item + Speicherabbild auf PC erstellen: + \begin{lstlisting}[style=cmd,gobble=8] + avr-objcopy -O ihex blink.elf blink.hex + \end{lstlisting} + \item + Speicherabbild auf den Mikrocontroller herunterladen: + \begin{lstlisting}[style=cmd,gobble=8] + avrdude -P /dev/ttyACM0 -c arduino -p m328p \ + -U flash:w:blink.hex + \end{lstlisting} + \end{itemize} + +\end{frame} + +\begin{frame}[fragile] + + \showsubsection + + Cross-Entwicklung + \begin{itemize} + \item + Programmieren auf PC + \item + Compilieren auf PC: + \begin{lstlisting}[style=cmd,gobble=8] + avr-gcc -Wall -Os -mmcu=atmega328p blink.c -o blink.elf + \end{lstlisting} + \item + Speicherabbild auf PC erstellen: + \begin{lstlisting}[style=cmd,gobble=8] + avr-objcopy -O ihex blink.elf blink.hex + \end{lstlisting} + \item + Speicherabbild auf den Mikrocontroller herunterladen: + \begin{lstlisting}[style=cmd,gobble=8] + avrdude -P /dev/ttyACM0 -c arduino -p m328p \ + -U flash:w:blink.hex + \end{lstlisting} + \medskip + \item + Präprozessor auf PC: + \begin{lstlisting}[style=cmd,gobble=8] + avr-gcc -Wall -Os -mmcu=atmega328p blink.c \ + -E -o blink.E + \end{lstlisting} + \item + Compilieren auf PC, Assembler-Quelltext erzeugen: + \begin{lstlisting}[style=cmd,gobble=8] + avr-gcc -Wall -Os -mmcu=atmega328p blink.c -S + \end{lstlisting} + \end{itemize} + +\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}