संख्या के एमआईपीएस स्ट्रिंग को हेक्साडेसिमल में कैसे परिवर्तित करें

मैं एक एमआईपीएस प्रोग्राम लिखना शुरू कर रहा हूं जहां मुझे हेक्साडेसिमल प्रतिनिधित्व में स्ट्रिंग मिलती है, ए 23 बी कहती है, और इसे 1 संपूर्ण हेक्स नंबर में रखना चाहती है। मैं वास्तव में इस हिस्से में खो गया हूं कि एक अंक कहने के लिए कैसे निकालें, बी कहें और इसे मैप्स के लिए हेक्स में परिवर्तित करें और फिर दूसरा प्राप्त करें। मैं एक पूरे कार्यक्रम की तलाश नहीं कर रहा हूं क्योंकि मुझे पता है कि यह ऐसा नहीं है, लेकिन यह वास्तव में खो गया है, क्योंकि आप वास्तव में खो गए हैं, धन्यवाद।

0

1 उत्तर

इस पर विचार करो। कहें कि आपका डेटा सेगमेंट इस तरह दिखता है

.data
str: .space 5 #enough room for a 4 digit hex number

और आगे, कि str द्वारा इंगित स्मृति में वह स्ट्रिंग है जिसे आप किसी संख्या में कनवर्ट करना चाहते हैं। $ t1 में अपना पहला बाइट प्राप्त करने के लिए, आप इसका उपयोग करेंगे:

la $t0 str
lb $t1 0($t0)

इसके बाद, चार मामले हैं:

  1. '0' < $t1 < '9'
  2. 'a' < $t1 < 'f'
  3. 'A' < $t1 < 'F'
  4. Error

मैं मानता हूं कि आप इन मामलों की जांच कैसे करें।

आखिरी मामले में, हमें दिए गए मूल्य से राशि बढ़ाना चाहिए; इसलिए मामलों के लिए अगला कदम होगा:

  1. sum + = $ t1 - '0'
  2. sum + = $ t1 - 'a' + 10
  3. sum + = $ t1 - 'ए' + 10

जाहिर है यह छद्म कोड है, लेकिन यह मुख्य बिंदु को दर्शाता है कि अंकों और अक्षरों के लिए ASCII मान अनुक्रमिक हैं, इसलिए उनके मूल्य की गणना तुच्छ है।

अंत में, क्योंकि हम जानते हैं कि प्रत्येक अंक बिल्कुल 4 बिट्स का प्रतिनिधित्व करता है, और क्योंकि हम बाएं से दाएं पढ़ने के लिए शुरू करते हैं, हमें शेष बिट को 4 बिट्स से बदलना होगा:

sll $sum $sum 4

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

0
जोड़ा
हाँ जो मुझे शुरू करने में मदद करता है। आह, तो स्ट्रिंग अलग बाइट्स में भरा हुआ है? यह एक समस्या थी जो मुझे नहीं पता था कि स्टोरेज, शब्द, बाइट इत्यादि कहां एक स्ट्रिंग लोड की गई थी। धन्यवाद! मैं यह देखने के लिए बाद में अपना पूरा कोड पोस्ट करने का प्रयास करूंगा कि क्या यह ठीक है अगर मैं ठीक हूं। साथ ही, मैंने सोचा था कि स्ट्रिंग से पहला बाइट प्राप्त करने के लिए एलबी $ टी 1,0 ($ टी 0) होगा।
जोड़ा लेखक user3034262, स्रोत
क्या आप मामलों पर रूपांतरण के लिए विधियों या बस शाखाओं के बाहर करने के तरीकों की सिफारिश करेंगे?
जोड़ा लेखक user3034262, स्रोत
ठीक है, लेकिन कैपिटल अक्षरों के लिए, क्या मुझे पहले 65 को घटाना नहीं होगा, और उसके बाद उन्हें इनपुट किए गए नंबर पर कनवर्ट करने के लिए 10 जोड़ें? डी के लिए कहें, 0x44 सही के रूप में व्याख्या किया गया है? यदि मैं 65 घटाता हूं तो 10 जोड़ें, यह हेक्स प्रस्तुति में डी बन जाता है क्योंकि उपयोगकर्ता चाहता था कि अंक 13 में है? अगर मैं इसे पूरी तरह से पूरा नहीं कर पाता हूं तो मैं कल तक अपना पूरा कोड रखूंगा।
जोड़ा लेखक user3034262, स्रोत
आह हाँ धन्यवाद। हालांकि मुझे खेद है कि आप फिर से परेशान हैं लेकिन शाखा की जांच और कोशिश करते समय मुझे नहीं पता कि मैं यह सही कर रहा हूं या नहीं। 'ए' <$ t1 <'f' के लिए कहें, अगर मैं $ और 1 के बीच है, तो यह जांचने के लिए कि मैं ए और एफ के बीच है या नहीं, मैं एक से अधिक के लिए कैसे जांचूं? $ s1,61, लेबल? मुझे नहीं पता कि क्या शाखा के बयान एक और धन्यवाद के बाद एक होगा। या अगर मैं बेहतर होगा तो मैं बहुत सारी शाखाओं के बारे में एक नया सवाल पूछ सकता हूं।
जोड़ा लेखक user3034262, स्रोत
क्षमा करें, यह एलबी पर एक टाइपो था। मुझे खुशी है कि मैंने मदद की है, मैं आपको जवाब स्वीकार करने की सराहना करता हूं :)
जोड़ा लेखक Konrad Lindenbach, स्रोत
नहीं, ये प्रत्येक दो पंक्तियों के लिए जा रहे हैं। आपको बस एक पंक्ति में कुछ शाखाओं की आवश्यकता है
जोड़ा लेखक Konrad Lindenbach, स्रोत
हां, कोड की तरह। दिलचस्प है, स्पिम वास्तव में मुझे अक्षर अक्षर का उपयोग करने की अनुमति देता है i.e .: subi $ t1 $ t1 'ए'
जोड़ा लेखक Konrad Lindenbach, स्रोत
शाखा के बयान दूसरे के बाद क्यों नहीं जाएंगे? शायद वास्तविक दुनिया के आवेदन में आप कुशल पाइपलाइनिंग के बारे में चिंतित हो सकते हैं, लेकिन संभावना है कि आप एक एमुलेटर का उपयोग कर रहे हैं और इसके बारे में चिंता करने की ज़रूरत नहीं है।
जोड़ा लेखक RobertB, स्रोत