# Assembler: Ungewollte Zeichen auf STDOUT



## Grulf (15. Mai 2008)

Hallo,
seit neuestem beschäftige ich mich mal mit Assembler. Ich benutze übrigens NASM.
Nun habe ich folgendes Programm:

```
mov dx,message     ;   message nach dx laden
mov ah,0x9     ;   09h (Funktion zur Stringausgabe) nach ah laden
int 0x21     ;   Interrupt 021h

mov ah,0x4C     ;   04Ch (Funktion zum erfolgreichen Beenden des Programmes) nach ah laden
int 0x21     ;   Interrupt 021h

message db 'Hello world!',0x0D,0x0A,'$'     ;   Deklaration message (C-äquivalent: "Hello World!\n\f$")
```

Kompiliert mit dem Befehl: 
---8<---
nasm test.asm -f bin -o Hello.exe
---8<---
Das sollte ein einfaches "Hello World!" - ohne "" - ausgeben. Der Output lautet jedoch wie folgt:

```
?(K?(V?((??? ?               ??µ ??¶ ? ??        ?               ?!?

             ?? ?      ?!?L?!Hello world!
```

Was ist da falsch?

Gruß,
Grulf.


----------



## takidoso (23. Juni 2008)

Die Zeiten dass ich Assemblersprachen gemacht habe sind eigetnlich vorbei.
Es wäre dennoch sicher hilfreich, wenn Du Prozessor und Betriebssystem nennst, da Assembler eigtnlich keine Sprache vielmehr eine Sprachfamilie ist.

Pauschal sieht es so aus, als ob Deine Ausgaberoutine einen anderen Offset als Basis zu nehmen scheint. Vielleicht solltest Du mal einen Debugger bemühen, dann wirst Du vielleicht schlauer was da unter der Decke passiert.

viel Glück

Takidoso


----------



## deepthroat (23. Juni 2008)

Hi.

Du mußt dem Assembler die Speicherorganisation mitteilen. In deinem Fall (COM Programm) beginnt dein Programm erst ab Stelle 100h:

```
org 100h
```

Siehe http://de.wikibooks.org/wiki/Assemb..._Assemblerprogramm#.22Hello_World.22-Programm

Gruß


----------

