में एक नौ बिट संख्या का विस्तार मैं एक छोटी, instr
है कि इस तरह दिखता है,:साइन सी
1110xxx111111111
मैं बिट्स 0-9, जो मैं (instr & 0x1FF)
के साथ क्या बाहर निकलने के लिए की जरूरत है। इस मात्रा को फिर एक नए शॉर्ट में संग्रहीत किया जाता है। समस्या यह है कि जब ऐसा होता है, तो यह 0x0000000111111111
बन जाता है, 0x1111111111111111
जैसा मैं चाहता हूं। मैं इसे कैसे ठीक करूं? धन्यवाद!
short instr = state->mem[state->pc];
unsigned int reg = instr >> 9 & 7; // 0b111
state->regs[reg] = state->pc + (instr & 0x1FF);
यह एक सिम्युलेटर है कि विधानसभा में पढ़ता है:
संपादित
कोड यह रहा। state
मशीन है, regs[]
रजिस्ट्रार हैं और pc
mem[]
में वर्तमान निर्देश का पता है।
यह ठीक है अगर अंतिम नौ बिट्स सकारात्मक संख्या का प्रतिनिधित्व करते हैं, लेकिन यदि वे -1 का प्रतिनिधित्व कर रहे हैं, तो यह सभी 1 के रूप में संग्रहीत है, जिसे मेरे कोड द्वारा सकारात्मक मूल्य के रूप में समझा जाता है।
सुनिश्चित नहीं हैं कि मैं प्रश्न या प्रक्रिया का उपयोग कर रहे समझते हैं। इन परिणामों को प्राप्त करने के लिए आप जिस कोड का उपयोग कर रहे हैं उसे साझा करने की देखभाल करें? – joce
यह स्पष्ट नहीं है, कौन '0x1111111111111111' बनना चाहिए? – MByD