我想以一些可用的格式获取NASM中的当前日期和时间。 我知道如何获取时间戳(使用系统调用sys_time),但是有很多工作可以从时间戳获得可用的日期和时间。 您需要计算每年,每月,每一天并考虑每一个闰年,闰秒(到目前为止它们有多少?我无法预测未来的闰秒),所以我认为应该有一种操作系统可以处理的方式此
所以我的问题是:有没有办法以可用的方式获取当前的日期和时间,所以我不必从时间戳计算它?
我正在使用的操作系统:CentOS 7
根据一些人的说法,我的问题与:How can I access system time using NASM?相同 好吧,那不是真的。我的问题更具体(我不想要时间戳),上面的答案对我没有帮助,因为要么给我时间戳,要么根本不工作。指令OUT上的大多数额定答案计数,这会导致我的系统出现Sefmentation故障。
答案 0 :(得分:0)
您可以使用libc中的time
和localtime
函数获取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