我如何得到系统时间在nasm x64,但在毫秒?



所以我仍然是NASM x64的初学者。我在写一个石头剪刀布程序,我决定不得到一个随机数,而是得到最后一个毫秒数。我已经知道如何获得以秒为单位的时间:

section .text:
global _start
_start:
mov rax, 201
xor rdx, rdx      ; if rdx is empty, the time value will go to rax
syscall
; exit
mov rax, 60
mov rdi, 0
syscall

我已经测试过了,它可以工作。我如何做完全相同的事情,但rax将以毫秒为单位保存值?(我不是说乘以1000,我想要真实的值)

我已经找了很长时间:通过系统调用表,搜索它,看一所大学的课程计划。我甚至问过人工智能。所以我最后只能求你们了。如有任何帮助,我将不胜感激。

有一个gettimeofday系统调用,它给您提供微秒,或者clock_gettime给您提供纳秒。调用它们需要做更多的工作,因为它们返回缓冲区而不是寄存器中的时间,但是您可以在堆栈上分配一个临时缓冲区。如果您特别关心毫秒数,则相应除以1000或1000000。

如果你要去做一个系统调用的麻烦,虽然,为什么不做正确,调用getrandom(2)一些真正随机的字节?

未测试的getrandom示例:

sub rsp, 16    ; make some stack space, maintain alignment
mov rdi, rsp   ; point rdi at our stack buffer
mov esi, 1     ; read one byte
xor edx, edx   ; no flags needed
mov eax, 318   ; see https://chromium.googlesource.com/chromiumos/docs/+/HEAD/constants/syscalls.md#x86_64-64_bit
syscall
; check for errors here; left as an exercise
movzx eax, byte [rsp]  ; load the byte from stack into eax, zero the high bits
add rsp, 16    ; clean up the stack

相关内容

  • 没有找到相关文章

最新更新