2012-04-09 11 views
5

मुझे इसे थोड़ा सा बाएं शिफ्ट दोनों को लागू करने की आवश्यकता है, और LC-3 Assembly का उपयोग करके थोड़ा सा दायां शिफ्ट करें। असल में, प्रत्येक बिट को शिफ्ट की दिशा में एक स्थान पर स्थानांतरित किया जाना चाहिए, और शून्य शून्य खाली स्थान को भरता है।एलसी 3 असेंबली बिटवाई राइट शिफ्ट

उदाहरण:

सही शिफ्ट:

01001001 
00100100→ 

वाम शिफ्ट:

01001001 
←10010010 

मैं सफलतापूर्वक, एक बाएं पारी को क्रियान्वित किया है बाइनरी स्ट्रिंग ले रही है, और खुद में जोड़कर ।

मैं सही बदलाव करने के तरीके पर फंस गया हूं। किसी भी विचार की बहुत सराहना की जाएगी। मेरे पास मूल्यों और स्मृति की पूरी श्रृंखला को स्टोर करने के लिए ऑपरेशन, डेटा आंदोलन संचालन, सात रजिस्टरों को जोड़ना है, नहीं। मुझे बस कुछ बुनियादी विचारों की आवश्यकता है कि इसे कैसे कार्यान्वित किया जा सकता है।

यदि आपको एलसी -3 निर्देश सेट संदर्भ की आवश्यकता है, तो one here है।

+0

कार्य लिंक को हल करने के लिए एक रास्ता है : http://www.cs.utexas.edu/users/fussell/cs310h/lectures/Lecture_10-310h.pdf –

उत्तर

1

वाह, यह काफी कम निर्देश सेट है।

यदि आपके पास 256 बाइट्स मेमोरी उपलब्ध है, तो एक लुकअप टेबल जाने का तरीका हो सकता है।

बिट निकालने के लिए AND का उपयोग करके आप प्रत्येक बिट स्थिति पर लूप का उपयोग करके डेटा मेमोरी के बिना ऐसा कर सकते हैं।

+0

क्या आप इसे देख सकते हैं? http://stackoverflow.com/questions/30017878/where-is-32768-coming-from – committedandroider

4

मान लीजिए कि आप R2 सेट अप करें ताकि यह केवल एक बिट सेट हो। फिर, यदि आप Z स्थिति पर किसी अन्य रजिस्टर और शाखा के साथ AND करते हैं, तो आप परीक्षण कर रहे हैं कि वह बिट सेट है या नहीं। यदि ऐसा है, तो आप अपने "परिणाम" रजिस्टर में पिछली बिट सेट करना चाहते हैं।

यदि आप अपने एकल-बिट रजिस्टर को एक स्थान पर स्थानांतरित करते हैं और एक लूप में दोहराते हैं, तो आपको अपनी आवश्यकता होनी चाहिए।

(क्षमा याचना अगर यह अस्पष्ट है, के बाद से इस शायद होमवर्क मैं बस आपको जवाब देने से बचने के लिए कोशिश कर रहा हूँ है)

संपादित करें:

तो, आपके इनपुट लगता है 01001011. आप शुरू है 00000000 के आउटपुट के साथ, 00000010 का एक इनपुट मास्क, और 00000001 का आउटपुट मास्क। आप AND करते हैं और पाते हैं कि यह nonzero है, इसलिए आप आउटपुट में अपना आउटपुट मास्क जोड़ते हैं। फिर आप 00000100 और 00000010 प्राप्त करने के लिए दोनों मास्क को स्थानांतरित कर देते हैं।

अगली बार लूप के माध्यम से, और शून्य है, इसलिए आप कुछ भी नहीं जोड़ते हैं, और आगे। मास्क स्थानांतरण करते समय लूप समाप्त हो जाता है।

+0

यह काम कर सकता है, लेकिन ऐसा लगता है कि इसे लागू करने के लिए एक आसान होना चाहिए (जैसे इसे बाएं शिफ्ट में जोड़ना) आप सही हैं कि यह होमवर्क है, और यह बुधवार (एपीआर 11) के कारण है, इसलिए मेरे पास इस दृष्टिकोण के साथ "बलपूर्वक बल" से पहले बेहतर समाधान की तलाश करने के लिए कुछ दिन हैं। –

+0

यह बिल्कुल "क्रूर बल" नहीं है; यह सेटअप सहित कोड की सिर्फ 9 लाइनें है। –

0

आपको दो मास्क की आवश्यकता है। उनमें से दोनों एक "1" हैं जिनमें से बाकी के "0" हैं। दोनों को 0000 0000 0000 0001 में शुरू किया गया है, लेकिन उनमें से एक को उस राशि से छोड़ा गया है जिसे आप मूल संख्या को सही स्थानांतरित करना चाहते हैं। हम उस मास्क 1 को कॉल करेंगे। अन-स्थानांतरित नंबर मास्क 2 होगा।

मूल संख्या के साथ मास्क 1 की तुलना करें। यदि (मास्क 1 "और" इनपुट)> या < 0, "या" आउटपुट के साथ मास्क 2 और फिर मास्क दोनों को बाएं-शिफ्ट करें।

किसी भी मामले में, मास्क दोनों को बाएं-शिफ्ट करें और परीक्षण करने के लिए इनपुट में कोई और बिट्स न होने तक पुनः प्रयास करें।

एलसी -3 में थोड़ा सा नहीं है "या" आपको दोनों ऑपरेटरों को "नहीं" करना होगा, और "उन्हें, फिर" नहीं "थोड़ा सा परिणाम" या "

मास्क 1 "और" इनपुट है> या < 0 का परीक्षण करने का कारण यह है कि यदि यह शून्य है, तो हम कुछ भी नहीं करना चाहते हैं। यदि इन ऑपरेटरों का परिणाम "0" है और 0 है, तो इसका मतलब है कि परीक्षण की स्थिति को "1" मिला और इसे परिणाम में मुद्रित करने की आवश्यकता है। यदि मुखौटा 1000 0000 0000 0000 बनने के लिए छोड़ा गया है, तो यह तकनीकी रूप से ऋणात्मक संख्या है। उस स्थिति में "1" और "1" के साथ कोई भी संख्या ऋणात्मक संख्या भी होगी।

+0

यदि आप जानते हैं कि कोई वाह नहीं है तो आप 'या' के बजाय 'add' कर सकते हैं। यह मामला यहां है क्योंकि आप एक समय में एक बिट काम करते हैं। –

0

एक अग्रणी 0 मानते हुए आप बार-बार घटकर 2 से विभाजित कर सकते हैं।

तो गिनती कितनी बार जोड़ें कर सकते हैं RX, RX, # -2

मुझे यकीन है कि वहाँ भी एक नियंत्रण रेखा -3 ईसा संदर्भ के लिए एक अग्रणी 1.

+1

अनुस्मारक 1 के आसपास एक तरीका होगा, और 0xFE के साथ रजिस्टर को विभाजित करने से पहले होगा। लेकिन यह समाधान मेरे लिए बहुत धीमा दिखता है – Tommylee2k