Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Nic am 14. April 2004, 12:59
-
Hi,
Ich habe mal wieder ein Assembler problem ...
Also erstmal hier der code:
;-----------------------------------------------------------------------------------------
;- Testprogramm by Nic -
;-----------------------------------------------------------------------------------------
org 100h
mov ah,09
mov dx,msgEingabe
int 21h
InputChar
NewLine
mov ah,09
mov dx,msgDanke
int 21h
NewLine
Exit
;-----------------------------------------------------------------------------------------
;- Funktionen und Variablen -
;-----------------------------------------------------------------------------------------
%macro InputChar 0
mov ah,01
int 21h
%endmacro
%macro NewLine 0
mov ah,02
mov dl,13
int 21h
mov dl,10
int 21h
%endmacro
%macro Exit 0
mov ah,4Ch
int 21h
%endmacro
msgEingabe db "Bitte drücken sie eine Taste :","$"
msgDanke db "Danke ...","$"
Wenn ich das Kompiliere bekomme ich fogende Fehlermeldung
macro.asm:18: error: symbol 'NewLine' redefined
wenn ich die Zeile lösche kann ich es ohne weitere probleme kompilieren blos wenn ich es ausführe bekomme ich eine Windows-Fehlermedung: Link:[link]http://home.arcor.de/nic.j/error.jpg[/link]
thx, Nic! ;)
-
Also bei deinem kruzem Programm lohnt es sich eigentlich nicht das alles in Macros zupacken.Zudem würde ich eher empfehlen das entweder direkt als Code zu schreiben oder dann eben als Funktionen und diese mit call aufrufen.
-
wohlmöglich hast du recht, aber das programm hab ich ja eigentlich nur geschreiben um den umgang mit Macros zu lernen...
-
das problem hab ich immer noch :)
thx, Nic! ;)
-
zu der fehlermeldung von NASM:
Du definierst NewLine neu am besten ersetzt du NewLine
mit NeueLinie dann sollte das ganze klappen
zu Windows:
Windows kann nicht mehr jeden interrupt ausführen (festplatten zugriffe etc.)
das ganze lässt sich nur im reinen dos lösen dort sind
die begrenzungen anders
aber bei Interrupts bin ich mir nicht 100 pro
sicher
greetz Saber
-
Versuch doch mal die Macros oberhalb deines Programms hinzukopieren.
-
ok, es funzt ...danke! ;)
-
Zur erklärung:
Du musst Macros VORHER definieren, BEVOR du diese benutzt.
Daher immer ganz an den Anfang setzen. Der Compiler "übersieht" diese beim Compilen, bis sie benutzt werden.
-
Lustigerweise hat er die Macros unter der Überschrift Funktionen:P hat damit aber garnix zu tun^^ Wird Zeit das unsre Tuts kommen glaub ich
-
hmm wusste gar nit das man bei Nasm macros
voher setzten muss :D
-
Ist generell so. Wenn du etwas benutzen willst, musst du es VORHER definieren damit der Compiler ja auch weiß das es sowas gibt.
Headerdateien bindest du bei C ja auch immer ganz oben ein ;)
-
Oder stell dir vor du solllst ein Kroxldyfig von da nach da bringen und dir sagt keiner VORHER was ein Kroxldyfig ist:P
-
@Roshl, Klar weiß ich was ein Kroxldyfig ist ...
[zitat]Kroxldyfig ist ein sehr schwer zu erklärendes Wort[/zitat]
(SouthPark) =)
-
Mist er hats gemerkt:P
-
das ERROR-bild kommt bei mir auch immer, wenn ich direkt auf Hardware zugreifen will unter WIN... Ich denke das liegt daran, dass WIN im P-Mode läuft...