Anfänger-Frage



  • Hallo,

    ich bin noch neu hier und kapier so gut wie garnix. Allerdings hab ich mich aufgemacht und versucht mein erstes Programm zum laufen zu bringen:

    ; Erste Tests: Es soll einfach nur "hallo Welt" ausgegeben werden
    
    ; Datensegment:
    
    datseg SEGMENT 'DATA'
    
        farbe   DB  3Bh ;Farbangabe: 3=Textfarbe, B=Hintergrung 
        text    DB  'Hallo Welt, dies ist mein erstes Programm!'   
        stop    DB 1 DUP (?)
    
    datseg ENDS
    
    ; Stacksegment:
    
    stackseg SEGMENT STACK
    
        dw  10h     DUP(0)
    
    stackseg ENDS
    
    ; Codesegment:
    
    codseg SEGMENT 'CODE'
    
    mov dx, datseg  
    mov ds, dx
    
    mov al, 1                         ;Schreibmodus: 1 oder 0 moeglich
    
    mov bh, 0                         ;Seitennummerierung
    
    mov bl, farbe                     ;Attributbenennung
    
    mov cx, offset stop - offset text ;Laengenberechnung des Strings, moeglich ist auch
                                      ;die direkte Benennung der Laenge: hier 42  
    
    mov dl, 0                         ;Vektorangabe: Spalte
    
    mov dh, 7                         ;Vektorangabe: Zeile
    
    push ds                           ;dekrementiert den SP, macht Platz fuer neues Stack-
                                      ;Element und kopiert ds hinein  
    
    pop es                            ;laed den obersten Stackeintrag nach es und inkrementiert
                                      ;den SP  
    
    mov bp, offset text               ;es:bp zeigen auf den anzuzeigenden Textstring
    
    mov ah, 13h                       ;graphic-mode 40 * 25. 256 Farben. 320 * 200 pixel. 
                                      ;1 Seite
    int 10h
    
    codseg ENDS  
    
    ;Alle Info's koennen auch auf der Interrupt-list von emu8086 eingesehen werden.
    
    ; URL:  http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_bios_and_dos_interrupts.html#int10h_13h
    

    Das Programm funktioniert auch, die einzelnen Beschreibungen hab ich mehr oder weniger aus der Interrupt-list von der im quellcode unten angegebenen url. Leider hab ich jetzt ein problem. Wie realisier ich, dass man durch Tastendruck das Programm beendet. Es soll sozusagen noch ein Text kommen ala "beliebige Taste zum beenden drücken". Habs schon probiert, klappt aber irgendwie nicht.

    Für eure Hilfe wäre ich euch sehr dankbar.

    gruss Rille





  • Danke für die schnelle Hilfe, allerdings bin ich noch anfänger und wäre für einen beispiel-code sehr dankbar 😃 .

    Jeder fängt mal klein an 😞



  • Bei uns in der Vorlesung besteht ein Programm immer aus den 3 Bausteinen:

    -Datensegment
    -Stacksegment
    -Codesegment

    Ich möchte einfach ein Programm schreiben, bei dem ich im Datensegment 2 Strings festlege:

    also sowas wie

    datseg segment 'data'
    
       msg1   db 'hallo Welt'
       msg2   db 'und tschuess'
    
    datseg ends
    ...
    

    Allerdings klappt das bei mir nicht.

    1. kommt bei mir da am anfang ne Fehlermeldung
    2. geht das so überhaupt?

    wir benutzen emu8086demo bei uns an der FH

    Und normalerweise muss doch ein Textstring immer mit $ beendet werden, oder wie ist das?

    Für Hilfe (in kompletten Sätzen) wäre ich sehr dankbar



  • Poste mal die Fehlermeldung.
    Ich kenne den Emulator zwar nicht, aber es sieht so aus als ob er "case-sensitive" ist, was heisst, Gross- und Kleinschreibung muss beachtet werden.

    datseg SEGMENT 'DATA'
    
       msg1   db 'hallo Welt'
       msg2   db 'und tschuess'
    
    datseg ENDS
    

    klappt vielleicht.



  • Also folgendes Problem. Ich hab das Programm zwar jetzt soweit aber !! es gibt immernoch problem. Am besten ich zeigs euch anhand des Quellcodes:

    ; Erste Tests: Es soll einfach nur "hallo Welt" ausgegeben werden
    
    ; Datensegment:
    
    datseg SEGMENT 'DATA'
    
        farbe   DB  3Bh ;Farbangabe: 3=Textfarbe, B=Hintergrung 
        text    DB  'Hallo Welt, dies ist mein erstes Programm!'
        text2   DB  'Test bla blub'          
        stop    DB  1 DUP (?)
    
    datseg ENDS
    
    ; Stacksegment:
    
    stackseg SEGMENT STACK
    
        dw  10h     DUP(0)
    
    stackseg ENDS
    
    ; Codesegment:
    
    codseg SEGMENT 'CODE'
    
    mov dx, datseg  
    mov ds, dx
    
    mov al, 1                         ;Schreibmodus: 1 oder 0 moeglich
    
    mov bh, 0                         ;Seitennummerierung
    
    mov bl, farbe                     ;Attributbenennung
    
    mov cx, offset text2 - offset text;Laengenberechnung des Strings, moeglich ist auch
                                      ;die direkte Benennung der Laenge: hier 42  
    
    mov dl, 0                         ;Vektorangabe: Spalte
    
    mov dh, 7                         ;Vektorangabe: Zeile
    
    push ds                           ;dekrementiert den SP, macht Platz fuer neues Stack-
                                      ;Element und kopiert ds hinein  
    
    pop es                            ;laed den obersten Stackeintrag nach es und inkrementiert
                                      ;den SP  
    
    mov bp, offset text               ;es:bp zeigen auf den anzuzeigenden Textstring
    
    mov ah, 13h                       ;graphic-mode 40 * 25. 256 Farben. 320 * 200 pixel. 
                                      ;1 Seite
    int 10h
    
    mov cx, offset stop - offset text2
    
    mov dl, 0
    mov dh, 8
    push ds
    pop es 
    mov bp, offset text2
    mov ah, 13h 
    int 10h     
    
    mov ah, 1
    int 21h
    
    codseg ENDS  
    
    ;Alle Info's koennen auch auf der Interrupt-list von emu8086 eingesehen werden.
    
    ; URL:  http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_bios_and_dos_interrupts.html#int10h_13h
    

    Zwar gibt das Programm alles aus aber wenn ich den zweiten Textstring

    "text2 DB 'Test bla blub' "

    verlänger, also zum Beispiel schreibe

    "text2 DB 'Test bla bluba' "

    dann ist der Text nichtmehr sichtbar. Wenn ich noch ein Zeichen anhänge, also zum Beispiel

    "text2 DB 'Test bla bluba t' "

    schreibe kommen so Zeichen wie Smileys raus. Ab einer bestimmten stringlänge öffnet sich das anzeigefenster garnichtmehr...

    irgendwie versteh ich nicht wie dass sein kann. Wie gesagt benutze ich die software emu8086.

    Hilföööö

    danke für Hilfe

    Rille



  • Irgendwas mit Deiner Kompiler-, IDE-, ...einstellung stimmt nicht. Dein Quellcode ist völlig OK.


Anmelden zum Antworten