कॉलिंग मैं PIC18 असेंबली में एक सुंदर मूल प्रोग्राम लिख रहा हूं। यह आवश्यक है कि मैं दो 16-बिट संख्याओं को गुणा करने के लिए एक सबराउटिन लिखूं।पीआईसी असेंबली फ़ंक्शन
;***********************************************************************
; mul_16bit: subroutine that multiplies two 16 bit numbers stored in
; addresses mul_16ptr1, mul_16ptr1+1 and mul_16ptr2,mul_16ptr2+1 and
; returns the 32-bit result in addresses mul_16res1 to mul_16res1+3
;***********************************************************************
mul_16bit:
movf mul_16ptr2, W ;multiply the lower bytes
mulwf mul_16ptr1, W
movff PRODH, mul_16res+1
movff PRODL, mul_16res
movf mul_16ptr2+1, W ;multiply upper bytes
mulwf mul_16ptr1+1, W
movff PRODH, mul_16res+3
movff PRODL, mul_16res+2
movf mul_16ptr2, W ;multiply lower byte of num2
mulwf mul_16ptr1+1, W ; and upper byte of num1
movf PRODL, W
addwf mul_16res+1, F
movf PRODH, W
addwfc mul_16res+2, F
movlw 0 ; add carry
addwfc mul_16res+3, F
movf mul_16ptr2+1, W ;multiply upper byte
;of num1 and lower
mulwf mul_16ptr1, W ; byte of num2
movf PRODL, W ;add the result to mul_16res
addwf mul_16res+1, F ;...
movf PRODH, W ;...
addwfc mul_16res+2, F ;...
movlw 0 ; add carry
addwfc mul_16res+3, F
return
तरह से मैं अभी लिखा है कि उस में पहली टिप्पणी और उन्हें स्टोर टिप्पणी में 4 रजिस्टरों में में उल्लेख पंजीकृत संग्रहीत नंबर गुणा है: यह है कि मैं क्या अभी है। यह अच्छी तरह से काम करता है अगर मैं केवल एक या दो बार इस गुणा करने की ज़रूरत है, यानी मैं बस की तरह कुछ कह सकते हैं:
mul_16ptr1 set 0x45
mul_16ptr2 set 0x47
mul_16res set 0x50
call mul_16bit
0x45
और 0x47
गुणा और 0x50
में संग्रहीत करने के लिए। समस्या तब होती है जब मुझे इसे अलग-अलग डेटा पर एक से अधिक बार कॉल करने की आवश्यकता होती है, क्योंकि असेंबलर मुझे किसी भी पॉइंटर्स को दो बार "सेट" करने नहीं देगा। मैंने अप्रत्यक्ष पहुंच का उपयोग करने की कोशिश की है (यानी मल्टीप्लिकैंड्स और नतीजे को स्टोर करने के लिए एलएफएसआर 1, एलएफएसआर 2, और एलएफएसआर 0 का उपयोग करके) लेकिन फिर मुझे POSTINC0 के इत्यादि की एक बड़ी गड़बड़ी मिलती है। क्या इस फ़ंक्शन को कॉल करने के लिए वैसे भी है?
ठीक है, यदि आप चिप को सस्ते रखना चाहते हैं तो उनमें से कई आवश्यक हैं। –