मैं वर्तमान सिस्टम समय के साथ अपने यादृच्छिक संख्या जनरेटर को बीज करने की कोशिश कर रहा हूं। मैं NASM का उपयोग कर सिस्टम समय तक कैसे पहुंच सकता हूं? (मैं लिनक्स का उपयोग कर रहा)मैं NASM का उपयोग कर सिस्टम समय तक कैसे पहुंच सकता हूं?
उत्तर
%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
यह एनएएसएम का उपयोग करता है, और here से है।
मैं थोड़ा उलझन में हूं। क्या यह धारणा पर काम कर रहा है कि पोस्टर विंडोज़ का उपयोग कर रहा है? – BigBeagle
x86 पर किसी भी ओएस के लिए काम करना चाहिए जो इसकी सिस्टम दिनांक/समय को बनाए रखता है। –
बस कोशिश की - दुर्भाग्यवश, "आरटीसीएड्रेस, अल बाहर" विशेषाधिकार स्तर के कारण Vista64 पर विफल रहता है। – PhiS
मैं कहूंगा कि आप किस प्लेटफ़ॉर्म पर हैं, आपको एक ओएस फ़ंक्शन का उपयोग करना होगा।
विंडोज़ पर, GetSystemTime आज़माएं। लिनक्स पर, gettimeofday आज़माएं - संबंधित प्रश्न here देखें।
का उपयोग linux:
mov eax, 13
push eax
mov ebx, esp
int 0x80
pop eax
eax में वर्तमान यूनिक्स समय पॉप जाएगा (बस आप चाहते हैं अगर यह एक और रजिस्टर में पॉप पिछले अनुदेश बदलें)।
यह sys_time (सिस्टम कॉल नंबर 13) के लिए एक सिस्टम कॉल है, और यह समय को ईबीएक्स में स्मृति स्थान में लौटाता है, जो ढेर का शीर्ष है।
, यदि आप लिनक्स x86-64 लक्षित कर रहे हैं, तो आप बस निम्न कर सकते हैं:
mov rax, 201
xor rdi, rdi
syscall
201
sys_time
के लिए 64-बिट सिस्टम कॉल संख्या से मेल खाती है (सूचीबद्ध के रूप में here)। rdi
को 0 पर सेट किया गया है, इसलिए सिस्टम कॉल करने के बाद वापसी मूल्य rax
में संग्रहीत है, लेकिन आप इसे अपने चयन के स्मृति स्थान पर भी इंगित कर सकते हैं। परिणाम युग के बाद से सेकंड में व्यक्त किया जाता है।
इस सिस्टम कॉल के बारे में अधिक जानकारी time man page में मिल सकती है।
एक बड़ा संपादन की तरह, लेकिन मैंने सवाल उठाया कि ओपी क्या पूछ रहा था .... –
क्या आप सिस्टम कॉल/'/ dev' फाइल सिस्टम का उपयोग कर सकते हैं? –
वर्किंग क्यूईएमयू 16-बिट असली मोड उदाहरण: https://github.com/cirosantilli/x86-bare-metal-examples/blob/173111e0d0081701512a10d72dc0439f4ab1f55d/in_rtc.S क्या आप सिस्टम कॉल// dev फाइल सिस्टम का उपयोग कर सकते हैं? –