Was ist eine Variable? Vom Maschinencode zum Quellcode

  Рет қаралды 12,055

Boris Gedat

Boris Gedat

Күн бұрын

Пікірлер: 15
@alexanderwinterholler4628
@alexanderwinterholler4628 2 жыл бұрын
Boris eine der besten Erklärungen die ich auf KZbin gesehen hab. Auch das Video davor. Danke
@BorisGedat
@BorisGedat 2 жыл бұрын
vielen Dank Alexander für dein Feedback. es motiviert mich weitere Videos dieser Art zu produzieren wenn ich merke, dass es Menschen gibt, denen diese Art von Videos gefallen und denen ich damit weiterhelfen kann. vielen Dank noch mal, weiterhin viel Spaß und Erfolg beim Lernen!
@IAkar
@IAkar 2 жыл бұрын
Perfekt!
@BorisGedat
@BorisGedat 2 жыл бұрын
danke 🤓👍🏼
@svenwindpassinger2170
@svenwindpassinger2170 11 ай бұрын
Erinnert mich stark an RPN Rechner LG Sven
@andreasgoas9275
@andreasgoas9275 2 жыл бұрын
Hallo, kannst Du mir bitte helfen? Ich will wissen ob man einen Quellcod von einem Jahr zum Beispiel Speichern kann und danach durch ein Autobot auf 1Minute, danach 5 Minuten, 10 Min., 30 Min., 1h, 4 h, 1D, 1 Woche. Danach alles von neu.... Ist das möglich??? Dankeschön für die Rückmeldungen ;D
@eb4416
@eb4416 4 жыл бұрын
Bester Mann!
@BorisGedat
@BorisGedat 2 жыл бұрын
beste Abonnent!
@barbarairena6714
@barbarairena6714 5 жыл бұрын
woher weiß man dass eine (Speicher-)adresse im Arbeitsspeicher frei ist und verwendet werden kann? Muss man - bevor man mit der Assembler-Programmierung beginnt- sich zunächst überlegen, wieviel Speicheradressen man benötigt und diese dann irgendwie "reservieren" . Und noch eine Frage: wenn man die Variablen bzw. den Speicherplatz nicht mehr benötigt, muss man den Speicherplatz dann mit einem eigenen Befehl wieder löschen/freigeben ? Ich habe gelesen dass es in manchen Programmiersprachen so genannte Garbage Collectoren gibt, in anderen ( zb C++) aber muss die Speicherverwaltung "manuell " durchgeführt werden....Danke im Voraus für Ihre Antwort!
@BorisGedat
@BorisGedat 5 жыл бұрын
Das Speichermanagement liegt beim Betriebssystem, welches das Programm lädt. Die Variablen, die ein Programm erzeugt, werden in einem eigens dafür reservierten Bereich dem sog. Stack wie in einem Stapel aufeinander gelegt. Um die Daten auf dem Stapel muss sich der Programmierer nicht kümmern, denn wenn ein Programm-Abschnitt (Funktion, Methode) abgelaufen ist, wird der Zeiger, der auf die Spitze des Stapels zeigt wieder zurückgesetzt. Es gibt aber auch Daten wie z.B. Objekte, die nicht verschwinden sollten, wenn eine Funktion beendet wurde. Diese werden in einem anderen Bereich im Arbeitsspeicher abgelegt, den man als Heap (Halde) bezeichnet. Wenn man eine Programmiersprache verwendet, bei der der Compiler selbstausführenden Code erzeugt, muss der Programmierer diesen Bereich am Heap selbst anfordern und entsprechend wieder freigeben, wenn das Programm die Daten auf dem Heap nicht mehr braucht. Bei Programmiersprachen wie Java, die durch einen Interpreter ausgeführt werden, muss sich der Programmierer nicht selbst um das Aufräumen am Heap kümmern, es gibt dafür sog. Garbage Collectoren des Interpreters, die automatisch erkennen, wenn im aktuellen Programm-Ablauf keine Referenzen auf Objekte auf dem Heap mehr existieren und diese Bereiche dann freigeben.
@barbarairena6714
@barbarairena6714 5 жыл бұрын
Boris Gedat vielen Dank für die ausführliche Antwort!!!!
@freecrac
@freecrac 5 жыл бұрын
Genauer gesagt wird der Speicher zu aller erst einmal vom Mainboard-Bios verwaltet und genau darüber läßt sich der freie Speicher auch für ein Betriebsystem ermitteln. wiki.osdev.org/Detecting_Memory_%28x86%29
@freecrac
@freecrac 5 жыл бұрын
Werte auf den Stack zu schieben ist in mancher Hinsicht nicht gerade die beste Idee. Weil Push- und Pop-Befehle vertrödeln auf älteren Rechnern vor dem Pentium 4 (x86-Architektur) noch viele Taktzyklen im Vergleich zu Mov- und Mov-Befehle beispielsweise mit einem Zugriff auf ein dafür reservierten Bereich vom Datensegment. Es entfällt das umständliche Herumhantieren mit einem Stackpointer, um in verschachtelten Sub-Routinen auf die Werte zugreifen zu können. Nach dem Pop sind die Werte auf dem Stack nicht mehr da und müßten für weitere Zugriffe erneut auf den Stack geschoben werden. Auf Werte aus einem reservierten Datenbereich kann beliebig oft zugegrifen werden, ohne das wir uns um den Stackpointer kümmern müssen. Einige Werte können wir auch einfach in den CPU-Registern an Subroutinen mit übergeben ohne einen Speicherzugriff. Bei Push und Pop haben wir immer einen Speicherzugriff auf den langsamen RAM. Ich habe hier mal eine kleine Test-Routine von Frank Kotler beigefügt, mit der es festgestellt werden kann, ob eine Push/Pop-Kombination, oder ob die Mov/Mov-Kombination schneller ausgeführt wird. Für Rechner vor Pentium 4 ersatzweise AMD-CPUs mit CPUID-Befehl verfügbar. > Frank Kotler > > ; nasm -f elf pushvsmov.asm -d_MOV (or "-d_PUSH") > ; ld -o pushvsmov pushvsmov.o > > global _start > > section .bss > eax_sav resd 1 > ebx_sav resd 1 > ecx_sav resd 1 > edx_sav resd 1 > esi_sav resd 1 > edi_sav resd 1 > > section .text > _start: > nop > xor eax, eax > cpuid > rdtsc > push edx > push eax > %ifdef _MOV > mov [eax_sav], eax > mov [ebx_sav], ebx > mov [ecx_sav], ecx > mov [edx_sav], edx > mov [esi_sav], esi > mov [edi_sav], edi > > mov edi, [edi_sav] > mov esi, [esi_sav] > mov edx, [edx_sav] > mov ecx, [ecx_sav] > mov ebx, [ebx_sav] > mov eax, [eax_sav] > %elifdef _PUSH > push eax > push ebx > push ecx > push edx > push esi > push edi > > pop edi > pop esi > pop edx > pop ecx > pop ebx > pop eax > %else > %error 'must define _MOV or _PUSH' > %endif > > xor eax, eax > cpuid > rdtsc > pop ebx > pop ecx > sub eax, ebx > sbb edx, ecx > > call showeaxd > > xor ebx, ebx > mov eax, 1 > int 80h > > ;--------------------------------- > showeaxd: > push eax > push ebx > push ecx > push edx > push esi > > sub esp, 10h > lea ecx, [esp + 12] > mov ebx, 10 > xor esi, esi > mov byte [ecx], 0 > .top: > dec ecx > xor edx, edx > div ebx > add dl, '0' > mov [ecx], dl > inc esi > or eax, eax > jnz .top > > mov edx, esi > mov ebx, 1 > mov eax, 4 > int 80h > > add esp, 10h > > pop esi > pop edx > pop ecx > pop ebx > pop eax > ret
@peterpieras
@peterpieras 4 жыл бұрын
Danke!
@BorisGedat
@BorisGedat 4 жыл бұрын
🤓👍🏼
Wie funktionieren selbstausführbare Programme?
3:03
Boris Gedat
Рет қаралды 4,3 М.
Wie funktioniert der Prozessor (CPU)?
12:17
Boris Gedat
Рет қаралды 90 М.
"كان عليّ أكل بقايا الطعام قبل هذا اليوم 🥹"
00:40
Holly Wolly Bow Arabic
Рет қаралды 5 МЛН
How it feels when u walk through first class
00:52
Adam W
Рет қаралды 22 МЛН
Миллионер | 1 - серия
34:31
Million Show
Рет қаралды 2,9 МЛН
Programmieren Lernen: Die BESTE Methode (für Anfänger)
23:46
Niklas Steenfatt
Рет қаралды 1,6 МЛН
Was ist XML?
17:47
Boris Gedat
Рет қаралды 32 М.
Linux Basiswissen für Einsteiger
1:19:42
LinuxHähnchen
Рет қаралды 8 М.
Wie funktioniert das Internet?
9:13
Lesics Deutsch
Рет қаралды 304 М.
Grundlagen IT: Prozessoren & Maschinencode (Vorlesung 5)
1:14:52
Warum niemand im Zentrum der USA leben möchte
9:56
SONNENSEITE
Рет қаралды 344 М.
Programming with Math | The Lambda Calculus
21:48
Eyesomorphic
Рет қаралды 211 М.
Was sind Programmiersprachen? - einfach erklärt!
3:01
Timo Bäuerle
Рет қаралды 16 М.
Der Speicher - Komponenten eines Computers 3
6:06
Informatik - simpleclub
Рет қаралды 186 М.
"كان عليّ أكل بقايا الطعام قبل هذا اليوم 🥹"
00:40
Holly Wolly Bow Arabic
Рет қаралды 5 МЛН