hence/presentation/presentation.md

139 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

2023-03-23 16:59:10 +00:00
---
title: Hence
version: 1.0.0
2023-04-05 12:41:53 +00:00
theme: uncover
class:
- invert
2023-03-23 16:59:10 +00:00
marp: true
size: 4K
---
# Hence
Ein Ausflug in die Welt einer virtuellen CPU
_Dominic Grimm_
<style scoped>
h1 {
padding-top: 1.5em;
}
</style>
![bg left](./assets/brian-kostiuk-S4jSvcHYcOs-unsplash.jpg)
---
# Inhalt
- Was ist eine CPU?
- Überblick Assembler
- Hence
- (Hence-)Forth
=> _Workshop_
---
# Was ist eine CPU?
- Herzstück eines Computers
- Kleiner Chip auf Hauptplatine
- Verarbeitung Arithmetik und Logik
- Zugriff auf Speicher und Peripherie
![bg right](./assets/harrison-broadbent-VOz0gV9HC0I-unsplash.jpg)
---
## Aufbau
![bg right:35% fit](./assets/was-ist-cpu-darstellung.png)
- _Steuerwerk, Rechenwerk, Cache, Register_
- Cache: schneller Speicher für oft benötigte Daten
- CPU kommuniziert über Bus-Systeme
- Leistung abhängig von Kernzahl, Taktfrequenz, Cache und Architektur
---
## Machine code
- Niedrigste Ebene der Programmierung.
- Binäre Instruktionen, direkt von der CPU ausgeführt
- Jede CPU-Architektur hat ihre eigene Maschinensprache, die spezifisch für diese Architektur ist
- Sehr effizient, da direkt von CPU ausgeführt
- Meist in höherer Programmiersprache geschrieben
2023-04-05 12:41:53 +00:00
=> _Assembler_
2023-03-23 16:59:10 +00:00
---
### Beispiel
2023-04-05 12:41:53 +00:00
_hexadezimal kodiert (`hexdump`)_
2023-03-23 16:59:10 +00:00
```
00000000 03 7f fc 86 03 a0 00 06 00 06 03 c0 02 8b 06 00 |................|
00000010 05 03 c0 01 8c 04 00 06 8c 03 00 01 06 00 05 03 |................|
*
```
| Code | Opcode | Argument |
| ---------- | -------------- | ---------------- |
| `03 7f fc` | `0x03` (`ts`) | `0x7ffc` (32764) |
| `86` | `0x06` (`tlr`) | |
| `03 a0 00` | `0x03` (`ts`) | `0xa000` (40960) |
---
# Überblick Assembler
![width:30cm](./assets/assembler.png)
---
# Hence
- Virtuelle "CPU" (eher SBC)
2023-04-05 12:41:53 +00:00
- Single core
- 16-bit Architektur
=> **_maximal 64kb Speicher_**
---
## Assembly
```assembly
.include "$lib/core.asm"
.include "$lib/std.asm"
.include "$lib/main.asm"
data:
; ...
.jump_main
main: .main main
ts 40 ; tmp = 40
tlr CORE_REG_A ; reg_a = 40
ts 2 ; tmp = 2
tlr CORE_REG_B ; reg_a = 40
; reg_b = 2
ts CORE_ALU_ADD ; tmp = 6
; reg_a = 40
; reg_b = 2
alu ; tmp = 42
tls ; stack = [42]
dbg ; => DEBUG: [42]
pop ; stack = []
.std_stop
```