title image


Smiley Re: Assembler-Programmierung
Hallo,



??Date und ??FileName sind Symbole vom typ text, die waehrend des Assemblierens ersetzt werden, Du darft also nicht EQU nehmen, sondern musst etwas wie FNAME DB ??FileName schreiben, dann funktioniert der erste Teil schon mal, mit dem kleinen Schoenheitsfehler, daß der Dateiname mit Leerzeichen auf 8 Stellen aufgefuellt wird. Wenn Dir das nicht gefallen sollte, koennen wir das auch noch abstellen.



Bei der System-Zeit werden die drei Zahlenwerte als Hexadezimal-Zahl zurueckgeliefert. Stunde. Minute und Sekunde sind alles Werte die kleiner als 60 bleiben, also mit zwei Stellen im Dezimalsystem darstellbar sind.

Aus der Hex-Zahl bekommt man die beiden Dezimalstelle mittels einer Ganzzahldivision

durch 10. Der das Ergebnis ist die 10er-Stelle und der Rest ist die Einerstelle

der Bezimalzahl.



Bsp: 0fh = 15d

15d / 10d = 1 Rest 5



Die ASCII-Zeichen der '0'..'9' haben den Wert 30h .. 39h, durch eifache Addition

von 30h zum den erhaltenen Werten für die einzelne Stellen der Dezimalzahl ergibt also das ASCII-Zeichen, das dieser Stelle entspricht.





Kompletter CODE; sollte jetzt keine Raetsel mehr bieten



;;;;;;;;;;;

;; Ohne Fehlerabfragen!

;;;;;;;;;;;

DOSSEG

.MODEL SMALL



.STACK



.DATA

; Speicher fuer Uhrzeit reservieren

; weil es so gew[nscht war, werd| ich aber nicht brauchen

ZEIT DB 3 DUP (?)



;String/Pattern vorgeben

; xx,hh,mm,ss muessen noch ersetzt werden

AUSGABE DB "Die Datei "

DB ??FileName

DB ".asm wurde am "

ADATE DB "xx. Maerz assembliert.",13,10

DB "Es ist jetzt "

HOUR DB "hh:"

MINUTE DB "mm:"

SECOND DB "ss Uhr",13,10,'$'



; Compilierungsdatum speichern

; Format: MM/DD/YY

CDATE DB ??Date

DAY EQU CDATE + 3; zeigt auf DD





.CODE

start:

mov ax, @DATA

mov ds,ax

;Compilierungs-Tag kopieren

;ASCII/String aus zwei Ziffern, also ein word lang

mov ax, word ptr DAY

mov word ptr ADATE,ax



; aktuelle Uhrzeit bestimmen

mov ah,2ch

int 21h

;Stunde in String Schreiben

mov al,ch

call hex2dec

mov [HOUR], al

mov [HOUR+1],ah

;Minute in String schreiben

mov al,cl

call hex2dec

mov [MINUTE],al

mov [MINUTE+1],ah

;Secunde in String schreiben

mov al,dh

call hex2dec

mov [SECOND],al

mov [SECOND+1],ah



; String ausgeben

mov dx,OFFSET AUSGABE

mov ah,09h

int 21h



; Programm beenden

mov ax,4c00h

int 21h



; konvertiert hexadeyimalbyte in dezimalzahl

; veraendert ax und bl

; erwartet hexbyte in ax (??xyh)

; rueckgabewert: 10er Stelle in al

; 1er Stelle in ah

; beides als ASCII-Wert

hex2dec:

;oberes Byte loeschen

xor ah,ah

;division durch 10 ergibt->Ergebnis in AL, Rest in AH

mov bl,10

div bl

;Addieren von 30h ergibt ASCII-Zeichen

add ah,30h

add al,30h

ret



END start







Gruss

PhysChemist

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: