2010-11-28 5 views
2

からEPOCHの秒をアセンブリの日付形式に変換するにはどうすればよいですか?ここエポックからの経過秒数を

は私の試みです:

;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)を返します。したがって、月の数値はどのように計算できますか?

+0

万が一宿題は? – aefxx

+2

宿題でなければ、それはマゾヒズムです。 –

+0

hehe ...いいえ宿題は、実際には、私は何か他のネットで見つかったアルゴリズムを実装しようとしているが、私は曜日と月を最初に計算する必要があります! –

答えて

3

アセンブリで試してみる前に、より高いレベルの言語で作業することを強くお勧めします。計算が複雑すぎて不規則であるため、アセンブリでアルゴリズムを直接設計することはできません。

エポックからの経過日数は86400で割り算されています。1年の日数はさまざまなので、あなたは何年目かを知る必要があります)。それを行う概念的に最も簡単な方法は、毎年取ることです。うるう年の場合は366を、それ以外の場合は365を引いて、1年分の日数が経過するまで行います。それからあなたは同じ月に同じ月に行うことができます(31または30、または29、または28を引いてください)。もちろん、潜在的な最適化がありますが、それらは後に来る可能性があります。

あなたの現在のコードについては、曜日を計算しようとすると、誤って現在の午前0時を過ぎた秒数を使用していると思います。 (言い換えれば、edxではなく最初のdivの後にeaxを使って作業する必要があります)。残りの部分は0から6までの範囲になるので、[1..7]の範囲が必要な場合は、その後に1を追加する必要があります。

+0

ありがとう、非常に誠実な答え。 –

関連する問題