Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

RTC / int 1ah

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 18.01.2007, 22:27    Titel: RTC / int 1ah Antworten mit Zitat

Habe etwas Neues in asm versucht; es sollte die Zeit anzeigen aber gibt den grössten Zeichensalat (unter Windows XP). Was ist daran falsch?

Danke lächeln

Code:

.model small

.data

Zeit db "Es ist $"
Zeichen db ": $"
Stunde db ?
Minute db ?
Sekunde db ?

.stack 256

.code

start: mov ax, @data
mov ds, ax

mov ah, 2
int 1AH
mov Stunde, ch
mov Minute, cl

mov Sekunde, dh

lea dx, Zeit
mov ah, 9
int 21h

lea dx, Stunde
mov ah, 9
int 21h
lea dx, Zeichen
mov ah, 9
int 21h
lea dx, Minute
mov ah, 9
int 21h
lea dx, Zeichen
mov ah, 9
int 21h
lea dx, Sekunde
mov ah, 9
int 21h

mov ah, 4ch
int 21h

end start





_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 18.01.2007, 23:53    Titel: Antworten mit Zitat

Mal abgesehen davon, daß die Interrupts unter FreeBASIC 'selten bis gar nicht' funktionieren..
..verrate mir bitte mal, wie FB unter XP die Dos-Interrupts verarbeiten soll?
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 19.01.2007, 08:36    Titel: Antworten mit Zitat

Ich schätze, er hat einen DOS-Compiler genommen? lächeln

Hab deinen Code grad nur überflogen, aber dein Problem wird sein, dass du nicht beachtest, dass die Zeitdaten BCD codiert sind. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 19.01.2007, 11:29    Titel: Antworten mit Zitat

Ja es ist MASM. DIe DIrektiven funktionieren unter FB ja in der Art schon nicht.
Ich habe mich noch nach Routinen umgeschaut für BCD, es gibt Befehle um die zu korrigieren nach einer Berechnung etc. muss ich die manuell in einen String umwandeln? Ein Beispiel fand ich nicht wirklich doch in einer Erklärung stand dass im CX z.B. für 11.28 die Zahl 1128 steht und irgendwie dass sich diese einfach anzeigen liesse (mag ja nicht stimmen), darum dachte ich es geht so lächeln
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 19.01.2007, 12:10    Titel: Antworten mit Zitat

und das hier stürzt ab neutral
Code:

.386

.model small

.data

Zeit db "Es ist $"
Zeichen db ": $"
 
ascii db " $"

.stack 256

.code

start: mov ax, @data
mov ds, ax

mov ah, 2
int 1AH

mov ah, ch
call Bcd_to_Ascii



Bcd_to_Ascii:
push ax                     
shr ax,4
shr al,4
add ah,48
add al,48
mov ascii,ah
mov ascii+1,al     
pop ax
ret         

lea dx, Zeit
mov ah, 9
int 21h

lea dx, ascii
mov ah, 9
int 21h
lea dx, Zeichen
mov ah, 9
int 21h
mov ah, cl
call Bcd_to_Ascii
lea dx, ascii
mov ah, 9
int 21h
lea dx, Zeichen
mov ah, 9
int 21h
mov dh, ah
call Bcd_to_Ascii
lea dx, ascii
mov ah, 9
int 21h

mov ah, 4ch
int 21h

end start


_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 19.01.2007, 22:27    Titel: Antworten mit Zitat

Dies ist meine Version (TASM):

Code:

.286p

.model small

.data

Zeit db "Es ist $"
Zeichen db ": $"
cxsave dw 0
dxsave dw 0

.stack 256

.code

start:
mov ax, @data
mov ds, ax

mov ah, 2
int 1AH
mov cxsave,cx
mov dxsave,dx

lea dx, Zeit
mov ah, 9
int 21h

mov dx,cxsave
mov al,dh
call bcd_to_ascii
push dx
mov dl,dh
mov ah, 2
int 21h
pop dx
mov ah, 2
int 21h

lea dx, Zeichen
mov ah, 9
int 21h


mov dx,cxsave
mov al,dl
call bcd_to_ascii
push dx
mov dl,dh
mov ah, 2
int 21h
pop dx
mov ah, 2
int 21h

lea dx, Zeichen
mov ah, 9
int 21h

mov dx,dxsave
mov al,dh
call bcd_to_ascii
push dx
mov dl,dh
mov ah, 2
int 21h
pop dx
mov ah, 2
int 21h

mov ah, 4ch
int 21h

bcd_to_ascii proc near
;convert bcd in al into decimal in dx
mov dl,al
mov dh,0
shl dx,4
shr dl,4
add dl,48
add dh,48
ret

bcd_to_ascii endp


end start
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 20.01.2007, 23:42    Titel: Antworten mit Zitat

Beim Assemblieren erhalte ich die Meldung:
Code:

(78) : error A2070: invalid instruction operands
(79) : error A2070: invalid instruction operands

bei den Zeilen
Code:

shl dx,4
shr dl,4


_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 21.01.2007, 10:32    Titel: Antworten mit Zitat

Ich weiß nicht was an
shl dx,4
shr dl,4
falsch sein soll.

Ich habe das Programm mit MASM 5.0 compiliert, es läuft klaglos.
masm timetest
link timetest
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 23.01.2007, 00:39    Titel: Antworten mit Zitat

Hmm kann das sein dass dieser Assembler diese Befehle nicht kennt? Der war vor kurzem bei einem Buch dabei, eine MASM-Version aber die 32bit-Register funktionieren auch nicht, dürfte eine alte Version sein. Werde gelegentlich mal einen anderen herunterladen (mit MASM32 kann man ja keine DOS-Programme erstellen oder nur nicht damit linken?).
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 23.01.2007, 19:22    Titel: Antworten mit Zitat

Du hast doch selbst die Statements

shr ax,4
shr al,4

in Deinem Programm. Daran kann es wohl nicht liegen.

Eine Vollversion von MASM kannst Du Dir übrigens hier runterladen (10 MB):

http://www.vetusware.com/download/Macro%20Assembler%206.11d%20and%206.14/?id=4101
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 23.01.2007, 23:03    Titel: Antworten mit Zitat

Ja diese Version hat die ja auch und liess sich assemblieren. Einfach stürzte sie ab. Komisch!! Werde es aber trotzdem mal mit einem anderen MASM versuchen, dürfte schon eine andere Version sein. Aber wieso meldet der bei diesen Zeilen Fehler verlegen
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 23.01.2007, 23:31    Titel: Antworten mit Zitat

Der Absturz kam vor allem daher, daß Du mit

Bcd_to_Ascii:
push ax
shr ax,4
shr al,4
add ah,48
add al,48
mov ascii,ah
mov ascii+1,al
pop ax
ret

eine gosub programmiert hast, die es in Assembler so nicht gibt. Wo soll denn ret hinspringen außer in den Abgrund? Außerdem rennt das Programm unbeabsichtigt in diese "gosub" hinein, da diese mitten im code steht.

Die wüsten Zeichen auf dem Bildschirm kommen wohl daher, daß Du das $ Zeichen in der ascii Variablen überschrieben hast und der AH9/21h kein Ende findet. Ascii ist von Dir nur als ein Zeichen plus $ definiert und Du willst zwei Zahlen hineinschreiben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 26.01.2007, 14:29    Titel: Antworten mit Zitat

Super, es hat geklappt! lächeln Jetzt muss ich noch eine Warteschleife einbauen und das Programm wiederholen lassen, dass die Zeit "läuft" und es mit irgend einer Taste beendet werden kann
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 27.01.2007, 11:55    Titel: Antworten mit Zitat

Wenn Du diese Funktion einbaust, wartet DOS auf eine Tastatureingabe. Die Zeit läuft dabei weiter.

Du kannst dann die neue Zeit anzeigen und diese Funktion wieder aufrufen.
Das eingebene Zeichen ist in AL. Wenn Du dies auf ESC prüfst, kannst Du das Programm beenden. z.B.
cmp al,27
je do_exit

Code:

Pressany   proc near
           push dx
           mov  dx,offset pressanykey   ;message in pressanykey
           push ax
           mov ax,0900h ;output message
           int 21h
           mov ax,0800h ;wait for key
           int 21h
           pop ax
           pop dx
           ret
Pressany      endp
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 29.01.2007, 14:47    Titel: Antworten mit Zitat

Vielen Dank, nun habe ich dieses erfolgreich erstellt:
Code:


.286p

.model small

.data

Zeit db "Es ist $"
Zeichen db ": $"
cxsave dw 0
dxsave dw 0
Info db "Esc druecken um zu beenden, i druecken um Uhr zu testen, zum beenden esc druecken$"
OK db "Uhr funktioniert, BIOS-Batterie scheint OK $"
NOK db "Uhr / BIOS-Batterie scheint nicht ordnungsgemaess zu funktionieren $"


.stack 256

.code

start:
mov ax, @data
mov ds, ax

lea dx, info
mov ah, 9h
int 21h
mov ah, 02h
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
mov ah, 02h
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h

M1: mov ah, 2
int 1AH
mov cxsave,cx
mov dxsave,dx

lea dx, Zeit
mov ah, 9
int 21h

mov dx,cxsave
mov al,dh
call bcd_to_ascii
push dx
mov dl,dh
mov ah, 2
int 21h
pop dx
mov ah, 2
int 21h

lea dx, Zeichen
mov ah, 9
int 21h


mov dx,cxsave
mov al,dl
call bcd_to_ascii
push dx
mov dl,dh
mov ah, 2
int 21h
pop dx
mov ah, 2
int 21h

lea dx, Zeichen
mov ah, 9
int 21h

mov dx,dxsave
mov al,dh
call bcd_to_ascii
push dx
mov dl,dh
mov ah, 2
int 21h
pop dx
mov ah, 2
int 21h

mov ah, 1
int 16h
cmp al, 27
je M20
cmp al, 105
je M100

mov bx, 500
M2: mov cx, 0FFFFH
M3: dec cx
jnz M3
dec bl
jnz M2

mov ah, 02h
mov dl, 0dh
int 21h


jmp M1

M20: mov ah, 4ch
int 21h

bcd_to_ascii proc near
;convert bcd in al into decimal in dx
mov dl,al
mov dh,0
shl dx,4
shr dl,4
add dl,48
add dh,48
ret

bcd_to_ascii endp

M100: mov ah, 02h
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
mov ah, 02h
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h

mov ah, 2
int 1AH
jc fehler
jmp gut
fehler: lea dx, NOK
mov ah, 9
int 21h

gut: lea dx, OK
mov ah, 9
int 21h

mov ah, 7
int 21h
cmp al, 27
je M20
mov bx, 2000
Ma: mov cx, 0FFFFH
Mb: dec cx
jnz Mb
dec bl
jnz Ma
jmp M100

end start


_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz