2011-11-22 8 views
6

मैं असेंबली भाषा में विभाजन के बारे में सीख रहा हूं। जिस पुस्तक से मैं सीख रहा हूं, उसके मुताबिक, निष्क्रिय संचालन का नतीजा ईएक्स में और शेष में एडक्स में रखा गया है।विधानसभा में मॉड ऑपरेटर को कैसे कार्यान्वित करें

पुस्तक में एक अभ्यास विधानसभा में number = result % divisor लागू करना है।

मैंने सोचा होगा कि यह एक सामान्य विभाजन ऑपरेशन के बराबर होगा, सिवाय इसके कि एडीएक्स परिणाम होगा।

हालांकि यह काम नहीं करता था और एडक्स प्रतीत होता है कचरा।

क्यों? आप उपरोक्त छद्म कोड को असेंबली में कैसे कार्यान्वित करते हैं?

+4

मैं एक छोटे सी समारोह को कोडित करता हूं, और जेनरेट असेंबली (उदाहरण के लिए 'gcc -O -fverbose-asm -S tiny.c') –

+2

के साथ आपका प्रश्न http://stackoverflow.com/questions के समान है/8021772/असेंबली-भाषा-कैसे-टू-डू-मॉडुलो/8022107 यदि आपको विशिष्ट समस्याएं हैं (संभवतः आप rdx के ऊपरी ऊपरी भाग को साफ़ नहीं कर रहे हैं: रैक्स, edx: eax या dx: कुल्हाड़ी)। – user786653

+0

कोड देखने के बिना अनुमान लगाना मुश्किल है, लेकिन एक आम पर्ची-अप idiv से पहले शून्य edx को भूल रहा है। –

उत्तर

15

पूर्णांक सापेक्ष दो तरह से लागू किया जा सकता: सबसे पहले DIV या IDIV, जहां शेष EDX में रखा जाएगा का उपयोग करके

, लेकिन आप करने के लिए शून्य EDX पहले, या बोली इंटेल की जरूरत है:

ऑपरेंड आकार ----------- | लाभांश | Divisor | कोटिएंट | शेष

Quadword/doubleword | ईडीएक्स: ईएक्स | आर/एम 32 | ईएक्स | EDX।

जैसे:

eax = eax % 9 

जब अहस्ताक्षरित हो जाता है:

XOR EDX,EDX ;clear the destinations for outputs. this stops the garbage remainder  
MOV ECX,9 
DIV ECX 
MOV EAX,EDX 

जब हस्ताक्षर किए, यह है:

MOV ECX,9 
CDQ ;this will clear EDX due to the sign extension 
IDIV ECX 
MOV EAX,EDX 

दूसरा तरीका इस्तेमाल किया है जब आप का उपयोग कर सापेक्ष एक अनुकूलन है दो की शक्ति, इस मामले में आप AND ओ द्वारा ओ दो की शक्ति से कम, उदाहरण: eax = eax % 8AND EAX,7 बन जाता है।

+0

में जोड़ना चूंकि idiv हस्ताक्षरित संस्करण है, तो क्या आप सीडीक्यू को edx में नहीं लेना चाहिए? – harold

+0

मैंने अपना प्रश्न हटाने की कोशिश की लेकिन आपने पहले ही जवाब दिया था। मैं सिर्फ यह ध्यान रखना चाहता हूं कि कोड कोड जोड़ने के बाद यह थोड़ा सा बदल सकता है। –

+0

@harold: आप, भूल गए, अच्छा पकड़ :) – Necrolis

संबंधित मुद्दे