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
-
Auf Eingabe warten : INT 21H, Funktion 01H
http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_bios_and_dos_interrupts.html#int21h_01hProgramm beenden : INT 21H, Funktion 4CH
http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_bios_and_dos_interrupts.html#int21h_4Ch
-
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
-CodesegmentIch 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.
- kommt bei mir da am anfang ne Fehlermeldung
- 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.