Algorithm 将历元后的秒数转换为日期

Algorithm 将历元后的秒数转换为日期,algorithm,assembly,Algorithm,Assembly,如何在汇编中将秒从历元格式转换为日期格式 以下是我的尝试: ;get the system date mov dword eax, [ebx+0] push eax xor edx, edx mov edi, 86400 div edi ;1day=86400secs, remainder in edx add edx, 4 ;day 0 was Thu

如何在汇编中将秒从历元格式转换为日期格式

以下是我的尝试:

    ;get the system date
    mov     dword eax, [ebx+0]
    push    eax
    xor     edx, edx
    mov     edi, 86400
    div     edi             ;1day=86400secs, remainder in edx
    add     edx, 4          ;day 0 was Thursday
    mov     eax, edx
    xor     edx, edx
    mov     edi, 7
    div     edi             ;find the day of the week
    mov     [wday], edx
顺便问一下,我的除法正确吗(为了得到edx中的余数)?
基本上,这段代码为一天生成正确的数字(星期天为1)。那么我如何计算月份的数字呢?

我强烈建议在汇编程序中尝试之前,先用更高级的语言进行计算。日期数学过于复杂和不规则,无法直接在汇编中设计算法

通过除以86400,你已经得到了自大纪元以来的天数。由于一年中的天数各不相同,您需要计算出您所处的年份(以及一年中的天数)。概念上最简单的方法是一年一年地计算——如果是闰年,则减去366,否则减去365,直到你的天数少于一年。然后你可以按月做同样的事情(减去31,或30,或29,或28!)。当然,还有一些潜在的优化,但这些可以在以后进行


至于你现在的代码。。。我认为你在计算一周中的某一天时,无意中使用了当天午夜后的秒数,而不是天数。(换句话说,你应该在第一个div之后使用eax,而不是edx。)同时要记住,余数的范围是0到6,所以如果你想要一个[1..7]范围,你应该在之后加上1。

如果这不是家庭作业,那就是受虐狂。呵呵……不,这不是家庭作业,实际上,这是一个试图实现一个算法,我在网上找到了其他东西,但我必须计算的日期和月份第一!