# Mit Maschinencode Programmieren



## Marschel7373 (19. Februar 2014)

Warum ist der Maschinencode so komplex ?
Wie kann man Spiele mit dem Maschinencode Programmirern ?
Gibt es Bücher über den Maschinencode?
Was kann man alles mit dem Maschinencode Programmieren ?
Worauf Programmiert man den Mashinencode ?


----------



## Keksdose12 (19. Februar 2014)

Marschel7373 schrieb:


> Warum ist der Maschinencode so komplex ?
> Wie kann man Spiele mit dem Maschinencode Programmirern ?
> Gibt es Bücher über den Maschinencode?
> Was kann man alles mit dem Maschinencode Programmieren ?
> Worauf Programmiert man den Mashinencode ?



1. Weil er für maschinen gemacht ist  stell dir vor du willst eine neue sprache lernen mit einer komplett irrationalen grammatik.

2.Gar nicht

3. Theoretisch alles aber man nimmt lieber höhere sprachen oder assembler 

4. Eigentlich ja garnicht aber man kann ihn im editor verändern


----------



## Marschel7373 (19. Februar 2014)

Könnte man denn mit den 1 und 0 Wörter schreiben ?


----------



## Incredible Alk (19. Februar 2014)

Wenn das nicht gehen würde könntest du all das hier nicht lesen


----------



## taks (19. Februar 2014)

http://en.wikipedia.org/wiki/Assembly_language#Assembler

Hier sollte eigentlich alles wichtige/grundlegende an Informationen drin stehen.


Und wegen den Einsen und Nullen:
http://de.wikipedia.org/wiki/Bin%C3%A4rcode


----------



## MaxRink (19. Februar 2014)

Im Prinzip ist Assembler sehr nahe am Maschinencode, es ist bur etwas besser lesbar. Allerdings lohnt es sich in den meisten Fällen nicht. Selbst bei der alten 8051 Familie ist meist C zu bevorzugen.


----------



## Keksdose12 (19. Februar 2014)

Du scheinst nicht sehr viel ahnung von programmierung zu haben ?  
Nicht böse gemeint aber googke doch mal was dich interessiert und schlag dir das mit dem spiel aus dem kopf ^^ "hello world" ist das ziel


----------



## Gast20140625 (19. Februar 2014)

Marschel7373 schrieb:


> Könnte man denn mit den 1 und 0 Wörter schreiben ?


 Klar, aber das macht niemand von Hand.

Wenn du wirklich was in 1 und 0 programmieren willst, blickst du ruck zuck absolut gar nix mehr durch. 
Das macht wirklich niemand. Deshalb hat man Assembler erfunden und auch damit wird kaum noch was programmiert.

Den Befehlssatz (Assembler) findest du meistens irgendwo in PDFs des Herstellers.



EDIT:
Hab n kleines Beispiel in den Tiefen meiner HDD gefunden. 


Spoiler



Ist ein winziges Programm, dass eigentlich nur einen Ausgang (LED) in Abhängigkeit eines Eingangs (Schalter) ein und aus schaltet.
Afaik für den 8051.

Als C Programm:

```
sfr schalter = 0xF8; //P5
sbit schalter0 = schalter^0;
sfr LED = 0xE8;    //P4
sbit LED0 = LED^0;

#include <reg517.h>
main(){
    while (1)  {
        if (schalter0) {
            LED0 = 0;
        }else LED0 = 1;
    }
}
```
Das ganze in Assembler:

```
S0 BIT 0xF8
LED0 BIT 0xE8

ORG 0000h
loop:    JB S0, weiter
        SETB LED0
        JMP loop

weiter: CLR LED0
        JMP loop

END
```
Und dann noch hexadezimal (Intel HEX-Format):

```
:0B080C0030F804C2E880F9D2E880F563
:03000000020800F3
:0C080000787FE4F6D8FD75810702080C33
:00000001FF
```
Jetzt stell dir noch vor, du "zerlegst" jeden dieser Buchstaben noch in vier 1en und 0en.


Verstehst du jetzt, wieso das keiner macht?


----------



## Incredible Alk (19. Februar 2014)

Wow, nettes Beispiel.

Da könnte man ja ganz neue Nerd-Langzeit-Grübelaufgaben machen.

"Gegeben ist
0B080C0030F804C2E880F9D2E880F56303000000020800F30C080000787FE4F6D8FD75810702080C3300000001FF
was passiert?"

Oder für die ganz harten die Pro-Version in Binärcode:
"00001011000010000000110000000000001100001111100000000100110000101110100010000000111110011101001011101000100000001111100111010010111010001000000011110101011000110000000000000000000000000000000000001000001000000000001111001100001100000010000000000000000000111100001111111111001001111011011011000111111010111010011110000111111111100100111101101101100011111101011101000000000000000000000000000000111111111"



...und ja, ich hab das grade wirklich umgewandelt... wollts einfach sehen


----------



## mattinator (19. Februar 2014)

john201050 schrieb:


> Klar, aber das macht niemand von Hand.
> 
> Wenn du wirklich was in 1 und 0 programmieren willst, blickst du ruck zuck absolut gar nix mehr durch.
> Das macht wirklich niemand.


 Oh doch ! Ist zwar nicht ganz das selbe, aber ich habe noch Programme mittels Lochstreifen und -karten "gestanzt".


----------



## Incredible Alk (19. Februar 2014)

Das gabs bei uns in den 70er Jahren anscheinend auch noch zur Maschinenbedienung bei automatisierten Zugprüfmaschinen wenn man den Bildern und Berichten der Kollegen glauben kann. Da gabs dann für verschiedene Programme/Proben eben entsprechende Lochkarten die man der Maschine geben musste damit sie weiß wie gezogen werden muss.

Irgendjemand musste diese Karten ja auch herstellen... und da die Programmeinstellungen von uns vorgenommen werden/wurden gabs vermutlich auch einen armen Menschen der das in 0 und 1 umwandelte und nachts vom Locher träumte.


----------



## X-CosmicBlue (19. Februar 2014)

Marschel7373 schrieb:


> Warum ist der Maschinencode so komplex ?
> Wie kann man Spiele mit dem Maschinencode Programmirern ?
> Gibt es Bücher über den Maschinencode?
> Was kann man alles mit dem Maschinencode Programmieren ?
> Worauf Programmiert man den Mashinencode ?


 


Keksdose12 schrieb:


> 1. Weil er für maschinen gemacht ist  stell dir vor du willst eine neue sprache lernen mit einer komplett irrationalen grammatik.
> 
> 2.Gar nicht
> 
> ...


 1. Ein PC ist auch eine Maschine 
2. Geht sehr wohl.
Ja, es gibt Bücher.
3. Na, da widersprichst Du Dir ja selbst bei 2.
4. Auf einem x-beliebigen Editor...Du mußt dann nur noch den Code auf die Maschine bekommen...


----------



## Gast20140625 (19. Februar 2014)

mattinator schrieb:


> Oh doch ! Ist zwar nicht ganz das selbe, aber ich habe noch Programme mittels Lochstreifen und -karten "gestanzt".


 Ich meinte macht niemand mehr freiwillig.
Das man das in grauer Vorzeit mal machen musste, weiß ich auch. Dann gabs Assembler und dann die Hochsprachen.




Incredible Alk schrieb:


> Das gabs bei uns in den 70er Jahren  anscheinend auch noch zur Maschinenbedienung bei automatisierten  Zugprüfmaschinen wenn man den Bildern und Berichten der Kollegen glauben  kann. Da gabs dann für verschiedene Programme/Proben eben entsprechende  Lochkarten die man der Maschine geben musste damit sie weiß wie gezogen  werden muss.
> 
> Irgendjemand musste diese Karten ja auch  herstellen... und da die Programmeinstellungen von uns vorgenommen  werden/wurden gabs vermutlich auch einen armen Menschen der das in 0 und  1 umwandelte und nachts vom Locher träumte.


 Sowas hat mein ehemaliger Chemielehrer auch erzählt. Debuggen muss die Hölle gewesen sein. 
Er  meinte: "Zuhause die Karten machen, in die Uni latschen, (da gabs den  einzigen Rechner) Karte reinstecken, geht nicht.  Also wieder  heimlatschen, gucken wo klemmts, neue Karte machen, wieder  hinlatschen....."


----------



## DarkMo (19. Februar 2014)

hmm, du bist allein auf einer (sehr sehr großen ^^) insel und sollst ein atomkraftwerk bauen. geht das? sicher ^^ aber einfach is was anderes 

- du musst irgendwie erstmal was zum feuer machen suchen
- du brauchst nahrung
- du musst irgendwie metallhaltige erze ausbuddeln
- feuer und erze ergeben dann eventuell mal irgendwann eisen
- damit kannst du dann bessere werkzeuge bauen (assembler? ^^)
- mit denen kannst du besser jagen und an weiteres erz kommen
- deine erzverhüttung kannst du damit aufpolieren
- du gewinnst schneller und besser erze
- du suchst auch noch nach sand und krams für beton
- du bastelst dir nen bleianzug (vorsorglich  ) und baust irgendwann uran ab usw usf...

also sowas wie assembler und hochsprachen wie c usw sind auch nix andres als ne lebensvereinfachung. prinzipiell ist es möglich im maschinencode zu schreiben. wäre das nicht möglich, würde kein computer funktionieren ^^ die höheren programmiersprachen lassen einen die elemente der tieferen nur einfach besser verwenden. in logikgattern und registern und dem ganzen kram werden die 1 und 0 gespeichert, verarbeitet und hin und hergeschoben. einfachste programme lassen sich locker noch im maschinencode händisch bauen. additionen oder so würd ich mal als bsp. anführen, aber da gibts sicher leute, die das besser wissen >< ich beschreib das auch nur aus ner sehr diffusen sichtweise ^^ dann kommt assambler und nutzt solche "komplexen" maschinencode teile und fügt vllt verschiedene davon zu einer einzigen funktion zusammen. in assambler kann man nun mit einem befehl ganze heerscharen an maschinencode befehlen auslösen. und c usw? die nutzen wiederrum assambler als grundlage (also ich glaubs ^^ 100% sicher bin ich mir ned grad *hust*) und basteln aus den assambler befehlen wieder lustige easy-to-use funktionen. die vorteile jedes abstraktionsschrittes ist dann eben, dass sich die lesbarkeit erhöht.

hier sieht mans schön: Maschinensprache
maschinencode in hex: C7 45 FC 02 -> bitte was? ^^
assambler: mov  DWORD PTR [rbp-4], 2 -> könnte man schon erahnen. irgendeine speicherbelegung. dieser pointer PTR wird irgendwie mit dem DWORD wert 2 belegt oder so.
und dann in c: int a = 2; -> ahhh ^^ einer variablen wird der wert 2 zugeordnet.

macht alles das selbe, aber wieso sollte man im urschlamm wühlen, wenn sich generationen schlauer leute die köpfe zerbrochen haben, wie man es einfacher hinbekommt?  oder zündest du dir die zigarette auch mit 2 feuersteinen an, die du aneinander schlägst? ^^


----------



## Crysis nerd (20. Februar 2014)

DarkMo schrieb:


> ...


Auch wenn ich deine Smiley-behaftete Schreibweise manchmal merkwürdig finde, ist der Text recht neat. Das Beispiel passt gut.
Dein PC arbeitet Maschinencode ab sobald er angeschaltet wird. Du kannst also auch direkt Maschinencode programmieren und die Maschine das abarbeiten lassen. Aber wie hier schon gut gezeigt wurde, ist das eine ziemlich müßige Arbeit und genau dafür wurden Hochsprachen entwickelt. Die Hochsprachen können nicht direkt ausgeführt werden (weil der PC dumm ist und Hochsprachen nicht versteht), sondern die Hochsprachen müssen erst "compiliert" werden. Und Compilieren ist einfach nur der Vorgang, in dem Hochsprachen zu Maschinencode verarbeitet werden.

Und zu deiner "also ich glaubs": Ja "C nutzt Assembler". Also... more or less. Wie gesagt, alle Hochsprachen compilieren zu Maschinencode (oder Bytecode bei JIT Compilern wie Java (egal, ignorieren)). Und Assembler ist ja quasi nur eine Pseudosprache, die nur schöne Labels für HexCodes hat. Meist nutzen Compiler intern noch etwas andere Datenstrukturen, die dann im letzten Schritt zum Maschinencode synthetisiert werden. Compiler sind eh eine Sache für sich 

Und @Incedible Alk: Welche Architektur ist das denn? Ohne die Info können wir nur raten


----------



## DarkMo (20. Februar 2014)

Crysis nerd schrieb:


> Ja "C nutzt Assembler".


 ich wusst jetz ned mehr genau, ob da nich noch irgendein zwischenschritt drin war, daher das "glaubs". aber gut zu sehen, dass mein halbwissen nich ganz so falsch is


----------



## Superwip (20. Februar 2014)

Es gibt heute praktisch keinen Grund mehr manuell in Maschinensprache zu programmieren. Wenn man in Assambler programmiert gibt es auch keine "semantische Lücke", im Vergleich zur Maschinensprache hat man eigentlich nur Vorteile.

In Maschinensprache programmieren ist nur sinnvoll wenn man einen Speicher _manuell beschreiben_ will, etwa wenn man eine Lochkarte manuell stanzen will oder wenn man eine diskrete Diodenmatrix manuell verdrahten will aber das hat man vielleicht 1950 gemacht (in einigen Fällen vielleicht auch noch 10 oder 20 Jahre später), heute ist das aber völlig obsolet.

Wenn du ohne einen vorhandenen Computer zu verwenden einen Computer bauen wollen würdest dann würdest du an einer gewissen Stelle nicht darum herumkommen diesen manuell in Maschinensprache zu programmieren aber na ja...



> hmm, du bist allein auf einer (sehr sehr großen ^^) insel und sollst ein atomkraftwerk bauen. geht das? sicher ^^ aber einfach is was anderes



Hm... Industrialcraft


----------



## Marschel7373 (20. Februar 2014)

Wie sah die Programmierung vom Intel 4004 aus ?


----------



## taks (20. Februar 2014)

Hier hast was dazu 

http://bitsavers.trailing-edge.com/pdf/intel/MCS4/MCS-4_Assembly_Language_Programming_Manual_Dec73.pdf


----------



## Marschel7373 (20. Februar 2014)

danke


----------



## Marschel7373 (20. Februar 2014)

und wie schreibe ich z.B. ein Spiel damit ?


----------



## Gast20140625 (20. Februar 2014)

Na schreiben, irgendwie auf die Hardware bekommen. Fertig. 

Ganz einfache reaktions Spiele oder so kannst du schon recht gut in Assembler machen.
Nimmst du dir irgendein Microcontroller inkl. Entwicklerboard. Dann schließt du da (je nach dem was du machen willst) ein paar LEDs und Schalter an. 
Und dann muss man immer wenn z.B. LED1/LED2 an/aus geht Schalter 1/2 an/aus machen. Bist du zu langsam oder hast es falsch gemacht -> Game Over.

Sowas wäre z.B. ganz einfach zu machen.


----------



## Marschel7373 (20. Februar 2014)

ich meinte jetzt ehr ein computerspiel wie z.B. minecraft


----------



## taks (20. Februar 2014)

Marschel7373 schrieb:


> ich meinte jetzt ehr ein computerspiel wie z.B. minecraft


 
Mit dem 4004 ist das nicht möglich.
Sonst ein ganzes Spiel a la Minecraft in Assambler schreiben grenzt vermutlich an eine Lebensaufgabe.


----------



## Marschel7373 (20. Februar 2014)

Es sollte jetzt auch nicht auf den 4004 bezogen sein,


----------



## Gast20140625 (20. Februar 2014)

Dann bleibt noch die Lebensaufgabe.

Du musst im Gegensatz zu Hochsprachen ja die ganze Speicherverwaltung von Hand machen.
Außerdem hast du keine Objektorientierung oder gar irgendwelche fertigen Engines, so dass du irgendwas nicht selbst machen müsstest.

Wenn du wirklich *alles selbst* in Assembler schreiben willst, wirst du damit nie fertig.


----------



## Marschel7373 (20. Februar 2014)

ok danke


----------



## XPrototypeX (20. Februar 2014)

Zumal du anscheinend kein Plan über Assembler noch über das Programmieren an sich zu haben scheinst. Selbst in einer Hochsprache wie C++ oder Java wird einige Zeit ins Land ziehen bevor du etwas vorzeigbares hast.


----------



## Marschel7373 (20. Februar 2014)

also den maschinencode kann ich, weiß aber nicht wasich damit machen kann.
Ich kann es nur, weil ich halt gerne rechne.


----------



## Incredible Alk (20. Februar 2014)

Marschel7373 schrieb:


> also den maschinencode kann ich


 Dir ist hoffentlich der Unterschied zwischen "können" und "kennen" bewusst...


----------



## Marschel7373 (20. Februar 2014)

> Dir ist hoffentlich der Unterschied zwischen "können" und "kennen" bewusst



Dann sag ich es mal anders, ich kenne und kann mit 1 und 0 bzw. Hexadzimalen schreiben


----------



## Incredible Alk (20. Februar 2014)

Ja. Das kann man in 20 Minuten lernen wenn man fit ist.
Für Maschinencode zu "können" braucht man Jahre. Aber das ist wie schon erläutert wurde ja heute nicht mehr notwendig da es entsprechende Sprachen ja gibt (wo man aber um wirklich gut zu sein ebenfalls Jahre üben muss).


----------



## Marschel7373 (20. Februar 2014)

Sollte man denn mit Java oder C++ anfangen ?


----------



## Incredible Alk (20. Februar 2014)

Das ist Geschmackssache. Keine der Sprachen ist (wenn du mich "Anfänger" in den Sachen fragst) wirklich einfacher oder schwerer als die andere, sie sind nur eben etwas anders aufgebaut/haben ihre Eigenheiten.


----------



## Marschel7373 (20. Februar 2014)

ok eine frage noch wie ist es mit dem Buch ? http://www.amazon.de/Visual-2010-sc...s&ie=UTF8&qid=1392915697&sr=1-32&keywords=c++

Beschreibt das Buch alles von anfang an, weil ich kann nichts was mit wörter schreiben in einer Prgrammiersprache zu tun hat ?


----------



## X-CosmicBlue (20. Februar 2014)

Ich würde mit (Turbo) Pascal anfangen, vielleicht auch schon Delphi und dann halt zu C++ oder Java wechseln.
An vielen FHs und Unis wird nicht umsonst mit diesen "Lehr"-Programmiersprachen begonnen...


----------

