Tiempo Unix


tiempo de Unix en ASM

Colaborador: INBAR RAZ

vi un hilo que pasa por aquí, sobre el tema.

lo que pasa es que se han programado una cosa, para un determinado programa. & #39 s no
perfecto, en la esencia, que se va a producir buenos resultados sólo a partir de 1970 a
2099, porque yo no & #39 t ganas de comenzar a investigar que son los años bisiestos
y los que no lo son. Todos los años bisiestos entre 1970 y 2099 SE incluyen,
si.

& & & & & & & & & & & & & & & & -= cortar por aquí = & & & & & & & & & & & & & & & & -
{ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß }

{ Este procedimiento devuelve una LongInt UNIX timestamp. TimeRec serán }
{ sobreescrito por el resultado UNSIGNED DWORD. }

Procedimiento SecondSince1970(Año, Mes, Día, Hora, Minuto:Word Var TimeRec)

Var T_Lo,
T_Hi : Word

Begin
Asm

Llame a @Table

@Tabla:

Pop Si
Agregar Si,6 { Punto Si a los datos de la tabla }
Jmp @Informáticas

{ Esta tabla contiene el número de días, en todos los meses HASTA que este un }

dw 0 { Dentro de enero }
dw 31 { enero }
dw 59 { febrero }
dw 90 { Marte }
dw 120 { abril }
dw 151 { Mayo }
dw 181 { junio }
dw 212 { julio }
dw 243 { agosto }
dw 273 { septiembre }
dw 304 { octubre }
dw 334 { noviembre }

{ Esto quiero una rutina para multiplicar un valor DWORD por una PALABRA }
{ Entrada: DX:AX palabra a multilpy, CX multiplicador }

@Calc:

Empuje Si
Push Di

Mov Di,Dx
Mov Si,Ax

Dec Cx { ya Hemos multiplicado por 1 }

@Addit:

Add Ax,Si
Adc Dx,Di

Bucle @Addit

Pop-Di
Pop Si

Ret

@Calcular:

Xor Di,Di { Variable para el año bisiesto }

{ Segundos de la ronda de años }

Mov Bx,Año
Sub Bx,1970
Mov Ax,365*24 { Horas por año }
Mov Cx,60*60 { Segundos por hora }
Xor Dx,Dx

Llame a @Calc { Multiplicar dword respuesta por parte de CX }
Mov Cx,Bx
Llamada @Calc

Push Ax
Push Dx

{ Segundos de los años bisiestos }

Mov Ax,Año
Sub Ax,1972 { Primer año bisiesto después de 1972 }
Mov Bx,4
Xor Dx,Dx
Div Bx

{ DX ahora tiene el número de días a añadir becaues de los años bisiestos. }
{ Si DX es 0, este es un año bisiesto, y necesitamos tomar en
conideration }

Mov Di,Dx { Si DI es 0, este es un año bisiesto }

Inc Ax { debemos contar 1972 como bien }
Xor Dx,Dx
Mov Bx,60*60
Mov Cx,24

Mul Bx
Llamada @Calc

Mov Cx,Dx
Mov Bx,Ax

{ Ahora agregar a lo que teníamos antes }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

Push Ax
Push Dx

{ DX:AX contiene el número de segundos desde 1970 hasta principios de año
}

{ Agregar días dentro de este año }

Mov Bx,Mes
Dec Bx
Shl Bx,1
Add Bx,Si
Mov Bx,cs:[Bx] { Tabla de Búsqueda, la suma de los meses, EXCEPTO una }
Add Bx,Día { Agregar días dentro de este uno de los }
Dec Bx { Hoy ha & #39 t terminado todavía }

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

Mov Cx,Dx
Mov Bx,Ax

{ Ahora agregar a lo que teníamos antes días hasta el comienzo del año }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

{ DX:AX, ahora tiene el número de secondss desde 1970 hasta principios de
día. }

Push Ax
Push Dx

{ DX:AX contiene el número de segundos hasta que el comienzo de este día }

Mov Bx,Horas
Mov Ax,60*60 { Segundos por hora }
Xor Dx,Dx
Mul Bx

Push Ax
Push Dx

Mov Bx,Minuto
Mov Ax,60 { Segundos por minuto }
Xor Dx,Dx
Mul Bx

Mov Cx,Dx
Mov Bx,Ax

Pop Dx
Pop Ax

Add Bx,Ax
Adc Cx,Dx

{ Y agregar los segundos, hasta que a principios de año }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

{ DX:AX alberga ahora el número de segundos desde 1970 }

Mov T_Hi,Dx
Mov T_Lo,Ax

Final

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

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

Final

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

& & & & & & & & & & & & & & & & -= cortar por aquí = & & & & & & & & & & & & & & & & -

Espero que esto ayude.

Inbar Raz









Tiempo Unix


Tiempo Unix : Multi-millones de consejos para hacer su vida mas facil.


tiempo de Unix en ASM

Colaborador: INBAR RAZ

vi un hilo que pasa por aqui, sobre el tema.

lo que pasa es que se han programado una cosa, para un determinado programa. & #39 s no
perfecto, en la esencia, que se va a producir buenos resultados solo a partir de 1970 a
2099, porque yo no & #39 t ganas de comenzar a investigar que son los años bisiestos
y los que no lo son. Todos los años bisiestos entre 1970 y 2099 SE incluyen,
si.

& & & & & & & & & & & & & & & & -= cortar por aqui = & & & & & & & & & & & & & & & & -
{ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß }

{ Este procedimiento devuelve una LongInt UNIX timestamp. TimeRec seran }
{ sobreescrito por el resultado UNSIGNED DWORD. }

Procedimiento SecondSince1970(Año, Mes, Dia, Hora, Minuto:Word Var TimeRec)

Var T_Lo,
T_Hi : Word

Begin
Asm

Llame a @Table

@Tabla:

Pop Si
Agregar Si,6 { Punto Si a los datos de la tabla }
Jmp @Informaticas

{ Esta tabla contiene el numero de dias, en todos los meses HASTA que este un }

dw 0 { Dentro de enero }
dw 31 { enero }
dw 59 { febrero }
dw 90 { Marte }
dw 120 { abril }
dw 151 { Mayo }
dw 181 { junio }
dw 212 { julio }
dw 243 { agosto }
dw 273 { septiembre }
dw 304 { octubre }
dw 334 { noviembre }

{ Esto quiero una rutina para multiplicar un valor DWORD por una PALABRA }
{ Entrada: DX:AX palabra a multilpy, CX multiplicador }

@Calc:

Empuje Si
Push Di

Mov Di,Dx
Mov Si,Ax

Dec Cx { ya Hemos multiplicado por 1 }

@Addit:

Add Ax,Si
Adc Dx,Di

Bucle @Addit

Pop-Di
Pop Si

Ret

@Calcular:

Xor Di,Di { Variable para el año bisiesto }

{ Segundos de la ronda de años }

Mov Bx,Año
Sub Bx,1970
Mov Ax,365*24 { Horas por año }
Mov Cx,60*60 { Segundos por hora }
Xor Dx,Dx

Llame a @Calc { Multiplicar dword respuesta por parte de CX }
Mov Cx,Bx
Llamada @Calc

Push Ax
Push Dx

{ Segundos de los años bisiestos }

Mov Ax,Año
Sub Ax,1972 { Primer año bisiesto despues de 1972 }
Mov Bx,4
Xor Dx,Dx
Div Bx

{ DX ahora tiene el numero de dias a añadir becaues de los años bisiestos. }
{ Si DX es 0, este es un año bisiesto, y necesitamos tomar en
conideration }

Mov Di,Dx { Si DI es 0, este es un año bisiesto }

Inc Ax { debemos contar 1972 como bien }
Xor Dx,Dx
Mov Bx,60*60
Mov Cx,24

Mul Bx
Llamada @Calc

Mov Cx,Dx
Mov Bx,Ax

{ Ahora agregar a lo que teniamos antes }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

Push Ax
Push Dx

{ DX:AX contiene el numero de segundos desde 1970 hasta principios de año
}

{ Agregar dias dentro de este año }

Mov Bx,Mes
Dec Bx
Shl Bx,1
Add Bx,Si
Mov Bx,cs:[Bx] { Tabla de Busqueda, la suma de los meses, EXCEPTO una }
Add Bx,Dia { Agregar dias dentro de este uno de los }
Dec Bx { Hoy ha & #39 t terminado todavia }

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

Mov Cx,Dx
Mov Bx,Ax

{ Ahora agregar a lo que teniamos antes dias hasta el comienzo del año }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

{ DX:AX, ahora tiene el numero de secondss desde 1970 hasta principios de
dia. }

Push Ax
Push Dx

{ DX:AX contiene el numero de segundos hasta que el comienzo de este dia }

Mov Bx,Horas
Mov Ax,60*60 { Segundos por hora }
Xor Dx,Dx
Mul Bx

Push Ax
Push Dx

Mov Bx,Minuto
Mov Ax,60 { Segundos por minuto }
Xor Dx,Dx
Mul Bx

Mov Cx,Dx
Mov Bx,Ax

Pop Dx
Pop Ax

Add Bx,Ax
Adc Cx,Dx

{ Y agregar los segundos, hasta que a principios de año }

Pop Dx
Pop Ax

Add Ax,Bx
Adc Dx,Cx

{ DX:AX alberga ahora el numero de segundos desde 1970 }

Mov T_Hi,Dx
Mov T_Lo,Ax

Final

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

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

Final

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

& & & & & & & & & & & & & & & & -= cortar por aqui = & & & & & & & & & & & & & & & & -

Espero que esto ayude.

Inbar Raz


Tiempo Unix

Tiempo Unix : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación