.model small
.stack 100h
.data
message db "La date : $"
messagedate dw 15 dup (?)
siecle dw ?
annee dw ?
mois dw ?
jour dw ?

hh dw ?
mm dw ?
sec dw ?
messageheure dw ?
message2 db "L'heure : $"
dix db 16


.code

	mov ax,@data
	mov ds,ax

	call date	; affiche la date

	mov ah, 2
	mov dl, 10
	int 21h
	mov dl, 13
	int 21h		; saut de ligne

	call heure	; affiche l'heure

	mov ax,4C00h
	int 21h


date proc near
	push bx
	push dx
	push es
	push di

	mov dx,offset message
	mov ah,09h
	int 21h		; affiche le message d'invite

	xor ax,ax
	mov ah,4	
	int 1ah		; Lecture de la date sur l'horloge temps réel

	mov al,ch	; ch = Siècle (nombre 19 ou 20)
	div byte ptr [dix]	; division par 16 => résultat dans al et reste dans ah
	or ax,3030h
	mov siecle,ax	; ax contient maintenant la chaine "19" ou "20"
	
	xor ax,ax
	mov al,cl	; cl = Année
	div byte ptr [dix]
	or ax,3030h
	mov annee,ax
      
  	xor ax,ax
	mov al,dh	; dh = Mois
	div byte ptr [dix]
	or ax,3030h
	mov mois,ax
	
	xor ax,ax
	mov al,dl	; dl = Jour
	div byte ptr [dix]
	or ax,3030h
	mov jour,ax

	xor ax,ax
        xor cx,cx
        xor dx,dx

	; initialisation de es et di pour l'insctruction sto ( copie de l'accu dans [es:di] )	
        mov di,offset messagedate
	mov ax,@data
	mov es,ax

	mov ax,jour
	stosw		; inscrit le jour dans message
	mov al,"/"
	stosb		; inscrit "/" dans message
	mov ax,mois
	stosw		; inscrit le mois dans message
	mov al,"/"
	stosb		; inscrit "/" dans message
        mov ax,siecle
	stosw		; inscrit le siècle dans message
        mov ax,annee
	stosw		; inscrit l'annee dans message
	mov al,"$"
	stosb		; signe pour la fin de la chaine
	xor ax,ax
	xor dx,dx

	mov dx,offset messagedate
	mov ah,09h
	int 21h		; affichage de la chaine date

	pop di
	pop es
	pop dx
	pop bx
	ret
date endp

heure proc near
	push bx
	push dx
	push es
	push di

    	mov dx,offset message2
    	mov ah,09h
    	int 21h		; affiche le message d'invite

   	mov ah,2
  	int 1ah		; Lecture de l'horloge temps réel BIOS

  	mov al,ch	; ch = Heures (numérique)
    	div byte ptr [dix]
   	or ax,3030h
    	mov hh,ax	; ax contient maintenant la chaine représentant l'heure

    	xor ax,ax
    	mov al,cl
    	div byte ptr [dix]
    	or ax,3030h
    	mov mm,ax

    	xor ax,ax
  	mov al,dh
 	div byte ptr [dix]
  	or ax,3030h
  	mov sec,ax

  	xor ax,ax
   	xor cx,cx
  	xor dx,dx

	; initialisation de es et di pour l'insctruction sto ( copie de l'accu dans [es:di] )	
        mov di,offset messageheure
	mov ax,@data
	mov es,ax

  	mov ax,hh
  	stosw
    	mov al,":"
    	stosb
 	mov ax,mm
    	stosw
    	mov al,":"
    	stosb
    	mov ax,sec
    	stosw
  	mov al,"$"
    	stosb

    	xor ax,ax
    	xor dx,dx
    	xor cx,cx
    	mov dx,offset messageheure
    	mov ah,09h
    	int 21h
	
	pop di
	pop es
	pop dx
	pop bx
	ret
heure endp

end