Unix time

Unix tid i ASM
bidragsyter. INBAR RAZ
jeg så en tråd som skjer her, om emnet
jeg bare tilfeldigvis har programmert noe slikt, for et bestemt program. Det er ikke perfekt, i hovedsak at det vil gi gode resultater bare 1970 til 2099, fordi jeg ikke har lyst til å begynne å undersøke hvilke er skuddår, og som ikke er. Alle skuddår mellom 1970 og 2 099 er inkludert, though.
--------------------------------- = kutt her = --------------------------------- { ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß } product: {Denne prosedyren returnerer en LongInt UNIX-like tidsstempel. TimeRec blir} {overskrevet av den resulterte UNSIGNED DWORD. }
Prosedyre SecondSince1970 (år, måned, dag, time, minutt: Word; Var TimeRec);
Var T_LO, T_HI: Word,
Begynn Asm
RingTable
Table:
Pop Si Legg Si, 6 {Point Si til data bord} JMPCompute product: {Denne tabellen inneholder antall dager i alle måneder før denne en}
dw 0 {Innen 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 } product: {Dette ia rutine å multiplisere en DWORD av en WORD} {Input: DX: AX ord til multilpy, CX multiplikator}
Calc:
Push Si Push Di
Mov Di, Dx Mov Si, Ax
desember Cx {Vi allerede har det multiplisert med en}
Addit:
Legg Ax, Si ADC Dx, Di
LoopAddit
Pop Di Pop Si Anmeldelser Ret
Compute:
Xor Di, Di {Variabel for skuddår}
{sekunder av runde år}
Mov Bx, Årsmodell Sub Bx, 1970 Mov Ax, 365 * 24 {Timer per år } Mov Cx, 60 * 60 {sekunder per time} Xor Dx, Dx
RingCalc {Multipliser dword respons av CX} Mov Cx
Bx CallCalc Push Ax Push Dx product: {sekunder av spranget år}
Mov Ax, Årsmodell Sub Ax, 1972 {First skuddår etter 1972} Mov Bx, 4 Xor Dx, Dx Div Bx product: {DX har nå antall dager for å legge becaues av skuddår. } {Hvis DX er 0, er dette et skuddår, og vi må ta det inn conideration}
Mov Di, Dx {Hvis DI er 0, er dette et skuddår}
Inc Ax {Vi må telle 1972 samt} Xor Dx, Dx Mov Bx, 60 * 60 Mov Cx, 24
Mul Bx CallCalc
Mov Cx, Dx Mov Bx, Ax product: {Nå kan du legge det vi hadde før}
Pop Dx Pop Ax
Legg Ax, Bx ADC Dx
Cx Push Ax Push Dx product: {DX: AX holder antall sekunder siden 1970 til begynnelsen av året} product: {Legg dager innen dette året}
Mov Bx, Måned desember Bx Shl Bx, 1 Legg Bx, Si Mov Bx, cs: [Bx] {Lookup Table, summen av måneder bortsett fra denne ene} Legg Bx, Day {Legg dager i løpet av denne ene} desember Bx {I dag er ikke slutt ennå}
Mov Ax, 60 * 60 Mov Cx, 24 Xor Dx, Dx Mul Bx CallCalc
Mov Cx, Dx Mov Bx, Ax product: {Nå kan du legge det vi hadde før - dager før begynnelsen av året}
Pop Dx Pop Ax
Legg Ax, Bx ADC Dx, Cx product: {DX: AX har nå antall SECONDSs siden 1970 till begynnelsen av dagen. }
Push Ax Push Dx product: {DX: AX holder antall sekunder før i begynnelsen av denne dagen}
Mov Bx, time Mov Ax, 60 * 60 {sekunder per time} Xor DX, Dx Mul Bx
Push Ax Push Dx
Mov Bx, Minute Mov Ax, 60 {sekunder per minutt} Xor Dx, Dx Mul Bx
Mov Cx, Dx Mov Bx, Ax
Pop Dx Pop Ax
Legg til Bx, Ax ADC Cx, Dx product: {og tilsett sekunder til begynnelsen av året}
Pop Dx Pop Ax
Legg Ax, Bx ADC Dx, Cx product: {DX: AX har nå nummer fra andre siden 1970}
Mov T_HI, Dx Mov T_LO, Ax
End,
Flytt (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);
End, product: { ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß }
--------------------------------- = kutt her = --------- ------------------------
Håper dette hjelper.
Inbar Raz



Previous:
Next Page: