Sto provando a seminare il mio generatore di numeri casuali con l'ora corrente del sistema. Come posso accedere all'ora del sistema utilizzando NASM? (Sto usando linux)Come posso accedere all'ora del sistema usando NASM?
risposta
%define RTCaddress 0x70
%define RTCdata 0x71
;Get time and date from RTC
.l1: mov al,10 ;Get RTC register A
out RTCaddress,al
in al,RTCdata
test al,0x80 ;Is update in progress?
jne .l1 ; yes, wait
mov al,0 ;Get seconds (00 to 59)
out RTCaddress,al
in al,RTCdata
mov [RTCtimeSecond],al
mov al,0x02 ;Get minutes (00 to 59)
out RTCaddress,al
in al,RTCdata
mov [RTCtimeMinute],al
mov al,0x04 ;Get hours (see notes)
out RTCaddress,al
in al,RTCdata
mov [RTCtimeHour],al
mov al,0x07 ;Get day of month (01 to 31)
out RTCaddress,al
in al,RTCdata
mov [RTCtimeDay],al
mov al,0x08 ;Get month (01 to 12)
out RTCaddress,al
in al,RTCdata
mov [RTCtimeMonth],al
mov al,0x09 ;Get year (00 to 99)
out RTCaddress,al
in al,RTCdata
mov [RTCtimeYear],al
ret
Questo utilizza NASM, ed è da here.
Sono un po 'confuso. Sta lavorando sul presupposto che il poster stia usando Windows? – BigBeagle
Dovrebbe funzionare per qualsiasi sistema operativo su x86 che mantiene la data/ora del sistema. –
Appena provato - Sfortunatamente, "out RTCaddress, al" non riesce su Vista64 a causa del livello di privilegio. – PhiS
Direi che, a seconda della piattaforma su cui ti trovi, dovrai utilizzare una funzione OS.
Su Windows, prova GetSystemTime. Su Linux, prova a gettimeofday - vedi domanda correlata here.
usare Linux:
mov eax, 13
push eax
mov ebx, esp
int 0x80
pop eax
apparirà l'ora corrente unix in eax (basta sostituire l'ultima istruzione se si vuole che mi è venuta in un altro registro).
Questa è una chiamata di sistema a sys_time (system call number 13) e restituisce l'ora nella posizione di memoria in ebx, che è la parte superiore della pila.
Con NASM, se si prendono di mira Linux x86-64, si può semplicemente effettuare le seguenti operazioni:
mov rax, 201
xor rdi, rdi
syscall
201
corrisponde al numero di chiamata di sistema a 64 bit per sys_time
(come elencato here). Il registro rdi
è impostato su 0, quindi il valore di ritorno dopo l'esecuzione della chiamata di sistema viene memorizzato in rax
, ma è anche possibile fare in modo che punti a una posizione di memoria di propria scelta. Il risultato è espresso in secondi dall'Epoca.
Ulteriori informazioni su questa chiamata di sistema sono disponibili nello time man page.
- 1. Come compilare usando nasm su MacOSX
- 2. Come posso accedere a Kinect usando Java?
- 3. Posso accedere al filesystem del mio iPhone usando Xcode?
- 4. Come posso creare un sistema "ricordami di me" usando PHP?
- 5. Come posso accedere agli elementi del dizionario?
- 6. Come posso passare usando pip tra sistema e anaconda
- 7. Come posso accedere ad un database Interbase (.IB) usando RubyOnRails?
- 8. Come posso accedere ai pixel di un'immagine usando opencv-python?
- 9. ASM: MASM, NASM, FASM?
- 10. x86 NASM 'org' significato
- 11. Come stampare un numero nell'assemblaggio NASM?
- 12. Come posso ottenere il nome del sistema operativo in modo amichevole usando Python 2.5?
- 13. Come posso controllare il controllo del mio sistema operativo usando Java ?? (J2SE, non os.arch)
- 14. come accedere ai dati del modulo usando il pallone?
- 15. Come accedere ai dati del punto di condivisione usando C#?
- 16. Come accedere a Youtube usando PHP?
- 17. Come collegare due file sorgente nasm
- 18. Come accedere a RQM usando l'API REST?
- 19. Risoluzione del sistema di equazioni lineari usando mathdotnet?
- 20. Come posso migliorare la mia comprensione del sistema Haskell Type?
- 21. Come posso sostituire il calendario predefinito del sistema operativo Android?
- 22. Come posso accedere alle opzioni specifiche del server in Capistrano?
- 23. Come posso accedere alla variabile del template nella macro TWIG?
- 24. Come accedere a più destinazioni usando NLog?
- 25. Un buon tutorial NASM/FASM?
- 26. Come accedere alla voce di menu selezionata del sistema di colore blu?
- 27. Come leggo l'immissione di un singolo carattere dalla tastiera usando nasm (assembly) sotto ubuntu?
- 28. caso allora clausola sempre valutata
- 29. Programmazione del sistema Linux
- 30. Come accedere al log di sistema su Mac
Una specie di modifica di grandi dimensioni, ma ho cercato di rendere la domanda approssimativa a quello che pensavo fosse l'OP .... –
È possibile utilizzare il sistema di chiamata di sistema/'/ dev'? –
Utilizzo di QEMU Esempio di modalità reale a 16 bit: https://github.com/cirosantilli/x86-bare-metal-examples/blob/173111e0d0081701512a10d72dc0439f4ab1f55d/in_rtc.S È possibile utilizzare system call// dev filesystem? –