मैं CPU की घड़ी की गति के बावजूद निष्पादन को लगभग 0.1 सेकंड रोकना चाहता हूं। कोड सीधे बूट डिवाइस से चलाना चाहिए, इसलिए इसे डॉस इंटरप्ट्स का उपयोग नहीं करना चाहिए।बेयर-मेटल 16 बिट x86 असेंबली में कैसे सोएं?
मैं वर्तमान में int 15h
का उपयोग कर रहा हूं, लेकिन ऐसा लगता है कि बीआईपी के चैनल 2 के साथ मैं बीप टोन के साथ संघर्ष कर रहा हूं। मैंने चैनल 0 के बारे में सुना, लेकिन मुझे यह सेट करने के बारे में कोई जानकारी नहीं है।
सटीकता यह महत्वपूर्ण नहीं है, हालांकि, इसे एक ही गति पर पुराने और आधुनिक कंप्यूटरों पर चलाना चाहिए। तो सिर्फ लूपिंग निर्देश एक विकल्प नहीं है।
बीप कोड और नींद आवृत्ति को बदलने और स्पीकर को चालू और बंद करने के लिए मैक्रोज़ का एक गुच्छा है। अगर मैं beepoff
से पहले नींद कहता हूं तो बीप बंद नहीं होता है।
%macro beepinit 0
mov al, 182
out 43h, al
%endmacro
%macro beepfreq 0
out 42h, al
mov al, ah
out 42h, al
%endmacro
%macro beepon 0
in al, 61h
or al, 00000011b
out 61h, al
%endmacro
%macro beepoff 0
in al, 61h
and al, 11111100b
out 61h, al
%endmacro
और नींद एक:
%macro sleep 2
push dx
mov ah, 86h
mov cx, %1
mov dx, %2
int 15h
pop dx
%endmacro
मैं एनएएसएम कोडांतरक उपयोग कर रहा हूँ
यहाँ बीप मैक्रो नहीं है।
यह How can I create a sleep function in 16bit MASM Assembly x86? का डुप्लिकेट नहीं है, क्योंकि यह विंडोज या डॉस के बाहर नंगे धातु असेंबली के लिए है।
मैं ओएस-निर्भर एक से प्रश्नों को अलग करने के लिए "कैसे नंगे-धातु 16-बिट x86 असेंबली में सोना" शीर्षक बनाने का सुझाव दूंगा। शायद इस प्रश्न में संकेत मिलता है कि आपने int 15h का उपयोग करने का प्रयास कैसे किया है, इस सवाल को प्रश्न को व्यापक बनाने में मदद मिलेगी (यह वर्तमान स्वरूप में सीमा रेखा है)। –
@PascalCuoq ठीक है, मैंने इसे थोड़ा संपादित किया। –
संबंधित: http://stackoverflow.com/a/1862232/509868 – anatolyg