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