Newsletter
|
|
Bleiben Sie immer auf dem neusten Stand - mit unserem kostenlosen Newsletter
|
Fehler melden
|
|
Haben Sie einen Fehler auf der Planet Source.de Homepage gefunden?
Fehler melden
|
|
|
|
Startseite • Forum • Assembler
Vordefinierte Symbole und Uhrzeit
|
Sue
|
20. March 2005 11:08:
Vordefinierte Symbole und Uhrzeit
|
|
Hallo!
Folgendes Programm habe ich zu realisieren:
Ein Programm soll folgende Bildschirmausschrift erzeugen:
Die Datei "xxxxxxxx.asm" wurde am yy. Maerz assembliert.
Es ist jetzt hh:mm:ss Uhr.
Hinweise:
Der Dateiname (xxxxxxxx) und das Datum (yy) sollen mit Hilfe der beiden vordefinierten Symbole "??FileName" und "??Date" zur Anzeige gebracht werden.
Der Beginn des Datensegments ist folgendermaßen zu notieren:
[code:1] .DATA
ZEIT DB 3 DUP (?)
TEXT_AUSGABE LABEL BYTE
DB 'Die Datei ...[/code:1]
Vorgehensweise:
Zur Angabe der aktuellen Uhrzeit ist die Funktion "2Ch" des DOS-Interrupts 21h zu benutzen. Diese Funktion erlaubt die Angabe der aktuellen Zeit.
Die Rückgabe der Uhrzeit erfolgt in dezimalen Werten (+ 30h ???) in den Registern CX und DX.
Eingangsparameter:
AH Funktionsnummer (2Ch)
Ausgabeparameter:
CH Stunden (0 - 23)
CL Minuten (0 - 59)
DH Sekunden (0 - 59)
DL Hundertstel (0 - 100)
In Abhängigkeit vom Lösungsweg kann zweckmäßigerweise der Befehl "CMP Register,Zahl" eingesetzt werden, der das Z-Flag entsprechend dem Ergebnis beinflusst (bei Gleichheit gilt ZF=1).
Weiterhin weiß ich noch, dass das Datum in eine Konstante zu schaffen ist, der Dateiname aus 8 Zeichen besteht, bei der Zeit keine Hundertstel mit angegeben und Hexadezimal in Dezimal umgewandelt werden sollen.
Ich weiß absolut nicht, wie ich hier vorgehen soll.
Hier mein völlig unvollständiges Programm:
[code:1].MODEL SMALL
.STACK 100h
.DATA
ZEIT DB 3 DUP (?)
TEXT_AUSGABE LABEL BYTE
DB 'Die Datei '
SerName EQU ??FileName
DB ' wurde am '
AsmDate EQU ??Date
DB '. Maerz assembliert.', 13, 10, '$'
DB 13, 10, '$'
DB 'Es ist jetzt '
.CODE
Start: mov ax, @data
mov ds, ax
mov ah, 2Ch
int 21h
mov dx, OFFSET TEXT_AUSGABE
mov ah, 9
int 21h
mov ah, 4Ch
int 21h
END Start[/code:1]
Der Dateiname und das Datum werden so allerdings nicht angezeigt.
Wer kann mir weiterhelfen?
Über jede Antwort wäre ich sehr dankbar!
MfG Sue
|
Optionen: |
Diesem Eintrag antworten
| Diesen Eintrag zitieren
|
|
Michael Müller
Management
Beiträge: 149
Anmeldejahr: 2005
|
20. March 2005 11:54:
Re: Vordefinierte Symbole und Uhrzeit
|
|
;Hmm.. what about this / kann noch angepasst werden (optimiert für TASM):
[code:1]String_Ausgabe macro String
push ax ;;daten retten
push dx ;; " "
lea dx,String
mov ah,09H ;;Befehl zum Ausgeben der Zeichenkette
int 21H ;;AUSFUEHREN!
pop dx ;;Register wiederherstellen
pop ax ;; " "
endm
;DATEN SEGMENT:
DATEN SEGMENT
??FileName equ "asm.asm"
??Date equ "1."
stunde DB ""
minute DB ""
sekunde DB ""
DATEN ENDS
STAPEL SEGMENT
dw 100h
STAPEL ENDS
CODE SEGMENT
ASSUME CS:CODE,DS ATEN,ES:NOTHING,SS:STAPEL
Start: mov ax, DATEN
mov ds, ax
mov ah, 2Ch
int 21h
mov stunde,ch
mov minute,cl
mov sekunde,dh
String_Ausgabe "Die Datei ",??FileName," wurde am ",??Date," Maerz assembliert.",13,10,"$"
String_Ausgabe "Es ist jetzt ",stunde,":",minute,":",sekunde,"$"
mov ah, 4Ch ; und programm terminieren!
int 21h
CODE ENDS
END Start
[/code:1]
; Nur die Konvertierung von Hex->Dez ist noch nicht drin : ) aber ich habe leider im Moment keine Ahnung, wie man das hinbekommt.
|
Optionen: |
Diesem Eintrag antworten
| Diesen Eintrag zitieren
|
|
Design-Dancer
Registrierter Benutzer
Beiträge: 3
Anmeldejahr: 2006
|
22. May 2006 14:21:
Re: Vordefinierte Symbole und Uhrzeit
|
|
Hallo zusammen,
ich habe ein ähnliches Problem zu lösen. Nur leider bekomme ich es nicht hin. Anstelle von der Uhrzeit bekomme ich halt(ich glaube) nur den Hex-Code.
Denn momentan gebe ich auch sofort das Ergebnis im dx und cx aus
der ah,2Ch; INT21 anweisung aus.
Kann mir jemand weiter helfen?
Vielen Dank im Voraus.
MfG
André
|
Optionen: |
Diesem Eintrag antworten
| Diesen Eintrag zitieren
|
|
M.Welch
|
04. June 2006 11:20:
Re: Vordefinierte Symbole und Uhrzeit
|
|
FH Wolfenbüttel? ^__^
das problem ist das du jede einzelne Stelle anzeigen muss und jede einzelne stelle als ascii darstellen musst.
xor ax,ax ;damit setzen wir ax auf o
mov al,ch ;laden von ch (wert für Stunden) in al
mov bl, 10d ;setzen von dem Teilwert (hier 10) in Bl
div bl ;anschliessendes teilen von al durch bl (ah=teilvorgänge)(al=rest)
add ax,3030h ;hinzuaddieren von 3030 damit sowohl ah als auch al direkt Asciizahlen sind
Durch den Vorgang Steht in AH deine 10erstelle und in AL die Einerstelle, dazu würde im gleichen schritt dann um die 30 veraddiert, die wir brauchen um auf das Asciizeichen für die Zahl zu kommen.
|
Optionen: |
Diesem Eintrag antworten
| Diesen Eintrag zitieren
|
|
|
|