Ich komm mit keiner Sprache zurecht

Post Reply
Message
Author
Möchtegernprogrammierer

Ich komm mit keiner Sprache zurecht

#1 Post by Möchtegernprogrammierer »

Nachdem ich mit C und Python nicht zurecht kam,
versuch ich Assembler zu lernen, klappt aber nicht.
Einen Buch entsprechend hab ich folgendes eingegeben:
DATEN SEGMENT
Meldung db "Hoffentlich ist Assembler nicht zu schwer."
db "$"

DATEN ENDS
CODE Segment
ASSUME CS:CODE,DS:DATEN
Anfang: mov ax,DATEN
mov ds,ax
mov dx,offset Meldung
mov ah,9
int 21h

Und das sagt gcc :
as1.a: Assembler messages:
as1.a:1: Error: junk `Assembler-Programm' after expression
as1.a:1: Error: suffix or operands invalid for `das'
as1.a:2: Error: no such instruction: `daten SEGMENT'
as1.a:3: Error: no such instruction: `meldung db "Hoffentlich ist Assembler nicht zu schwer."'
as1.a:4: Error: no such instruction: `db "$"'
as1.a:6: Error: no such instruction: `daten ENDS'
as1.a:7: Error: no such instruction: `code Segment'
as1.a:8: Error: no such instruction: `assume CS:CODE,DS:DATEN'
as1.a:9: Error: too many memory references for `mov'
as1.a:10: Error: too many memory references for `mov'
as1.a:11: Error: too many memory references for `mov'
as1.a:12: Error: too many memory references for `mov'
as1.a:13: Error: junk `h' after expression
as1.a:13: Error: suffix or operands invalid for `int'

Ist das Buch oder der Compiler fehlerhaft?
Ich will es halt mit Assembler noch versuchen,
wenn das,wo nach es aussieht, auch nicht klappt,
verschrotte ich den PC und such mir ein anderes
Hobby.Ich versuch jetzt seit Jahren irgend wie
mit den Kisten klar zu kommen.

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#2 Post by klopskuchen »

int 21h
Unter Linux wird der Interupt Nr. 80 aufgerufen, um an den Kernel zu übergeben. Das was du geschrieben hast ist ein DOS-Programm. Sofern du keinen uralten 16-Bit-Rechner hast, heißen die Register nicht ax, bx... sondern eax, ebx...(e für extended).
Und das sagt gcc :
Der gcc verwendet voreingestellt das Programm "as" zum assemblieren. "as" verlangt die AT&T-Syntax. Deine Schreibweise ist die der Intel-Syntax. Um Code aus der Intel-Syntax zu übersetzen, kannst du das Programm "nasm" verwenden.

Intel-Syntax (hallo.asm):

Code: Select all

; Kommentare stehen hinter einem Semikolon
section .text
              
global _start

msg db  'Hallo welt.',0x0A
len     equ $ - msg

_start:
mov eax,4
mov ebx,1
mov ecx,msg
mov edx,len
int 0x80

mov eax,1
int 0x80 
Programm übersetzen:
nasm -f elf hallo.asm
Objektdatei hallo.o linken:
ld hallo.o -o hallo



AT&T-Syntax (hallo.s):

Code: Select all

# Kommentare stehen hinter einer Raute
.data

msg:    .ascii  "Hallo Welt.\n"
lmsg:   .long   .-msg

.text

_start:
.global _start
movl    $4,%eax
movl    $1,%ebx
leal    msg,%ecx
movl    lmsg,%edx
int     $0x80

movl    $1,%eax
int     $0x80
Programm übersetzen:
gcc -c hallo.s
Programm linken:
ld hallo.o -o hallo

Eine Liste der Nummern der Systemaufrufe steht in der Datei "/usr/include/asm-i386/unistd.h". Mit deutschsprachigen Anleitungen sieht es eng aus. Eine sehr gute: http://www.fh-frankfurt.de/~dumbach/manuskripte/. asmanu_9.pdf heißt sie. Die Datei gdi_w01_v2.pdf ist genauso interessant (gdi = Grundlagen der Informatik).


MfG, Klopskuchen
When all else fails, read the instructions .

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#3 Post by Janka »

Programmieren lernt man vermutlich immer aus Spaß...

Was möchtest du denn überhaupt erreichen? Wenn dir C zu unverständlich war ist Assembler eine ganz schlechte Wahl. Irgendwelche Beispiele aus Büchern übernehmen bringt dich auf keinen Fall weiter.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#4 Post by klopskuchen »

@Janka
Ich wette er sucht die Brücke zwischen dem Abstrakten des Rechners und der Physik. Eine konkrete Vorstellung was da vor sich geht. Da ist asm doch gar nicht schlecht, da er sich zwangsläufig mit CPU, Speichermanagement(im physikal. Sinne) usw. befassen muß.

MfG, Klopskuchen
When all else fails, read the instructions .

Möchtegernprogrammierer

Danke

#5 Post by Möchtegernprogrammierer »

Danke, ich hab mir die PDF Dateien über Assembler und auch über C
abgespeichert und ich lass natürlich den PC leben :)
Ich werd manchmal etwas depressiev, wenn so gar nichts klappt,
hat sicher was mit den enormen Problemen zu tun, die ich am Anfang
mit PCs hatte. :cry:
C klappt so weit schon, aber letztendlich hab ich aus keinen Buch
was lernen können, was nicht auch ein cleveres bash-scipt kann.
Jetzt muss ich in C erst mal umlernen, weil ich einen Controller
programmieren will, wo halt ganz andere Bibliotheken gebraucht
werden. Eigentlich hätte ich das, laut Lehrplan, in meiner Ausbildung
zum Energieelektroniker lernen müssen, wie so Vieles,war aber nichts.
Mit Assembler komm ich im 64kB-Speicher natürlich weiter, muss nur
natürlich andere Befehle lernen, denke aber,dass ich trotzdem mit
Programmieren für den PC erst mal besser lerne und das will ich
ja auch können, die extremen Möglichkeiten und überhaupt die
direckt am Prozessor arbeitende Sprache, faszinieren mich sehr.
Wenn ich vortgeschrittener bin, stürm ich die Berufsschule,
installier auf alle Rechner das bessere System und zeig den
Lehrern, wie man das richtig macht :wink:

schmackes

#6 Post by schmackes »

die haben wir am liebsten!
Wenn ich vortgeschrittener bin, stürm ich die Berufsschule,
installier auf alle Rechner das bessere System und zeig den
Lehrern, wie man das richtig macht
es reicht nicht mehr nur ein paar neue treiber zu installieren, weil der admin hat ja keine ahnung. also kommt der sohn mal vorbei weil der ist ja ein computerfreak, der kann das besser.
die admins lieben so leute wie dich.

zu faul zum einloggen

#7 Post by zu faul zum einloggen »

scmackes wrote:die admins lieben so leute wie dich.
...die sich dermaßen reinhängen, daß ein kurzweiliger Rückschlag Gedanken an die Vernichtung des Rechenknechtes aufkommen lassen. Nun sei mal nicht so. ;)


MfG, Klopskuchen

Post Reply