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 
Unix time
Previous:CRT32 
Next Page:Enkel string compression 
			 
        
