2011-04-03 8 views
6

कनवर्ट करना सबसे पहले, यह होमवर्क है।दशमलव से हेक्स

मैं रजिस्टर बीएक्स में 5 अंक संख्या पढ़ने की कोशिश कर रहा हूं। यह संख्या 65535 (16 बिट्स) से अधिक नहीं माना जाता है। नीचे मैं ऐसा करने का प्रयास कर रहा हूं।

हालांकि, जब मैं संख्या मुद्रित करने का प्रयास करता हूं, तो मैं केवल अंतिम अंक दर्ज कर रहा हूं जो दर्ज किया गया था। जो मुझे लगता है कि जब मैं बीएक्स में एक और नंबर जोड़ता हूं तो यह पिछले नंबर को ओवरराइट कर रहा है, लेकिन मैं समस्या को देखने में असमर्थ हूं। किसी भी मदद की सराहना की जाएगी, मैं लगभग निश्चित है कि यह कुछ छोटे मैं अनदेखी कर रहा हूँ है हूँ: -/

mov cx,0x05 ; loop 5 times 
    mov bx,0 ; clear the register we are going to store our result in 
    mov dx,10 ; set our divisor to 10 

read: 
    mov ah,0x01  ; read a character function 
    int 0x21  ; store the character in al 
    sub al,0x30  ; convert ascii number to its decimal equivalent 
    and ax,0x000F ; set higher bits of ax to 0, so we are left with the decimal 
    push ax   ; store the number on the stack, this is the single digit that was typed 
    ; at this point we have read the char, converted it to decimal, and pushed it onto the stack 
    mov ax,bx  ; move our total into ax 
    mul dx   ; multiply our total by 10, to shift it right 1 
    pop bx   ; pop our single digit into bx 
    add bx,ax  ; add our total to bx 
    loop read  ; read another char 
+0

यदि आप दशमलव को हेक्स में परिवर्तित कर रहे हैं, तो कैसे आते हैं, कि आप 10 से विभाजित हो रहे हैं? हेक्स – fazo

+0

में कनवर्ट करने पर आपको 10 से गुणा/विभाजित करने की आवश्यकता नहीं है, मुझे नहीं लगता कि मैं स्निपेट में पोस्ट किए गए 10 से कहीं भी विभाजित कर रहा हूं। लेकिन 10 से गुणा करने का कारण यह है क्योंकि मैं एक समय में केवल 1 * चरित्र * पढ़ सकता हूं, और मुझे इसे 10 से गुणा करने की आवश्यकता है, ताकि जब मैं एक और नंबर जोड़ूं, तो यह उपयुक्त स्थान पर है। होमवर्क प्रश्न पोस्ट करने और जो आपने पहले ही कोशिश की है, उसे दिखाने के लिए – Adam

+0

+1। – vcsjones

उत्तर

4

एमयूएल opcode का उपयोग कर, देखते हैं तीन अलग-अलग परिणाम:

  • 8 बिट - परिणाम कुल्हाड़ी में जमा हो जाती
  • 16 बिट - परिणाम dx में जमा हो जाती: कुल्हाड़ी
  • 32 बिट - परिणाम EDX में जमा हो जाती: eax

तो जब आप अपना गुणा करते हैं, तो निर्देश आपके मामले में शून्य के साथ डीएक्स को ओवरराइट करता है। इसका मतलब है कि प्रत्येक ऑलकोड के बाद के उपयोग शून्य से गुणा कर रहा है।

+0

आपको बहुत धन्यवाद, 1 लाइन और यह पूरी तरह से काम कर रहा है। यह मेरे लिए नहीं हुआ था कि डीएक्स 0 के साथ लिखा जा रहा था, मुझे लगता है कि यह वही मूल्य रहेगा। – Adam

+1

याद रखें, वही बात तब हो सकती है जब आप केवल विपरीत में div opcode का उपयोग करते हैं। – Sparafusile