Einfaches Problem von Assembler anfänger
Moderatoren: crack, Krüsty, Marwin
Einfaches Problem von Assembler anfänger
denke mal ihr könnt mir schnell weiterhelfen:
ich habe ein macro was folgend aussieht:
;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
;º Funktion : Tastatureingabe, Zeichen in Reg8 (8-Bit Register) º
;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
TAST_EING MACRO Reg8
IF Reg8 EQ AL OR Reg8 EQ AH
PUSH DX
PUSH AX
MOV AH,08H
INT 21H
MOV DL,AL
POP AX
MOV Reg8,DL
POP DX
ELSE
PUSH AX
MOV AH,08H
INT 21H
MOV Reg8,AL
POP AX
ENDIF
ENDM
und mein programm ganz einfach:
include macro.bib
.model small
.code
TAST_EING AL ; zeile 5 ...
ANZEIGE AL
MSDOS
end
(ANZEIGE und MSDOS sind auch macros die gehen aber ...)
es kommt folgende fehlermeldung:
Microsoft (R) Macro Assembler Version 6.11d
Copyright (C) Microsoft Corp 1981-1995. All rights reserved.
Assembling: test.asm
test.asm(5) : error A2095: constant or relocatable label expected
TAST_EING(1): Macro Called From
test.asm(5): Main Line Code
ich habe ein macro was folgend aussieht:
;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
;º Funktion : Tastatureingabe, Zeichen in Reg8 (8-Bit Register) º
;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
TAST_EING MACRO Reg8
IF Reg8 EQ AL OR Reg8 EQ AH
PUSH DX
PUSH AX
MOV AH,08H
INT 21H
MOV DL,AL
POP AX
MOV Reg8,DL
POP DX
ELSE
PUSH AX
MOV AH,08H
INT 21H
MOV Reg8,AL
POP AX
ENDIF
ENDM
und mein programm ganz einfach:
include macro.bib
.model small
.code
TAST_EING AL ; zeile 5 ...
ANZEIGE AL
MSDOS
end
(ANZEIGE und MSDOS sind auch macros die gehen aber ...)
es kommt folgende fehlermeldung:
Microsoft (R) Macro Assembler Version 6.11d
Copyright (C) Microsoft Corp 1981-1995. All rights reserved.
Assembling: test.asm
test.asm(5) : error A2095: constant or relocatable label expected
TAST_EING(1): Macro Called From
test.asm(5): Main Line Code
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Soll in dem Macro geprüft werden ob Du AL oder AH verwenden möchtest?
Ich kenne die Syntax regeln deines Compilers nicht, aber Ich schätze wenn Du reg8 al oder ah zuweist will der Compiler den aktuellen Inhalt von al oder ah, in reg8 speichern, aber ein macro wird ja beim compilieren expandiert, und da kann der Compiler mit einem Registerinhalt nix anfangen, wenn Du ASCII Zeichen als Variable oder 'Konstante' (gibt es im RAM Konstanten?
) übergeben willst musst Du die mit Anführungszeichen "zeichen" oder 'zeichen' als Text- oder Stringvariable deklarieren.
Ich kenne die Syntax regeln deines Compilers nicht, aber Ich schätze wenn Du reg8 al oder ah zuweist will der Compiler den aktuellen Inhalt von al oder ah, in reg8 speichern, aber ein macro wird ja beim compilieren expandiert, und da kann der Compiler mit einem Registerinhalt nix anfangen, wenn Du ASCII Zeichen als Variable oder 'Konstante' (gibt es im RAM Konstanten?
mit freundlichen grüssen,
with best regards,
crack
with best regards,
crack
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Hi AlexN,
Stimmt! Das sieht auch ziemlich komisch aus, ein Zeichen von der Tastatur holen und auf dem Bildschirm ausgeben sollte einfacher sein.... Nun Ja, wenn's ein ausgesprochenes Lehrbuch ist, dann sollte darin auch erleutert sein wie die Programmbeispiele funktionieren. Wenn Sie nicht funktionieren obwohl Du alles richtig gemacht hast, dann solltest Du einmal beim Autor nachfragen, der wird dann auch dankbar sein, dass Du ihn auf die Fehler hingewiesen hast. Andernfalls wird er möglicherweise dir die Sache erklären. Ok, es gibt unter Dos mehrere Arten ein Zeichen von der Tastatur zu holen, aber Funktion 08h von Dos Interupt 021h dient zum Auslesen des COM1 Port. Um Zeichen von der Tastatur zu holen benutz man idR die Funktion 01h des Interupt 021h oder direkt den TastaturInterupt 016h. Hm, aber das alles ist ja nicht dein Problem, es ging ja um die Frage warum das Macro beim Compilieren einen Fehler verursacht, Ich denke es ist eben so wie der Compiler meldet: Du brauchst eine 'Konstante' oder den Pointer zu einer Speichervariablen. Im Zweifel solltest Du in dem Buch einmal nachlesen, wie das Macro aufgerufen wird bzw. wie die 'Werteübergabe' vonstatten geht. Ist das denn genau der Compiler der in den Buch Beispielen verwendet wird? sonst könnte da das Problem sein....ich hab das aaus nem buch .. ich hab mir da nix ausgedacht .. ich habs nur mal ausprobieren wollen, weil das ganze ziemlich komisch aussah !!
mit freundlichen grüssen,
with best regards,
crack
with best regards,
crack
ich habe genau den compiler der auf der cd mit dem buch dabei ist.
desweiteren habe ich aber in dem buch noch weitere fehler gefunden
das war das buch:
Assembler Programmierung, Studienausgabe m. CD-ROM
http://www.amazon.de/exec/obidos/ASIN/3 ... 20-6592817
obwohls eigentlich sonst ok war. es gibt ja in jedem buch fehler also...
desweiteren habe ich aber in dem buch noch weitere fehler gefunden
das war das buch:
Assembler Programmierung, Studienausgabe m. CD-ROM
http://www.amazon.de/exec/obidos/ASIN/3 ... 20-6592817
obwohls eigentlich sonst ok war. es gibt ja in jedem buch fehler also...
- crack
- Administrator
- Beiträge: 280
- Registriert: Dienstag 21. Dezember 2004, 15:02
- Wohnort: 53783 Eitorf
- Kontaktdaten:
Ja, für 16bit ASM hab Ich mir die infos noch überall zusammengesucht, für MASM32 hab Ich mir folgendes Buch angeschaft:http://www.amazon.de/exec/obidos/ASIN/3 ... 77-7793616
Das ist sehr gut, es hebt einen auf die Stufe wo man selber weitermachen kann, zusätzlich braucht man eine gute ASM Befehlsreferenz. Das erleichtert die Sache sehr...
Das ist sehr gut, es hebt einen auf die Stufe wo man selber weitermachen kann, zusätzlich braucht man eine gute ASM Befehlsreferenz. Das erleichtert die Sache sehr...
mit freundlichen grüssen,
with best regards,
crack
with best regards,
crack
ich muss mal schauen. ich werde jetzt informartik studieren und hab sozusagen das alles mir nur vorher schon mal angeschaut. kann java c++ und jetzt ein witziges bißchen assembler. werde jetz damit aber mal pausieren bis es im studium auf mich zukommt vielelciht komme ich da dann mal wieder hier ins forum zurück!!