Hier seht Ihr ein ganz simples Hello World mit Assembler fuer Intel x86 Prozessoren auf Linux.
Ihr koennt als *.s file speicher und mit gcc compilieren.
Das ganze sollte euch nur mal einen kleinen Einblick geben, in assembler.
Die wichtigsten Sachen wie Stack, Funktionsaufrufe,MemoryManagment, Multithread usw. kann ich nicht in so einem Forum in 3-4 Seiten erklaeren, dafuer gibt es gute Buecher. Aber ich kann euch einen Gusto geben, und wenns auch gefaehlt, dann taucht in die Welt der einzig richtigen programmiersprache ein: Assembler.
Ich habe vor einem halben Jahr damit angefangen und mich flasht es total. Es ist enorm cool, auch wenn es im Alltag praktisch immer zu aufwendig ist in assember etwas zu programmieren.
Das folgende Assember program entspricht vom sinn her ungefaehr dem C-Code:
-----------------------------------
int main()
{
printf("lima-city rules!");
return 0;
}
-----------------------------------
Mit besten Gruessen
Andrin von Rechenberg
Hier nun das Program:
-----------------------------------
.section .rodata # Zeigt dem Compiler an, dass in diesem Teil des EXEs daten stehen
.hello: # Definiert eine Sektion namens .hello
.string "lima-city rules!" # schreibt in diese Sektion den String Lima-city rules (das findet man auch nacher noch in der EXE)
.text # Beginn der sektion .text
.align 4 # Memory 4 Alignen, braucht man nicht unbedingt, ist aber schneller...
.globl main #}
.type main,@function #}---> Hier wird dem compiler erklaert das wir hier anfangen.
main: #}
movl $1,%ebx # Wir schreiben die Decimal Zahl 1 in das ebx register auf dem Processor
movl $.hello, %ecx # Wir schreiben die Memory adresse von der sektion .hello in das ecx register auf der CPU
movl $17,%edx # Wir schreiben die Laenge des Strings in edx
movl $4,%eax # Wir schreiben den internen command fuer write in eax
int $0x80 # Wir rufen den internal command 0x80 (hex) auf, entspricht mit eax=4 einem write ecx to screen of length edx.
movl $0,%ebx #}
movl $1,%eax #}---> Abschluss internal command, damit es keine Segmentation Faults gibt
int $0x80 #}