Anzeige:
Ergebnis 1 bis 6 von 6

Thema: [asm] Status Byte (Drucker)

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.05.2001
    Beiträge
    63

    [asm] Status Byte (Drucker)

    Hallo,

    hoffe eine kleine Anfänger Assembler-Frage ist hier gestattet. Beschäftige mich seit kurzer Zeit mit der Programmiersprache Assembler und Linux (ix86) und stehe nun vor einem kleinem Problem.
    Würde ganz gerne, um mehr über den Umgang mit Assembler zu lernen, einmal das Status-Byte des Druckers abfragen, leider bereitet mir das einige Schwierigkeiten, vielleicht könnt ihr mir da weiterhelfen?

    Code:
    section .text
    global _start
    
    msg     db "Druckertest ...",0x0A ;0x0A->zeilenumbruch
    msg2    db "Drucker bereit",0x0A
    len     equ $-msg
    len2    equ $-msg2
    
    _start:
            mov eax,4 ; Ausgabe von msg
            mov ebx,1      
            mov ecx,msg
            mov edx,len
            int 0x80
            jmp Drucker_test
    
    
    Drucker_test:
            mov ah,02
            xor dx,dx
            int 17h
            test ah,10000000b
            je Bereit
    
    Bereit:
            mov eax, 4
            mov ebx, 1
            mov ecx, msg2
            mov edx, len2
            int 0x80
            jmp Endeprg
    
    Endeprg:
            mov eax,1       ;syscall 1 = exit
            int 0x80        ;exit
    ist natürlich sehr simpel und sieht sicher auch sehr mies aus, für jemand der sich da etwas besser auskennt, bin wie gesagt noch in der Lernphase. :-)
    Beim Ausführen von int 17h "segfaultet" mir das Programm, bin daher um jede Antwort/Verbesserung dankbar, diesen Fehler zum vermeiden.

    Danke im Voraus,
    h.d.

  2. #2
    Registrierter Benutzer
    Registriert seit
    10.03.2001
    Ort
    Delmenhorst
    Beiträge
    118
    hi

    ich bin in asm nicht so bewandert,
    aber warum interruptest du am ende mit

    Code:
    int 0x80
    und an der abstürzenden codestelle mit

    Code:
    int 17h
    wäre da nicht ein

    Code:
    int 0x17
    angebracht?

    comrad
    Holarse.de - Spielen unter Linux

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638

    Re: [asm] Status Byte (Drucker)

    Hi,

    ich bin zwar schon seit Jahren aus dem Assembler raus. Deswegen kenne ich mich jetzt auch nicht mit den Interrupts aus. Ich weiß nur bei DOS war es immer int 21h

    Woebi ich comrad Recht geben muß.

    Mir ist aber etwas anderes aufgefallen:
    Original geschrieben von Prick
    Code:
    msg     db "Druckertest ...",0x0A ;0x0A->zeilenumbruch
    msg2    db "Drucker bereit",0x0A
    len     equ $-msg
    len2    equ $-msg2
    Muß das nicht heissen:
    Code:
    msg     db "Druckertest ...",0x0A ;0x0A->zeilenumbruch
    len     equ $-msg
    msg2    db "Drucker bereit",0x0A
    len2    equ $-msg2
    Denn bei Deiner Version die Längenberechnung eigentlich nicht stimmen?

    Gruß

    Pingu

  4. #4
    Registrierter Benutzer
    Registriert seit
    14.05.2001
    Beiträge
    63
    Danke für die schnellen Antworten, leider konnte mir das nicht helfen.

    comrad, wie ich den Interrupt starte sollte eigentlich egal sein, habe beide Versionen versucht, leider selbes Problem.
    Pingu, 21h/ah=5 ist für die Ausgabe eines Zeichens auf dem Drucker zuständig, insofern liegst Du da richtig. :-)
    In welcher Reihenfolge ich die Variablen deklariere sollte eigentlich keinen Unterschied machen, das Label msg bzw. msg2 bleibt ja bestehen. Mit der Ausgabe der Nachricht gibt es auch keine Problem, wie gesagt nur, wenn das Programm int 17h erreicht, segfaultet es.

    Danke nochmals, sollte jemand weitere Vorschläge haben, nehme ich diese natürlich gerne entgegen.

    h.d.

  5. #5
    Registrierter Benutzer
    Registriert seit
    22.10.2003
    Beiträge
    6
    Hallo,

    ich würde jetzt einfach mal behaupten das du mit int 17h auf eine Funktion im BIOS zu zugreifen versuchst. Das heisst du versuchst vom protected Mode (oder wie das auf Intel Kisten heisst) aus auf eine real Mode Funktion des BIOS anzusprechen. Meines Wissens geht das nicht.

    Bernd

  6. #6
    Registrierter Benutzer
    Registriert seit
    14.05.2001
    Beiträge
    63
    Und warum dann der Segmentation fault?
    Im Buch "Programmiersprache Assembler - Ein Strukturierte Einführung" wird es so beschrieben und auf folgender Seite scheint man sich auf eine ähnliche Aussage zu stützen:
    http://www.uni-ulm.de/schulen/gym/sg...func.htm#start
    Verstehe ich nicht ganz. Welche Möglichkeit bietet sich denn dann, das Status-Byte abzufragen?

    Danke,
    h.d.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •