Datum: 29.06.2008 18:35
Hallo, ich beginne gerade Assembler zu lernen und habe den Assembler von Microsoft MASM als Assembler (und Linker) benutzt. Leider funktioniert mein "Hallo Welt" Programm nicht, wie es soll. Ich habe keinen Fehler im Quelltext gefunden, aber es funktioniert trotzdem nicht. Eine Bemerkung noch: Ich benutze dummerweise Windows Vista als Betriebssystem. Wer weiß, wo der Fehler liegt? Thomas
Datum: 29.06.2008 18:36
Sry. der Screenshot wurde nicht angenommen.
Datum: 29.06.2008 18:58
Auch wenn ich mich nicht so sehr mit Assembler auf PC auskenne, wird es wohl an Vista liegen. Für die Ausgabe auf der Konsole benutzt du ja nen DOS-Interrupt (Int 21h). Da Vista aber keine DOS-Anwendungen mehr unterstützt kann ich mir gut vorstellen, dass der Interrupt einfach nimmer funktioniert. Aber so 100% sicher bin ich mir da nicht. MfG Marius
Datum: 29.06.2008 19:05
Probier mal mov ax, seg Meldung statt mov ax, @data
Datum: 29.06.2008 19:08
@Marius Wensing: Ok. Funktioniert es denn wohl mit XP? @Andreas Kaiser: Nein, das bringt nichts. :-(
Datum: 29.06.2008 19:11
Bevor du hier XP wieder rauskramst, kannst du das Programm ja einfach mal in der DOS-Box testen: http://www.dosbox.com/ Das Programm emuliert sozusagen nen kompletten DOS-PC mit allem drum und dran. Wenns damit nicht funktioniert, dann weiß ich auch nicht, wo der Fehler noch zu suchen ist. MfG Marius
Datum: 29.06.2008 19:17
Bei mir lässt es sich dann sowohl fehlerfrei übersetzen, als auch erfolgreich ausführen. Allerdings unter XP.
Datum: 29.06.2008 20:08
Mh, komisch, ich habe es jetzt auch unter XP probiert es funktioniert nicht. Angeblich wegen einem error A2006: undefined symbol: DGROUP (Zeile 6) Was heiß das? Thomas
Datum: 29.06.2008 20:13
Das heisst, dass mov ax, @data so nicht funktioniert. Warum nimmst du nicht einfach das Statement, mit dem man das seit Anbeginn der 8086-er gemacht hat? Damit jedenfalls funktioniert es:
.model small
.stack 100h
.data
msg db "Hallo$"
.code
start: mov ax, seg msg
mov ds, ax
mov dx, offset msg
mov ah, 09h
int 21h
mov ah, 4ch
int 21h
end start
|
[d:\src\test]a1 Hallo
Datum: 29.06.2008 20:27
mh, klappt auch nicht: Zeile 6: Error: A2004: symbol type conflict Zeile 11: warning: A4023: with /coff switch, leading underscore required for start address: start
Datum: 29.06.2008 20:36
Wenn's unbedingt COFF sein muss, dann musst du ohne mich weiterraten. Mit dem zeitgemässeren OMF jedenfalls klappt das besser. [d:\src\test]ml /omf /c a1.asm Microsoft (R) Macro Assembler Version 7.10.2179 Copyright (C) Microsoft Corporation. All rights reserved. Assembling: a1.asm Wie man allerdings den Linker vom MASM32 zu Fuss passend aufruft, habe ich nicht parat. Ich habe das der Einfachheit halber dem Digital Mars Compiler und dessen Linker überlassen.
Datum: 29.06.2008 23:17
Entschulediung, aber ich bin Anfänger: Was ist Coff und was ist Omf? Thomas
Datum: 29.06.2008 23:17
=> www.gidf.de
Datum: 30.06.2008 15:51
Nimm besser einen zeitgemäßen assembler, zB. nasm.
org 100h mov si,hello write: lodsb or al,al jz ende mov ah,0Eh int 10h jmp write ende: mov ah,4Ch int 21h hello db "HelloWorld!",10,13,0 |
(code irgendwo aus'm Netz geklaut) http://nasm.sourceforge.net/ Wenn du dich erstmal mit assembler beschäftigen willst, wird das COM Format für dich besser geeignet sein weil unkomplizierter. Das Programm geht im Datensegment=Codesegment bei Offset 256 dez. = 100 hex los (daher das org 100h am Anfang), Unterteilung in Daten- und Codebereiche gibt es nicht, dynamische allokierung auch nicht. Du hast das gesamte Segment (=64kB-256 Byte) zu deiner Verfügung. Noch eine Vorwarnung: Du programmierst da den x86 realmode. Der hat eher Ähnlichkeiten mit einem Taschenrechner als mit einer richtigen CPU, was du da lernst ist ein guter Einstieg, hat aber mit dem protected mode nicht viel gemeinsam. Und noch ein Tipp: Ab dem 386er gibt's 32bit Register EAX, EBX usw. die gerade bei Division und Multiplikation angenehmer sind. In der NASM Befehlsübersicht findest du da mehr zu. Auf die Register kannst du auch im Realmode zugreifen. Aufruf um 16bit COM Progs zu erzeugen: http://nasm.sourceforge.net/doc/nasmdoc7.html#section-7.2 Nimm das bin Format.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel
