Le temps Unix


le temps Unix en ASM

Contributeur: INBAR RAZ

j'ai vu un thread qui se passe ici, sur le sujet.

je viens tout juste d'avoir programmé une telle chose, pour un programme donné. Il & #39 s pas
parfait, dans l'essence qu'Il va produire de bons résultats que de 1970 à
2099, parce que je n'ai & #39 pas envie de commencer à étudier, qui sont des années bissextiles
et qui ne le sont pas. Toutes les années bissextiles entre 1970 et 2099 SONT inclus,
si.

& & & & & & & & & & & & & & & & -= couper ici = & & & & & & & & & & & & & & & & -
{ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß }

{ Cette procédure retourne un LongInt de type UNIX timestamp. TimeRec seront }
{ remplacé par la ont entraîné non signé valeur DWORD. }

Procédure SecondSince1970(Année, Mois, Jour, Heure, Minute:Word Var TimeRec)

Var T_Lo,
T_Hi : Word

Begin
Asm

@Table

@Table:

Pop-Si
Ajouter Si,6 { Point Si les données de la table }
Jmp @Calculer

{ Ce tableau contient le nombre de jours de tous les mois JUSQU'à ce que cette }

dw 0 { l'Intérieur de janvier }
dw 31 { janvier }
dw 59 { février }
dw 90 { Mars }
dw 120 { avril }
dw 151 { Mai }
dw 181 { juin }
dw 212 { juillet }
dw 243 { août }
dw 273 { septembre }
dw 304 { octobre }
dw 334 { novembre }

{ j'ai une routine pour multiplier une valeur DWORD par un MOT }
{ Entrée: DX:AX mot de multilpy, CX multiplicateur }

@Calc:

Push-Si
Push-Di

Mov Di,Dx
Mov Es,Ax

Dec Cx { Nous l'avons déjà multiplié par 1 }

@Addit:

Add Ax,Si
Adc Dx,Di

Boucle @Addit

Pop Di
Pop-Si

Ret

@Calculer:

Xor Di,Di { Variable pour l'année bissextile }

{ Secondes du round ans }

Mov Bx,An
Sous Bx,1970
Mov Ax,365*24 { Heures par année }
Mov Cx,60*60 { Secondes par heure }
Xor Dx,Dx

@Calc { Multiplier dword réponse par CX }
Mov Cx,Bx
@Calc

Push Ax
Push Dx

{ Secondes des années bissextiles }

Mov Ax,An
Sub Ax,1972 { Première année bissextile après 1972 }
Mov Bx,4
Xor Dx,Dx
Div Bx

{ DX détient désormais le nombre de jours à ajouter becaues des années bissextiles. }
{ Si DX est égal à 0, c'est une année bissextile, et nous devons le prendre en
conideration }

Mov Di,Dx { Si DI est 0, c'est une année bissextile }

Inc Ax { Nous devons compter de 1972 ainsi }
Xor Dx,Dx
Mov Bx,60*60
Mov Cx,24

Mul Bx
@Calc

Mov Cx,Dx
Mov Bx,Ax

{ Maintenant ajouter à ce que nous avions avant }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

Push Ax
Push Dx

{ DX:AX contient le nombre de secondes depuis 1970 jusqu'au début de l'année
}

{ Ajouter des jours dans cette année }

Mov Bx,Mois
Dec Bx
Shl Bx,1
Add Bx,Si
Mov Bx,cs:[Bx] { Table de Recherche, la somme du mois à l'EXCEPTION de celle }
Add Bx,Jour { Ajouter des jours à l'intérieur de cette }
Dec Bx { aujourd'Hui n'a & #39 t encore terminé }

Mov Ax,60*60
Mov Cx,24
Xor Dx,Dx
Mul Bx
@Calc

Mov Cx,Dx
Mov Bx,Ax

{ Maintenant ajouter à ce que nous avions avant - jours jusqu'au début de l'année }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

{ DX:AX détient désormais le nombre de secondss depuis 1970 jusqu'au début de l'
la journée. }

Push Ax
Push Dx

{ DX:AX contient le nombre de secondes jusqu'à ce que le début de cette journée }

Mov Bx,Heure
Mov Ax,60*60 { Secondes par heure }
Xor Dx,Dx
Mul Bx

Push Ax
Push Dx

Mov Bx,Minutes
Mov Ax,60 { Secondes / minutes }
Xor Dx,Dx
Mul Bx

Mov Cx,Dx
Mov Bx,Ax

Pop Dx
Pop Ax

Add Bx,Ax
Adc Cx,Dx

{ Et ajouter les secondes jusqu'au début de l'exercice }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

{ DX:AX détient désormais le nombre de seconde depuis 1970 }

Mov T_Hi,Dx
Mov T_Lo,Ax

Fin

Move(Mem[Seg(T_Lo):Ofs(T_Lo)],
Mem[Seg(TimeRec):Ofs(TimeRec)],2)

Move(Mem[Seg(T_Hi):Ofs(T_Hi)],
Mem[Seg(TimeRec):Ofs(TimeRec) 2],2)

Fin

{ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß }

& & & & & & & & & & & & & & & & -= couper ici = & & & & & & & & & & & & & & & & -

Espérons que cette aide.

Inbar Raz









Le temps Unix


Le temps Unix : Plusieurs milliers de conseils pour vous faciliter la vie.


le temps Unix en ASM

Contributeur: INBAR RAZ

j'ai vu un thread qui se passe ici, sur le sujet.

je viens tout juste d'avoir programme une telle chose, pour un programme donne. Il & #39 s pas
parfait, dans l'essence qu'Il va produire de bons resultats que de 1970 a
2099, parce que je n'ai & #39 pas envie de commencer a etudier, qui sont des annees bissextiles
et qui ne le sont pas. Toutes les annees bissextiles entre 1970 et 2099 SONT inclus,
si.

& & & & & & & & & & & & & & & & -= couper ici = & & & & & & & & & & & & & & & & -
{ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß }

{ Cette procedure retourne un LongInt de type UNIX timestamp. TimeRec seront }
{ remplace par la ont entraîne non signe valeur DWORD. }

Procedure SecondSince1970(Annee, Mois, Jour, Heure, Minute:Word Var TimeRec)

Var T_Lo,
T_Hi : Word

Begin
Asm

@Table

@Table:

Pop-Si
Ajouter Si,6 { Point Si les donnees de la table }
Jmp @Calculer

{ Ce tableau contient le nombre de jours de tous les mois JUSQU'a ce que cette }

dw 0 { l'Interieur de janvier }
dw 31 { janvier }
dw 59 { fevrier }
dw 90 { Mars }
dw 120 { avril }
dw 151 { Mai }
dw 181 { juin }
dw 212 { juillet }
dw 243 { août }
dw 273 { septembre }
dw 304 { octobre }
dw 334 { novembre }

{ j'ai une routine pour multiplier une valeur DWORD par un MOT }
{ Entree: DX:AX mot de multilpy, CX multiplicateur }

@Calc:

Push-Si
Push-Di

Mov Di,Dx
Mov Es,Ax

Dec Cx { Nous l'avons deja multiplie par 1 }

@Addit:

Add Ax,Si
Adc Dx,Di

Boucle @Addit

Pop Di
Pop-Si

Ret

@Calculer:

Xor Di,Di { Variable pour l'annee bissextile }

{ Secondes du round ans }

Mov Bx,An
Sous Bx,1970
Mov Ax,365*24 { Heures par annee }
Mov Cx,60*60 { Secondes par heure }
Xor Dx,Dx

@Calc { Multiplier dword reponse par CX }
Mov Cx,Bx
@Calc

Push Ax
Push Dx

{ Secondes des annees bissextiles }

Mov Ax,An
Sub Ax,1972 { Premiere annee bissextile apres 1972 }
Mov Bx,4
Xor Dx,Dx
Div Bx

{ DX detient desormais le nombre de jours a ajouter becaues des annees bissextiles. }
{ Si DX est egal a 0, c'est une annee bissextile, et nous devons le prendre en
conideration }

Mov Di,Dx { Si DI est 0, c'est une annee bissextile }

Inc Ax { Nous devons compter de 1972 ainsi }
Xor Dx,Dx
Mov Bx,60*60
Mov Cx,24

Mul Bx
@Calc

Mov Cx,Dx
Mov Bx,Ax

{ Maintenant ajouter a ce que nous avions avant }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

Push Ax
Push Dx

{ DX:AX contient le nombre de secondes depuis 1970 jusqu'au debut de l'annee
}

{ Ajouter des jours dans cette annee }

Mov Bx,Mois
Dec Bx
Shl Bx,1
Add Bx,Si
Mov Bx,cs:[Bx] { Table de Recherche, la somme du mois a l'EXCEPTION de celle }
Add Bx,Jour { Ajouter des jours a l'interieur de cette }
Dec Bx { aujourd'Hui n'a & #39 t encore termine }

Mov Ax,60*60
Mov Cx,24
Xor Dx,Dx
Mul Bx
@Calc

Mov Cx,Dx
Mov Bx,Ax

{ Maintenant ajouter a ce que nous avions avant - jours jusqu'au debut de l'annee }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

{ DX:AX detient desormais le nombre de secondss depuis 1970 jusqu'au debut de l'
la journee. }

Push Ax
Push Dx

{ DX:AX contient le nombre de secondes jusqu'a ce que le debut de cette journee }

Mov Bx,Heure
Mov Ax,60*60 { Secondes par heure }
Xor Dx,Dx
Mul Bx

Push Ax
Push Dx

Mov Bx,Minutes
Mov Ax,60 { Secondes / minutes }
Xor Dx,Dx
Mul Bx

Mov Cx,Dx
Mov Bx,Ax

Pop Dx
Pop Ax

Add Bx,Ax
Adc Cx,Dx

{ Et ajouter les secondes jusqu'au debut de l'exercice }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

{ DX:AX detient desormais le nombre de seconde depuis 1970 }

Mov T_Hi,Dx
Mov T_Lo,Ax

Fin

Move(Mem[Seg(T_Lo):Ofs(T_Lo)],
Mem[Seg(TimeRec):Ofs(TimeRec)],2)

Move(Mem[Seg(T_Hi):Ofs(T_Hi)],
Mem[Seg(TimeRec):Ofs(TimeRec) 2],2)

Fin

{ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß }

& & & & & & & & & & & & & & & & -= couper ici = & & & & & & & & & & & & & & & & -

Esperons que cette aide.

Inbar Raz


Le temps Unix

Le temps Unix : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation