क्या x86 असेंबलर में मॉड्यूलो-ऑपरेटर की तरह कुछ है?असेंबली भाषा - मॉड्यूलो कैसे करें?
उत्तर
DIV
निर्देश (और हस्ताक्षर संख्याओं के लिए यह समकक्ष IDIV
) दोनों कोयंटेंट और शेष (मॉड्यूलो) देता है। DIV r16
एक 16-बिट ऑपरेंड द्वारा DX:AX
में 32-बिट संख्या विभाजित करता है और AX
में शेष और DX
में शेष को संग्रहीत करता है।
उदाहरण:
mov dx, 0
mov ax, 1234
mov bx, 10
div bx ; Divides 1234 by 10. DX = 4 and AX = 123
32-बिट में विधानसभा आप div ebx
कर सकते हैं EBX
द्वारा EDX:EAX
में एक 64-बिट संकार्य विभाजित करने के लिए। अधिक जानकारी के लिए Intels Architectures Software Developer’s Manuals देखें।
लेकिन जीसीसी div का उपयोग नहीं करता है क्योंकि यह धीमा है: http://stackoverflow.com/questions/4361979/how-does- -जीसीसी-कार्यान्वयन के- मॉड्यूल-काम और क्यों होती है-यह नहीं उपयोग- –
यदि आप बिटुल का उपयोग करके मॉड्यूलो की दो शक्तियों की गणना करते हैं और विभाजन करने से सरल और आमतौर पर तेज़ होते हैं। यदि b
दो की शक्ति है, a % b == a & (b - 1)
।
उदाहरण के लिए, चलिए रजिस्टर ईएक्स, मॉड्यूलो 64 में एक मूल्य लेते हैं।
सबसे आसान तरीका AND EAX, 63
होगा, क्योंकि 63 बाइनरी में 111111 है।
मुखौटे, उच्च अंक हमारे लिए रूचि नहीं रखते हैं। कोशिश करके देखो!
एनालॉगिक रूप से, एमयूएल या डीवी का उपयोग करने की बजाय दो, बिट-स्थानांतरण की शक्तियों के साथ जाने का तरीका है। हालांकि हस्ताक्षर किए गए पूर्णांक से सावधान रहें!
http://stackoverflow.com/questions/4361979/calculating-modulo-in-assembly –