NASM获取当前日期和时间

时间:2015-03-30 07:50:55

标签: nasm

我想以一些可用的格式获取NASM中的当前日期和时间。 我知道如何获取时间戳(使用系统调用sys_time),但是有很多工作可以从时间戳获得可用的日期和时间。 您需要计算每年,每月,每一天并考虑每一个闰年,闰秒(到目前为止它们有多少?我无法预测未来的闰秒),所以我认为应该有一种操作系统可以处理的方式此

所以我的问题是:有没有办法以可用的方式获取当前的日期和时间,所以我不必从时间戳计算它?

我正在使用的操作系统:CentOS 7

根据一些人的说法,我的问题与:How can I access system time using NASM?相同 好吧,那不是真的。我的问题更具体(我不想要时间戳),上面的答案对我没有帮助,因为要么给我时间戳,要么根本不工作。指令OUT上的大多数额定答案计数,这会导致我的系统出现Sefmentation故障。

1 个答案:

答案 0 :(得分:0)

您可以使用libc中的timelocaltime函数获取tm struct,然后根据该结构中的字段执行任何操作。

以下是您如何做到这一点的示例(它是GAS / AT& T语法的一个例子,因为这是我碰巧可用的工具):

.equ tm_sec, 0
.equ tm_min, 4
.equ tm_hour, 8
.equ tm_mday, 12
.equ tm_mon, 16
.equ tm_year, 20
.equ tm_wday, 24
.equ tm_yday, 28
.equ tm_isdst, 32

.bss
now: .space 4

.data
fmt:     .ascii  "%d-%02d-%02d"
.byte 0

.text
.global _main
_main: 

    # Get current time (see 'man time(2)')
    pushl   $now
    call    _time 
    addl    $4,%esp

    # Convert to a tm struct (see 'man localtime(3)')
    pushl   $now
    call    _localtime
    addl    $4,%esp

    # Print the year, month, and day of month fields
    pushl   tm_mday(%eax)
    movl    tm_mon(%eax),%ebx
    incl    %ebx
    pushl   %ebx
    movl    tm_year(%eax),%ebx
    addl    $1900,%ebx
    pushl   %ebx
    pushl   $fmt
    call    _printf
    addl    $16,%esp

    call    _exit