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