PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vermutlich simples Assembler-Problem


hadez16
2007-04-24, 09:23:05
Hallo,

in der letzten Zeit bin ich an Assembler interessiert und ich versuche nun ein Programm zu schreiben, dass einen Tastendruck ausliest und den Ascii-Code des Zeichens auf dem Bildschirm ausgibt

gedacht habe ich mir das so:


org 100h

mov ah,00 ; Auf Tastendruck warten, Ascii wird in AL gelegt
int 16h ; Keyboard-Interrupt

mov dx,al ; Da meckert der Compiler, dx will ich ausgeben also AL in DX?
mov ah,09h ; Ausgabefunktion
int 21h ; Dos-Interrupt

mov ah,4ch ; Programm beenden
int 21h



Was mache ich da falsch bzw. wie macht man das nun wenn man den Inhalt von AL ausgeben möchte?


Grüße
hadez

EDIT: ich habs jetzt hinnbekommen dass gedrückte Zeichen auszugeben mit folgendem code


org 100h

mov ah,00
int 16h

mov dl,al ; AL (Ascii-Code von gedrücktem Zeichen) in DL schieben
mov ah,2h ; Funktion zum Ausgeben des Zeichens (Ascii wird übersetzt)
int 21h

mov ah,4ch
int 21h



wie kann ich denn aber den Ascii-Code ausgeben?

BAGZZlash
2007-04-24, 10:29:16
mov dx,al ; Da meckert der Compiler, dx will ich ausgeben also AL in DX?



Kenne mich nicht wirklich aus, aber dx ist doch ein 16-bit-Register (word) und al nur 8 Bit (byte). Oder vertu' ich mich da?

Coda
2007-04-24, 15:18:02
Nein hast schon recht...

Xmas
2007-04-24, 16:23:22
wie kann ich denn aber den Ascii-Code ausgeben?
Dazu musst du die Zahl in Ziffern zerlegen und für jede Ziffer das entsprechende ASCII-Zeichen ausgeben. Für Hex-Ausgabe nimmst du dazu die unteren bzw. oberen vier Bits, addierst den ASCII-Code für 0, und addierst nochmal 7 (= Anzahl der Zeichen zwischen '9' und 'A') wenn die Ziffer größer oder gleich 10 ist.
Für dezimale Ausgabe nimmst du Integerdivision.

HajottV
2007-04-24, 17:06:00
Hallo,

in der letzten Zeit bin ich an Assembler interessiert und ich versuche nun ein Programm zu schreiben, dass einen Tastendruck ausliest und den Ascii-Code des Zeichens auf dem Bildschirm ausgibt

wie kann ich denn aber den Ascii-Code ausgeben?


XOR AX,AX
INT 16
AAM 64
CALL 0114
AAM
CALL 0114
MOV AH,AL
CALL 0114
RET
MOV DL,AH
ADD DL,30
MOV AH,02
PUSH AX
INT 21
POP AX
RET


Wenn Dein Assembler AAM 64 nicht versteht, dann mach DB D4, DB 64.

Gruß

Jörg