2.2 KiB
2.2 KiB
title | version | theme | class | marp | size | |
---|---|---|---|---|---|---|
Hence | 1.0.0 | uncover |
|
true | 4K |
Hence
Ein Ausflug in die Welt einer virtuellen CPU
Dominic Grimm
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
Aufbau
- 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
=> Assembler
Beispiel
hexadezimal kodiert (hexdump
)
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
Hence
- Virtuelle "CPU" (eher SBC)
- Single core
- 16-bit Architektur
=> maximal 64kb Speicher
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