Danke, die Vorschläge klingen ganz brauchbar (wenn auch nach viel Arbeit ;_;).

Ich habe gestern entdeckt, dass es bei Assembler mit dem Interrupt 14h möglich ist, direkt auf die serielle Schnittstelle zuzugreifen. Ich habe, um das erstmal auszuprobieren, folgendes Programm geschrieben:

Code:
; ************************************
; Auslesen der seriellen Schnittstelle
; ************************************

daten segment
  signal db 0 ; Variable Signal, 1 Byte groß
daten ends

stapel segment byte stack
  dw 128 dup(?)
stapel ends

code segment
assume cs:code,ds:daten,es:nothing,ss:stapel

start:
  ; Serielle Schnittstelle initialisieren
  mov ah, 00h
  mov dx, 00h ; Nummer der Schnittstelle (0: COM1)
  int 14h
  
  ; Zeichen empfangen
  mov ah, 02h
  mov dx, 00h
  int 14h
  
  ; Zeichen in "signal" speichern
  mov [signal], al
  
  ; Ausgabe
  mov ax, daten
  mov ds, ax
  mov dx, offset [signal]
  
  mov ah,9h
  int 21h

  mov ah,4ch
  int 21h

code ends

end start
Das Programm soll ein Zeichen (8 Bit) aus der seriellen Schnittstelle (in diesem Fall COM1) auslesen (landet in AL), das Zeichen unter der Variablen "signal" speichern und diese dann ausgeben.

Weil ich an diesem Computer keine seriellen Schnittstellen habe, habe ich es am Computer meiner Eltern probelaufen lassen. Allerdings wurde nicht wie erwartet ein Zeichen ausgegeben (schließlich habe ich "signal" ja nur den 8 Bit großen Inhalt von AL übergeben), sondern mehrere Zeilen wilder ASCII-Zeichen.

Als ich das Programm mit DEBUG Schritt für Schritt ausgeführt habe, habe ich allerdings andere Zeichen ausgegeben bekommen, darunter sogar ein wenig Klartext, der mir verriet, dass der COM-Port bereit ist.

Kennt sich vielleicht jemand etwas besser mit Assembler aus und kann mir sagen, wo diese ganzen ASCII-Zeichen herkommen? (Eigentlich wollte ich ja zunächst nur ein einzelnes Zeichen empfangen.)