Unixzeit


Unixzeit in ASM

Autor: INBAR RAZ

Ich sah einen Thread geht hier über das Thema.

Ich bin eben so eine Sache, für ein bestimmtes Programm programmiert haben. Es ist nicht
perfekt in der Essenz, der es nur von 1970 bis gute Ergebnisse zu produzieren
2099, denn ich fühle mich nicht wie ab, um zu untersuchen, die Schaltjahre sind
und welche nicht. Alle Schaltjahre zwischen 1970 und 2099 sind enthalten,
Obwohl.

---------------------------------= cut here =---------------------------------
{ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß}

{Diese Prozedur gibt einen LongInt unixoide Zeitstempel. TimeRec werden}
{durch die Pings Word ohne Vorzeichen überschrieben.}

Prozedur SecondSince1970 (Jahr, Monat, Tag, Stunde, Minute: Word; Var TimeRec);

Var-T_Lo,
T_Hi: Word;

BEGIN
ASM

Rufen Sie @Table

Die @Table:

Pop-Si
Si, 6 {Punkt Si an Datentabelle} hinzufügen
Jmp @Compute

{Diese Tabelle enthält die Anzahl der Tage in allen Monaten bis diesein}

DW 0 {im Januar}
DW 31 {Januar}
DW 59 {Februar}
DW 90 {Mars}
DW 120 {April}
DW 151 {Mai}
DW 181 {Juni}
DW 212 {Juli}
DW 243 {August}
DW 273 {September}
DW 304 {Oktober}
DW 334 {November}

{Dieses ich eine Routine, einen DWORD-Wert mit einem Wort zu multiplizieren}
{Input: DX:AX Wort Multilpy, CX Multiplikator}

Die @Calc:

Drücken Si
Push-Di

MOV Di, Dx
MOV Si, Ax

Dec Cx {wir haben bereits es multipliziert mit 1}

Die @Addit:

Hinzufügen von Ax, Si
ADC Dx, Di

Loop @Addit

Pop-Di
Pop-Si

Ret

Die @Compute:

XOR Di, Di {Variable für Schaltjahr}

{Sekunden Runde Jahre}

MOV Bx, Jahr
Sub-Bx, 1970
MOV Ax, 365 * 24 {Stunden pro Jahr}
MOV Cx, 60 * 60 {Sekunden pro Stunde}
XOR-Dx, Dx

Rufen Sie {Multiply Dword Antwort von CX}-@Calc
MOV Cx, Bx
Aufruf @Calc

Push Ax
Push-Dx

{Sekunden von Schaltjahren}

MOV Ax, Jahr
Sub Ax, 1972 {erste Schaltjahr nach 1972}
MOV Bx, 4
XOR-Dx, Dx
Div Bx

{DX hält nun viele Tage Becaues von Schaltjahren hinzufügen.}
{Wenn DX 0 ist, dies ist ein Schaltjahr, und wir müssen es zu nehmen
Conideration}

MOV Di, Dx {wenn DI ist 0, dies ist ein Schaltjahr}

Inc Ax {wir müssen zählen auch 1972}
XOR-Dx, Dx
MOV Bx, 60 * 60
MOV Cx, 24

Mul-Bx
Aufruf @Calc

MOV Cx, Dx
MOV Bx, Ax

{Jetzt fügen Sie hinzu, was wir vorher hatte}

Pop-Dx
Pop Ax

Hinzufügen von Ax, Bx
ADC Dx, Cx

Push Ax
Push-Dx

{DX:AX enthält die Anzahl der Sekunden seit 1970 bis Anfang des Jahres
}

{Add Tagen innerhalb dieses Jahres}

MOV Bx, Monat
Dec-Bx
SHL Bx, 1
Hinzufügen von Bx, Si
MOV Bx, Cs: [Bx] {Lookup-Tabelle, Summe der Monate außer diesein}
Bx, {Add Tagen innerhalb dieser} hinzufügen
Dec-Bx {heute ist noch nicht beendet noch}

MOV Ax, 60 * 60
MOV Cx, 24
XOR-Dx, Dx
Mul-Bx
Aufruf @Calc

MOV Cx, Dx
MOV Bx, Ax

{Jetzt fügen Sie hinzu, was wir vorher - Tage bis Anfang des Jahres hatte}

Pop-Dx
Pop Ax

Hinzufügen von Ax, Bx
ADC Dx, Cx

{DX:AX hält nun die Anzahl der Secondss seit 1970 bis Anfang
Tag. }

Push Ax
Push-Dx

{DX:AX hält die Anzahl der Sekunden bis zum Beginn dieses Tages}

MOV Bx, Stunde
MOV Ax, 60 * 60 {Sekunden pro Stunde}
XOR-Dx, Dx
Mul-Bx

Push Ax
Push-Dx

MOV Bx, Minute
MOV Ax, 60 {Sekunden pro Minute}
XOR-Dx, Dx
Mul-Bx

MOV Cx, Dx
MOV Bx, Ax

Pop-Dx
Pop Ax

Hinzufügen von Bx, Ax
ADC-Cx, Dx

{Und fügen Sie die Sekunden bis zum Beginn des Jahres}

Pop-Dx
Pop Ax

Hinzufügen von Ax, Bx
ADC Dx, Cx

{DX:AX hält nun die Anzahl der Sekunden seit 1970}

MOV T_Hi, Dx
MOV T_Lo, Ax

Ende;

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);

Ende;

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

---------------------------------= cut here =---------------------------------

Hoffe, das hilft.

Inbar Raz









Unixzeit


Unixzeit : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Unixzeit in ASM

Autor: INBAR RAZ

Ich sah einen Thread geht hier über das Thema.

Ich bin eben so eine Sache, für ein bestimmtes Programm programmiert haben. Es ist nicht
perfekt in der Essenz, der es nur von 1970 bis gute Ergebnisse zu produzieren
2099, denn ich fühle mich nicht wie ab, um zu untersuchen, die Schaltjahre sind
und welche nicht. Alle Schaltjahre zwischen 1970 und 2099 sind enthalten,
Obwohl.

---------------------------------= cut here =---------------------------------
{ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß}

{Diese Prozedur gibt einen LongInt unixoide Zeitstempel. TimeRec werden}
{durch die Pings Word ohne Vorzeichen überschrieben.}

Prozedur SecondSince1970 (Jahr, Monat, Tag, Stunde, Minute: Word; Var TimeRec);

Var-T_Lo,
T_Hi: Word;

BEGIN
ASM

Rufen Sie @Table

Die @Table:

Pop-Si
Si, 6 {Punkt Si an Datentabelle} hinzufügen
Jmp @Compute

{Diese Tabelle enthält die Anzahl der Tage in allen Monaten bis diesein}

DW 0 {im Januar}
DW 31 {Januar}
DW 59 {Februar}
DW 90 {Mars}
DW 120 {April}
DW 151 {Mai}
DW 181 {Juni}
DW 212 {Juli}
DW 243 {August}
DW 273 {September}
DW 304 {Oktober}
DW 334 {November}

{Dieses ich eine Routine, einen DWORD-Wert mit einem Wort zu multiplizieren}
{Input: DX:AX Wort Multilpy, CX Multiplikator}

Die @Calc:

Drücken Si
Push-Di

MOV Di, Dx
MOV Si, Ax

Dec Cx {wir haben bereits es multipliziert mit 1}

Die @Addit:

Hinzufügen von Ax, Si
ADC Dx, Di

Loop @Addit

Pop-Di
Pop-Si

Ret

Die @Compute:

XOR Di, Di {Variable für Schaltjahr}

{Sekunden Runde Jahre}

MOV Bx, Jahr
Sub-Bx, 1970
MOV Ax, 365 * 24 {Stunden pro Jahr}
MOV Cx, 60 * 60 {Sekunden pro Stunde}
XOR-Dx, Dx

Rufen Sie {Multiply Dword Antwort von CX}-@Calc
MOV Cx, Bx
Aufruf @Calc

Push Ax
Push-Dx

{Sekunden von Schaltjahren}

MOV Ax, Jahr
Sub Ax, 1972 {erste Schaltjahr nach 1972}
MOV Bx, 4
XOR-Dx, Dx
Div Bx

{DX hält nun viele Tage Becaues von Schaltjahren hinzufügen.}
{Wenn DX 0 ist, dies ist ein Schaltjahr, und wir müssen es zu nehmen
Conideration}

MOV Di, Dx {wenn DI ist 0, dies ist ein Schaltjahr}

Inc Ax {wir müssen zählen auch 1972}
XOR-Dx, Dx
MOV Bx, 60 * 60
MOV Cx, 24

Mul-Bx
Aufruf @Calc

MOV Cx, Dx
MOV Bx, Ax

{Jetzt fügen Sie hinzu, was wir vorher hatte}

Pop-Dx
Pop Ax

Hinzufügen von Ax, Bx
ADC Dx, Cx

Push Ax
Push-Dx

{DX:AX enthält die Anzahl der Sekunden seit 1970 bis Anfang des Jahres
}

{Add Tagen innerhalb dieses Jahres}

MOV Bx, Monat
Dec-Bx
SHL Bx, 1
Hinzufügen von Bx, Si
MOV Bx, Cs: [Bx] {Lookup-Tabelle, Summe der Monate außer diesein}
Bx, {Add Tagen innerhalb dieser} hinzufügen
Dec-Bx {heute ist noch nicht beendet noch}

MOV Ax, 60 * 60
MOV Cx, 24
XOR-Dx, Dx
Mul-Bx
Aufruf @Calc

MOV Cx, Dx
MOV Bx, Ax

{Jetzt fügen Sie hinzu, was wir vorher - Tage bis Anfang des Jahres hatte}

Pop-Dx
Pop Ax

Hinzufügen von Ax, Bx
ADC Dx, Cx

{DX:AX hält nun die Anzahl der Secondss seit 1970 bis Anfang
Tag. }

Push Ax
Push-Dx

{DX:AX hält die Anzahl der Sekunden bis zum Beginn dieses Tages}

MOV Bx, Stunde
MOV Ax, 60 * 60 {Sekunden pro Stunde}
XOR-Dx, Dx
Mul-Bx

Push Ax
Push-Dx

MOV Bx, Minute
MOV Ax, 60 {Sekunden pro Minute}
XOR-Dx, Dx
Mul-Bx

MOV Cx, Dx
MOV Bx, Ax

Pop-Dx
Pop Ax

Hinzufügen von Bx, Ax
ADC-Cx, Dx

{Und fügen Sie die Sekunden bis zum Beginn des Jahres}

Pop-Dx
Pop Ax

Hinzufügen von Ax, Bx
ADC Dx, Cx

{DX:AX hält nun die Anzahl der Sekunden seit 1970}

MOV T_Hi, Dx
MOV T_Lo, Ax

Ende;

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);

Ende;

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

---------------------------------= cut here =---------------------------------

Hoffe, das hilft.

Inbar Raz


Unixzeit

Unixzeit : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Unixzeit
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung