कृपया मदद करें, मुझे DEBUG - DOSBOX में असेंबली प्रोग्रामिंग का उपयोग करके पहले 5 नंबरों के वर्गों के योग की आवश्यकता है। यह 2^2 का एक उदाहरण है:

  -a 100 </i> 
       15BC:0100 mov ax,1 
       15BC:0103 mov bx,2 ; Base Number 
       15BC:0106 mov cx,2 ; Exponent 
       15BC:0109 ;bucle 109: 
       15BC:0109 mov dx,0  
       15BC:010C mul bx 
       15BC:010E loop 109  
       15BC:0110 int 20  
       15BC:0112 
       -g 110 
0
Anne Blanco 12 सितंबर 2020, 10:31

1 उत्तर

सबसे बढ़िया उत्तर

निर्देश mul bx ax (हमेशा) की सामग्री को bx रजिस्टर (पैरामीटर) की सामग्री से गुणा करता है। क्योंकि 16 बिट रजिस्टर हैं, परिणाम में 32 बिट तक हो सकते हैं। इस परिणाम के निचले 16 बिट्स को ax में और उच्चतर 16 बिट्स को dx में रखा गया है। इसलिए आपको mul से पहले dx को साफ़ करने की ज़रूरत नहीं है। यह केवल div के लिए आवश्यक है।

ax = 3² (सामान्य तौर पर ax = bxcx) की गणना करने के लिए कोड होगा:

    mov  ax, 1
    mov  bx, 3  ; Base Number (that is multiplied by itself cx plus one times)
    mov  cx, 2  ; Exponent (how often the multiplication should be repeated)
expLoop:
    mul  bx
    loop expLoop

यदि केवल वर्ग की गणना की जानी है, तो लूप अब आवश्यक नहीं है और कोड को सरल बनाया जा सकता है:

    mov  ax, 3 ; Base Number (that is multiplied by itself one time)
    mul  ax

यह (सामान्य तौर पर ax²) की गणना करेगा। ध्यान दें कि bx और cx अब यहां उपयोग नहीं किए जाते हैं।

जैसा कि माइकल ने पहले ही उल्लेख किया है, यदि आप वर्गों का योग प्राप्त करना चाहते हैं तो आपको इसके बाद अपने परिणामों का योग करना होगा। कारण cx का अब उपयोग नहीं किया जाता है, इसका उपयोग loop के साथ चुकता किए जाने वाले सभी नंबरों पर पुनरावृति के लिए किया जा सकता है। bx का उपयोग वर्गों के योग को संग्रहीत करने के लिए किया जा सकता है:

    xor  bx, bx  ; Sum is initialised to zero
    mov  cx, 5   ; Iterate from 5 down to 1
iterate:
    mov  ax, cx
    mul  cx      ; Calculate the square of the acutal number
    add  bx, ax  ; Sum up the squares in bx
    loop iterate
2
fcdt 12 सितंबर 2020, 16:54