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